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
|
with LValue
|
||||||
object ArrayElem extends ParserBridge2[String, List[Expr], ArrayElem]
|
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
|
// R values
|
||||||
sealed trait RValue
|
sealed trait RValue
|
||||||
|
|
||||||
@ -58,24 +55,28 @@ object ast {
|
|||||||
case class Call(name: String, args: List[Expr]) extends Expr6 with RValue
|
case class Call(name: String, args: List[Expr]) extends Expr6 with RValue
|
||||||
object Call extends ParserBridge2[String, List[Expr], Call]
|
object Call extends ParserBridge2[String, List[Expr], Call]
|
||||||
|
|
||||||
// Operators
|
// Unary operators
|
||||||
sealed trait UnaryOperator
|
case class Negate(x: Expr6) extends Expr6
|
||||||
case object Negate extends UnaryOperator with ParserBridge0[Negate.type]
|
object Negate extends ParserBridge1[Expr6, Negate]
|
||||||
case object Not extends UnaryOperator with ParserBridge0[Not.type]
|
case class Not(x: Expr6) extends Expr6
|
||||||
case object Len extends UnaryOperator with ParserBridge0[Len.type]
|
object Not extends ParserBridge1[Expr6, Not]
|
||||||
case object Ord extends UnaryOperator with ParserBridge0[Ord.type]
|
case class Len(x: Expr6) extends Expr6
|
||||||
case object Chr extends UnaryOperator with ParserBridge0[Chr.type]
|
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
|
// Binary operators
|
||||||
case class Add(x: Expr5, y: Expr6) extends Expr5
|
case class Add(x: Expr5, y: Expr6) extends Expr4
|
||||||
object Add extends ParserBridge2[Expr5, Expr6, Add]
|
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]
|
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]
|
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]
|
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]
|
object Mod extends ParserBridge2[Expr6, Expr6, Mod]
|
||||||
case class Greater(x: Expr4, y: Expr4) extends Expr3
|
case class Greater(x: Expr4, y: Expr4) extends Expr3
|
||||||
object Greater extends ParserBridge2[Expr4, Expr4, Greater]
|
object Greater extends ParserBridge2[Expr4, Expr4, Greater]
|
||||||
@ -85,13 +86,13 @@ object ast {
|
|||||||
object Less extends ParserBridge2[Expr4, Expr4, Less]
|
object Less extends ParserBridge2[Expr4, Expr4, Less]
|
||||||
case class LessEq(x: Expr4, y: Expr4) extends Expr3
|
case class LessEq(x: Expr4, y: Expr4) extends Expr3
|
||||||
object LessEq extends ParserBridge2[Expr4, Expr4, LessEq]
|
object LessEq extends ParserBridge2[Expr4, Expr4, LessEq]
|
||||||
case class Eq(x: Expr4, y: Expr4) extends Expr3
|
case class Eq(x: Expr3, y: Expr3) extends Expr2
|
||||||
object Eq extends ParserBridge2[Expr4, Expr4, Eq]
|
object Eq extends ParserBridge2[Expr3, Expr3, Eq]
|
||||||
case class Neq(x: Expr4, y: Expr4) extends Expr3
|
case class Neq(x: Expr3, y: Expr3) extends Expr2
|
||||||
object Neq extends ParserBridge2[Expr4, Expr4, Neq]
|
object Neq extends ParserBridge2[Expr3, Expr3, Neq]
|
||||||
case class And(x: Expr2, y: Expr2) extends Expr2
|
case class And(x: Expr2, y: Expr2) extends Expr1
|
||||||
object And extends ParserBridge2[Expr2, Expr2, And]
|
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]
|
object Or extends ParserBridge2[Expr1, Expr1, Or]
|
||||||
|
|
||||||
// Statements
|
// Statements
|
||||||
|
Loading…
x
Reference in New Issue
Block a user