public BinaryExpression(string op, Expression left, Expression right, int precedence, int associativity) : base(precedence) { this.op = op; this.left = left; this.right = right; this.associativity = associativity; }
public FunctionCall(Expression function, Expression[] arguments, bool multiple) : base(PRECEDENCE_ATOMIC) { this.function = function; this.arguments = arguments; this.multiple = multiple; }
public TableReference(Expression table, Expression index) : base(PRECEDENCE_ATOMIC) { this.table = table; this.index = index; }
public static BinaryExpression makeSUB(Expression left, Expression right) { return new BinaryExpression("-", left, right, PRECEDENCE_ADD, ASSOCIATIVITY_LEFT); }
public static UnaryExpression makeUNM(Expression expression) { return new UnaryExpression("-", expression, PRECEDENCE_UNARY); }
public static UnaryExpression makeNOT(Expression expression) { return new UnaryExpression("not ", expression, PRECEDENCE_UNARY); }
public static BinaryExpression makePOW(Expression left, Expression right) { return new BinaryExpression("^", left, right, PRECEDENCE_POW, ASSOCIATIVITY_RIGHT); }
public static BinaryExpression makeMUL(Expression left, Expression right) { return new BinaryExpression("*", left, right, PRECEDENCE_MUL, ASSOCIATIVITY_LEFT); }
public static BinaryExpression makeCONCAT(Expression left, Expression right) { return new BinaryExpression("..", left, right, PRECEDENCE_CONCAT, ASSOCIATIVITY_RIGHT); }
protected internal static void printUnary(Output @out, string op, Expression expression) { @out.print(op); expression.print(@out); }
protected internal static void printBinary(Output @out, string op, Expression left, Expression right) { left.print(@out); @out.print(" "); @out.print(op); @out.print(" "); right.print(@out); }
public UnaryExpression(string op, Expression expression, int precedence) : base(precedence) { this.op = op; this.expression = expression; }