public override Expression VisitLiteral([NotNull] RuleEngineParser.LiteralContext context) { var booleanLiteralContext = context.booleanLiteral(); if (booleanLiteralContext != null) { return(VisitBooleanLiteral(booleanLiteralContext)); } var stringLiteralContext = context.stringLiteral(); if (stringLiteralContext != null) { return(VisitStringLiteral(stringLiteralContext)); } var terminalNode = context.INTEGER_LITERAL(); if (terminalNode != null) { var value = ulong.Parse(terminalNode.GetText()); if (value <= int.MaxValue) { return(Expression.Constant((int)value)); } else { return(Expression.Constant(value)); } } terminalNode = context.REAL_LITERAL(); if (terminalNode != null) { var value = decimal.Parse(terminalNode.GetText()); return(Expression.Constant(value)); } terminalNode = context.CHARACTER_LITERAL(); if (terminalNode != null) { var value = terminalNode.GetText(); if (value.Length > 1) { return(Expression.Constant(value)); } else if (value.Length == 1) { return(Expression.Constant(value[0])); } else { throw new NotSupportedException("Not support '' value."); } } return(Expression.Constant(null)); }
/// <summary> /// Visit a parse tree produced by <see cref="RuleEngineParser.literal"/>. /// <para> /// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/> /// on <paramref name="context"/>. /// </para> /// </summary> /// <param name="context">The parse tree.</param> /// <return>The visitor result.</return> public virtual Result VisitLiteral([NotNull] RuleEngineParser.LiteralContext context) { return(VisitChildren(context)); }