Ejemplo n.º 1
0
        public object Evaluate(ParseTreeNode x)
        {
            object result = null;

            MethodTracer.Enter();

            if (_treefun.ContainsKey(x.Name))
            {
                MethodTracer.LogMessage("FUN:{0}", x.Name);
                result = _treefun[x.Name](x);
            }
            else
            {
                try
                {
                    result = this[x.Name];
                }
                catch (KeyNotFoundException)
                {
                    result = null;
                }
            }
            TraceExpression(x, result);
            MethodTracer.Exit();
            return(result);
        }
Ejemplo n.º 2
0
        private static void TraceExpression(ParseTreeNode x, object result)
        {
            StringBuilder sb = new StringBuilder();

            x.PrintTo(sb);
            MethodTracer.LogMessage("EVAL:{0} -> {1}", sb, result);
        }
Ejemplo n.º 3
0
 public override Operator led(Operator left)
 {
     MethodTracer.LogMessage("Closing:{0},Separator:{1}", Closing, Separator);
     if (ledd == null)
     {
         Name    = "APPLY";
         this[0] = left;
         if (parser.Token != null && parser.Token.value != Closing)
         {
             int i = 1;
             while (true)
             {
                 this[i] = parser.Expression(0);
                 i++;
                 if (parser.Token != null)
                 {
                     MethodTracer.LogMessage("Expression Sep: {0}", parser.Token.value == Separator);
                 }
                 if (parser.Token == null || parser.Token.value != Separator)
                 {
                     break;
                 }
                 parser.Advance(TokenType.Symbol, Separator);
             }
             parser.Advance(TokenType.Symbol, Closing);
         }
         return(this);
     }
     else
     {
         return(ledd(this, left));
     }
 }
Ejemplo n.º 4
0
 void BuildComprehension()
 {
     MethodTracer.Enter();
     while (true)
     {
         MethodTracer.LogMessage("{0}", parser.Token);
         if (parser.Token.type != TokenType.Identifier)
         {
             MethodTracer.LogWarning("First part in comprehension must be an identifier.");
             break;
         }
         Name    = "LISTCOMPREHENSION";
         this[1] = new Operator()
         {
             Name = parser.Token.value
         };
         parser.Advance();
         parser.Advance(TokenType.Symbol, ":");
         this[2] = parser.Expression(0);
     }
     MethodTracer.Exit();
 }
Ejemplo n.º 5
0
        public override Operator nud()
        {
            MethodTracer.Enter();
            ParseTreeNode n = null;
            int           i = 0;

            while (parser.Token != null && parser.Token.value != Closing)
            {
                n = parser.Expression(0);
                MethodTracer.LogMessage("Expression in List:{0}", n);
                this[i++] = n;
                if (parser.Token != null && parser.Token.value == Separator)
                {
                    parser.Advance(TokenType.Symbol, Separator);
                }
            }
            if (parser.Token != null)
            {
                parser.Advance(TokenType.Symbol, Closing);
            }
            MethodTracer.Exit();
            return(this);
        }