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); }
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); } }