diff --git a/src/main/wacc/ast.scala b/src/main/wacc/ast.scala index 3093fcf..16d983c 100644 --- a/src/main/wacc/ast.scala +++ b/src/main/wacc/ast.scala @@ -43,9 +43,6 @@ object ast { with LValue object ArrayElem extends ParserBridge2[String, List[Expr], ArrayElem] - case class UnaryOper(op: UnaryOperator, expr: Expr6) extends Expr6 - object UnaryOper extends ParserBridge2[UnaryOperator, Expr6, UnaryOper] - // R values sealed trait RValue @@ -58,24 +55,28 @@ object ast { case class Call(name: String, args: List[Expr]) extends Expr6 with RValue object Call extends ParserBridge2[String, List[Expr], Call] - // Operators - sealed trait UnaryOperator - case object Negate extends UnaryOperator with ParserBridge0[Negate.type] - case object Not extends UnaryOperator with ParserBridge0[Not.type] - case object Len extends UnaryOperator with ParserBridge0[Len.type] - case object Ord extends UnaryOperator with ParserBridge0[Ord.type] - case object Chr extends UnaryOperator with ParserBridge0[Chr.type] + // Unary operators + case class Negate(x: Expr6) extends Expr6 + object Negate extends ParserBridge1[Expr6, Negate] + case class Not(x: Expr6) extends Expr6 + object Not extends ParserBridge1[Expr6, Not] + case class Len(x: Expr6) extends Expr6 + object Len extends ParserBridge1[Expr6, Len] + case class Ord(x: Expr6) extends Expr6 + object Ord extends ParserBridge1[Expr6, Ord] + case class Chr(x: Expr6) extends Expr6 + object Chr extends ParserBridge1[Expr6, Chr] - sealed trait BinaryOperator - case class Add(x: Expr5, y: Expr6) extends Expr5 + // Binary operators + case class Add(x: Expr5, y: Expr6) extends Expr4 object Add extends ParserBridge2[Expr5, Expr6, Add] - case class Sub(x: Expr5, y: Expr6) extends Expr5 + case class Sub(x: Expr5, y: Expr6) extends Expr4 object Sub extends ParserBridge2[Expr5, Expr6, Sub] - case class Mul(x: Expr6, y: Expr6) extends Expr6 + case class Mul(x: Expr6, y: Expr6) extends Expr5 object Mul extends ParserBridge2[Expr6, Expr6, Mul] - case class Div(x: Expr6, y: Expr6) extends Expr6 + case class Div(x: Expr6, y: Expr6) extends Expr5 object Div extends ParserBridge2[Expr6, Expr6, Div] - case class Mod(x: Expr6, y: Expr6) extends Expr6 + case class Mod(x: Expr6, y: Expr6) extends Expr5 object Mod extends ParserBridge2[Expr6, Expr6, Mod] case class Greater(x: Expr4, y: Expr4) extends Expr3 object Greater extends ParserBridge2[Expr4, Expr4, Greater] @@ -85,13 +86,13 @@ object ast { object Less extends ParserBridge2[Expr4, Expr4, Less] case class LessEq(x: Expr4, y: Expr4) extends Expr3 object LessEq extends ParserBridge2[Expr4, Expr4, LessEq] - case class Eq(x: Expr4, y: Expr4) extends Expr3 - object Eq extends ParserBridge2[Expr4, Expr4, Eq] - case class Neq(x: Expr4, y: Expr4) extends Expr3 - object Neq extends ParserBridge2[Expr4, Expr4, Neq] - case class And(x: Expr2, y: Expr2) extends Expr2 + case class Eq(x: Expr3, y: Expr3) extends Expr2 + object Eq extends ParserBridge2[Expr3, Expr3, Eq] + case class Neq(x: Expr3, y: Expr3) extends Expr2 + object Neq extends ParserBridge2[Expr3, Expr3, Neq] + case class And(x: Expr2, y: Expr2) extends Expr1 object And extends ParserBridge2[Expr2, Expr2, And] - case class Or(x: Expr1, y: Expr1) extends Expr1 + case class Or(x: Expr1, y: Expr1) extends Expr object Or extends ParserBridge2[Expr1, Expr1, Or] // Statements