Example #1
0
 public override bool VisitLiteral([NotNull] calculatorParser.LiteralContext context)
 {
     if (context.children != null)
     {
         foreach (var c in context.children)
         {
             if (!Visit(c))
             {
                 Results[context] = false;
                 return(false);
             }
         }
     }
     Results[context] = true;
     return(true);
 }
Example #2
0
        public override Expression VisitLiteral([NotNull] calculatorParser.LiteralContext context)
        {
            if (context.children != null)
            {
                foreach (IParseTree c in context.children)
                {
                    Visit(c);
                }
            }
            var child = context.children[0];

            if (child is TerminalNodeImpl)
            {
                TerminalNodeImpl c2  = child as TerminalNodeImpl;
                IToken           sym = c2.Symbol;
                int type             = sym.Type;
                switch (type)
                {
                case calculatorParser.REAL_LITERAL:
                    try
                    {
                        string     str    = context.GetText();
                        double     val    = Convert.ToDouble(str);
                        Expression result = Expression.Constant((double)val, typeof(double));
                        Results[context] = result;
                        return(result);
                    }
                    catch (Exception)
                    {
                    }
                    return(null);

                case calculatorParser.INTEGER_LITERAL:
                    try
                    {
                        string     str    = context.GetText();
                        int        val    = Convert.ToInt32(str);
                        Expression result = Expression.Constant((double)val, typeof(double));
                        Results[context] = result;
                        return(result);
                    }
                    catch (Exception)
                    {
                    }
                    return(null);

                case calculatorParser.TRUE:
                {
                    Expression result = Expression.Constant(true, typeof(bool));
                    Results[context] = result;
                    return(result);
                }

                case calculatorParser.FALSE:
                {
                    Expression result = Expression.Constant(false, typeof(bool));
                    Results[context] = result;
                    return(result);
                }

                default:
                {
                    Expression result = null;
                    Results[context] = result;
                    return(result);
                }
                }
            }
            else
            {
                if (_completeness.Results[context])
                {
                    Expression lhs = Results[context.GetChild(0)];
                    Results[context] = lhs;
                    return(lhs);
                }
                Results[context] = null;
                return(null);
            }
        }