public static Expr Create(Expr left, Expr right) => new Modulo(left, right);
public IfElseStmt(Expr cond, Stmt trueStmt, Stmt falseStmt) { this.Cond = cond; this.TrueStmt = trueStmt; this.FalseStmt = falseStmt; }
private CaseStmt(Expr expr, Stmt stmt) { this.Expr = expr; this.Stmt = stmt; }
public SwitchStmt(Expr expr, Stmt stmt) { this.Expr = expr; this.Stmt = stmt; }
public IfStmt(Expr cond, Stmt stmt) { this.Cond = cond; this.Stmt = stmt; }
public WhileStmt(Expr cond, Stmt body) { this.Cond = cond; this.Body = body; }
public DoWhileStmt(Stmt body, Expr cond) { this.Body = body; this.Cond = cond; }
private Greater(Expr left, Expr right) : base(left, right) { }
private NotEqual(Expr left, Expr right) : base(left, right) { }
public static Expr Create(Expr left, Expr right) => new RShift(left, right);
private Less(Expr left, Expr right) : base(left, right) { }
private RShift(Expr left, Expr right) : base(left, right) { }
private Sub(Expr left, Expr right) : base(left, right) { }
private Add(Expr left, Expr right) : base(left, right) { }
protected BinaryArithmeticOp(Expr left, Expr right) : base(left, right) { }
public static Expr Create(Expr left, Expr right) => new NotEqual(left, right);
protected BinaryOp(Expr left, Expr right) { this.Left = left; this.Right = right; }
private Xor(Expr left, Expr right) : base(left, right) { }
public static Stmt Create(Expr cond, Stmt body) => new WhileStmt(cond, body);
public static Expr Create(Expr left, Expr right) => new Xor(left, right);
public static Stmt Create(Stmt body, Expr cond) => new DoWhileStmt(body, cond);
private BitwiseOr(Expr left, Expr right) : base(left, right) { }
public static Stmt Create(Expr expr, Stmt stmt) => new SwitchStmt(expr, stmt);
public static Expr Create(Expr left, Expr right) => new BitwiseOr(left, right);
public static Stmt Create(Expr cond, Stmt stmt) => new IfStmt(cond, stmt);
private LogicalOr(Expr left, Expr right) : base(left, right) { }
public static Stmt Create(Expr cond, Stmt trueStmt, Stmt falseStmt) => new IfElseStmt(cond, trueStmt, falseStmt);
public static Expr Create(Expr left, Expr right) => new LogicalOr(left, right);
public static Stmt Create(Expr expr, Stmt stmt) => new CaseStmt(expr, stmt);
private Modulo(Expr left, Expr right) : base(left, right) { }