static void Main(string[] args) { Interpreter interpret = new Interpreter(); //check(ref interpret, "7 + (((3 + 2)))", 2); //Console.WriteLine("interpret.Expr"); //Console.WriteLine(interpret.Expr); Num num = new Num(new Token("INTEGER", "0123")); BinOp binOp = new BinOp(new Token("integer", "0123"), new Token("PLUS", "+"), new Token("INTEGER", "4567")); Console.WriteLine(num); Console.WriteLine(binOp); //Console.WriteLine(interpret.Tokens); //Console.WriteLine(interpret.Tokens); //Console.WriteLine(interpret.Tokens); // //Console.WriteLine(">>" + interpret.Tokens); //Console.WriteLine(">>" + interpret.Tokens); //Console.WriteLine(">>" + interpret.Tokens); //Console.WriteLine(">>" + interpret.Tokens); //Console.WriteLine(">>" + interpret.Tokens); //Console.WriteLine(">>" + interpret.Tokens); //Console.WriteLine(">>" + interpret.Tokens); //Console.WriteLine(">>" + interpret.Tokens); //Token t = new Token("djdjdjd", "dddddd"); //Console.WriteLine(t); }
public int visit(AST node) { if (node.GetType().Name == "BinOp") { BinOp d = node as BinOp; if (d != null) { if (d.Op.Type.Equals("PLUS")) { return(this.visit(d.Left) + this.visit(d.Right)); } else if (d.Op.Type.Equals("MINUS")) { return(this.visit(d.Left) - this.visit(d.Right)); } else if (d.Op.Type.Equals("MUL")) { return(this.visit(d.Left) * this.visit(d.Right)); } else if (d.Op.Type.Equals("DIV")) { return(this.visit(d.Left) / this.visit(d.Right)); } } } else if (node.GetType().Name == "Num") { Num d = node as Num; if (d != null) { return(Convert.ToInt32(d.Value)); } } else if (node.GetType().Name == "Assign") { Assign d = node as Assign; if (d != null) { dict.Add(d.Left.Value, d.Right); } } else if (node.GetType().Name == "Var") { Var d = node as Var; if (d != null) { return(15); } } return(0); }