fix: unary and binary operators AST - consistent style, precedence and associativity
This commit is contained in:
parent
49ebf2f7d0
commit
c0cf3692fd
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user