static void Try(string input) { var str = new AntlrInputStream(input); System.Console.WriteLine(input); var lexer = new FilterLexer(str); var tokens = new CommonTokenStream(lexer); var parser = new FilterParser(tokens); var listener_lexer = new ErrorListener <int>(); var listener_parser = new ErrorListener <IToken>(); lexer.AddErrorListener(listener_lexer); parser.AddErrorListener(listener_parser); var tree = parser.booleanAndExpression(); if (listener_lexer.had_error || listener_parser.had_error) { System.Console.WriteLine("error in parse."); } else { System.Console.WriteLine("parse completed."); } foreach (var t in tokens.GetTokens()) { System.Console.WriteLine(t); } System.Console.WriteLine(TreeOutput.OutputTree(tree, lexer, parser, tokens)); }
/// <summary> /// Create expression from string /// </summary> public FilterExpression(string filterStatement) { // Parse var lexer = new FilterLexer(new AntlrInputStream(filterStatement)); lexer.RemoveErrorListeners(); lexer.AddErrorListener(new RaiseException <int>()); var parser = new FilterParser(new CommonTokenStream(lexer)); parser.RemoveErrorListeners(); parser.AddErrorListener(new RaiseException <IToken>()); var context = parser.parse(); // Fill in select and where clause SelectClause = new SimpleAttributeOperandCollection(); WhereClause = new ContentFilter(); if (context.selectList().STAR() != null) { // Select all / default } else { foreach (var expr in context.selectList().selectexpr()) { expr.attr_op().GetText(); var nodeId = expr.attr_op().nodeId().STRING_LITERAL().GetText(); var browsePathElems = expr.attr_op().nodeId().browsePathElement(); var attributeId = Enum.Parse <NodeAttribute>(expr.attr_op().attributeId().GetText(), true); var operand = new SimpleAttributeOperand { // TypeDefinitionId = expr.attr_op() // AttributeId = (field.InstanceDeclaration.NodeClass == NodeClass.Object) ? Attributes.NodeId : Attributes.Value, // BrowsePath = field.InstanceDeclaration.BrowsePath }; SelectClause.Add(operand); } } Evaluate(context.elem_op()); }