/// <summary> /// Parse the AST constant node and return Object value. /// </summary> /// <param name="node">parse node for which to parse the string value</param> /// <returns>value matching AST node type</returns> public static object Parse(IParseTree node) { if (node is ITerminalNode) { var terminal = (ITerminalNode) node; switch (terminal.Symbol.Type) { case EsperEPL2GrammarParser.BOOLEAN_TRUE: return BoolValue.ParseString(terminal.GetText()); case EsperEPL2GrammarParser.BOOLEAN_FALSE: return BoolValue.ParseString(terminal.GetText()); case EsperEPL2GrammarParser.VALUE_NULL: return null; default: throw ASTWalkException.From("Encountered unexpected constant type " + terminal.Symbol.Type, terminal.Symbol); } } var ruleNode = (IRuleNode) node; var ruleIndex = ruleNode.RuleContext.RuleIndex; if (ruleIndex == EsperEPL2GrammarParser.RULE_number) { return ParseNumber(ruleNode, 1); } if (ruleIndex == EsperEPL2GrammarParser.RULE_numberconstant) { var number = FindChildRuleByType(ruleNode, EsperEPL2GrammarParser.RULE_number); if (ruleNode.ChildCount > 1) { if (ASTUtil.IsTerminatedOfType(ruleNode.GetChild(0), EsperEPL2GrammarLexer.MINUS)) { return ParseNumber(number, -1); } return ParseNumber(number, 1); } return ParseNumber(number, 1); } if (ruleIndex == EsperEPL2GrammarParser.RULE_stringconstant) { return StringValue.ParseString(node.GetText()); } if (ruleIndex == EsperEPL2GrammarParser.RULE_constant) { return Parse(ruleNode.GetChild(0)); } throw ASTWalkException.From("Encountered unrecognized constant", node.GetText()); }