Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }