import org.antlr.runtime.*; public class ANTLRDemo { public static void main(String[] args) throws Exception { ANTLRStringStream in = new ANTLRStringStream("12*(5-6)"); ExpLexer lexer = new ExpLexer(in); CommonTokenStream tokens = new CommonTokenStream(lexer); ExpParser parser = new ExpParser(tokens); parser.eval(); } }
import org.antlr.runtime.*; public class ANTLRDemo { public static void main(String[] args) throws Exception { ANTLRStringStream in = new ANTLRStringStream("12*(5-6)"); ExpLexer lexer = new ExpLexer(in); CommonTokenStream tokens = new CommonTokenStream(lexer); ExpParser parser = new ExpParser(tokens); System.out.println(parser.eval()); // print the value } }
private static CommonTokenStream createTokenStream(final String expression) throws HL7QueryParsingException { final CharStream input = new ANTLRStringStream(expression); final HL7QueryLexer lexer = new HL7QueryLexer(input); return new CommonTokenStream(lexer); }
@Override protected Lexer createLexer(String s) { return new FormatterStatementLexer(new ANTLRStringStream(s)); } }
@Override protected Lexer createLexer(String s) { return new ColonStatementLexer(new ANTLRStringStream(s)); } }
private List<String> splitToStatements(String script) { final List<String> statements = new ArrayList<>(); String lastStatement = new SqlScriptParser((t, sb) -> { addStatement(sb.toString(), statements); sb.setLength(0); }).parse(new ANTLRStringStream(script)); addStatement(lastStatement, statements); return statements; }
public static FilterPredicate valueOf( String str ) { if ( str == null ) { return null; } try { ANTLRStringStream in = new ANTLRStringStream( str.trim() ); QueryFilterLexer lexer = new QueryFilterLexer( in ); CommonTokenStream tokens = new CommonTokenStream( lexer ); QueryFilterParser parser = new QueryFilterParser( tokens ); FilterPredicate filter = parser.filter(); return normalize( filter ); } catch ( Exception e ) { logger.error( "Unable to parse \"{}\"", str, e ); } return null; }
private Tree compileTree(final String expression) throws AttributeExpressionLanguageParsingException { try { final CharStream input = new ANTLRStringStream(expression); final AttributeExpressionLexer lexer = new AttributeExpressionLexer(input); final CommonTokenStream lexerTokenStream = new CommonTokenStream(lexer); final AttributeExpressionParser parser = new AttributeExpressionParser(lexerTokenStream); final Tree ast = (Tree) parser.query().getTree(); final Tree tree = ast.getChild(0); // ensure that we are able to build the evaluators, so that we validate syntax final Evaluator<?> evaluator = buildEvaluator(tree); verifyMappingEvaluatorReduced(evaluator); return tree; } catch (final AttributeExpressionLanguageParsingException e) { throw e; } catch (final Exception e) { throw new AttributeExpressionLanguageParsingException(e); } }
/** Test basic || expression */ @Test public void selectAll() throws RecognitionException { String queryString = "select * where a = 1 or b > 2"; ANTLRStringStream in = new ANTLRStringStream( queryString ); CpQueryFilterLexer lexer = new CpQueryFilterLexer( in ); TokenRewriteStream tokens = new TokenRewriteStream( lexer ); CpQueryFilterParser parser = new CpQueryFilterParser( tokens ); ParsedQuery query = parser.ql().parsedQuery; Collection<SelectFieldMapping> identifiers = query.getSelectFieldMappings(); assertEquals( 0, identifiers.size() ); }
@Test public void selectRename() throws RecognitionException { String queryString = "select {source:target} where a = 1 or b > 2"; ANTLRStringStream in = new ANTLRStringStream( queryString ); CpQueryFilterLexer lexer = new CpQueryFilterLexer( in ); TokenRewriteStream tokens = new TokenRewriteStream( lexer ); CpQueryFilterParser parser = new CpQueryFilterParser( tokens ); ParsedQuery query = parser.ql().parsedQuery; Collection<SelectFieldMapping> identifiers = query.getSelectFieldMappings(); final SelectFieldMapping fieldMapping = identifiers.iterator().next(); assertEquals( "source", fieldMapping.getSourceFieldName() ); assertEquals( "target", fieldMapping.getTargetFieldName() ); }
@Test public void selectField() throws RecognitionException { String queryString = "select c where a = 1 or b > 2"; ANTLRStringStream in = new ANTLRStringStream( queryString ); CpQueryFilterLexer lexer = new CpQueryFilterLexer( in ); TokenRewriteStream tokens = new TokenRewriteStream( lexer ); CpQueryFilterParser parser = new CpQueryFilterParser( tokens ); ParsedQuery query = parser.ql().parsedQuery; Collection<SelectFieldMapping> identifiers = query.getSelectFieldMappings(); final SelectFieldMapping fieldMapping = identifiers.iterator().next(); assertEquals( "c", fieldMapping.getSourceFieldName() ); assertEquals( "c", fieldMapping.getTargetFieldName() ); }
@Test public void uuidParse() throws RecognitionException { String queryString = "select * where title = c6ee8a1c-3ef4-11e2-8861-02e81adcf3d0"; ANTLRStringStream in = new ANTLRStringStream( queryString ); CpQueryFilterLexer lexer = new CpQueryFilterLexer( in ); TokenRewriteStream tokens = new TokenRewriteStream( lexer ); CpQueryFilterParser parser = new CpQueryFilterParser( tokens ); ParsedQuery query = parser.ql().parsedQuery; Equal rootNode = ( Equal ) query.getRootOperand(); assertEquals( "title", rootNode.getProperty().getValue() ); assertEquals( UUID.fromString( "c6ee8a1c-3ef4-11e2-8861-02e81adcf3d0" ), ( ( UUIDLiteral ) rootNode.getLiteral() ).getValue() ); }
/** Simple test that constructs and AST from the ANTLR generated files */ @Test public void equality() throws RecognitionException { String queryString = "select * where a = 5"; ANTLRStringStream in = new ANTLRStringStream( queryString ); CpQueryFilterLexer lexer = new CpQueryFilterLexer( in ); TokenRewriteStream tokens = new TokenRewriteStream( lexer ); CpQueryFilterParser parser = new CpQueryFilterParser( tokens ); ParsedQuery query = parser.ql().parsedQuery; Operand root = query.getRootOperand(); Equal equal = ( Equal ) root; assertEquals( "a", equal.getProperty().getValue() ); assertEquals( 5, ( ( LongLiteral ) equal.getLiteral() ).getValue().intValue() ); }
/** Test basic not expression */ @Test public void complexExpression() throws RecognitionException { String queryString = "select * where not a = 1"; ANTLRStringStream in = new ANTLRStringStream( queryString ); CpQueryFilterLexer lexer = new CpQueryFilterLexer( in ); TokenRewriteStream tokens = new TokenRewriteStream( lexer ); CpQueryFilterParser parser = new CpQueryFilterParser( tokens ); ParsedQuery query = parser.ql().parsedQuery; Operand root = query.getRootOperand(); NotOperand not = ( NotOperand ) root; Equal equal = ( Equal ) not.getOperation(); assertEquals( "a", equal.getProperty().getValue() ); assertEquals( 1, ( ( LongLiteral ) equal.getLiteral() ).getValue().intValue() ); }
/** Test basic not expression */ @Test public void notExpression() throws RecognitionException { String queryString = "select * where not a = 1"; ANTLRStringStream in = new ANTLRStringStream( queryString ); CpQueryFilterLexer lexer = new CpQueryFilterLexer( in ); TokenRewriteStream tokens = new TokenRewriteStream( lexer ); CpQueryFilterParser parser = new CpQueryFilterParser( tokens ); ParsedQuery query = parser.ql().parsedQuery; Operand root = query.getRootOperand(); NotOperand not = ( NotOperand ) root; Equal equal = ( Equal ) not.getOperation(); assertEquals( "a", equal.getProperty().getValue() ); assertEquals( 1, ( ( LongLiteral ) equal.getLiteral() ).getValue().intValue() ); }
@Test public void selectDistance() throws RecognitionException { String queryString = "select * where a contains 'foo'"; ANTLRStringStream in = new ANTLRStringStream( queryString ); CpQueryFilterLexer lexer = new CpQueryFilterLexer( in ); TokenRewriteStream tokens = new TokenRewriteStream( lexer ); CpQueryFilterParser parser = new CpQueryFilterParser( tokens ); ParsedQuery query = parser.ql().parsedQuery; ContainsOperand operand = ( ContainsOperand ) query.getRootOperand(); assertEquals( "a", operand.getProperty().getValue() ); assertEquals( "foo", operand.getString().getValue() ); }
@Test public void stringLower() throws Exception { String queryString = "select * where title = 'Hot'"; ANTLRStringStream in = new ANTLRStringStream( queryString ); CpQueryFilterLexer lexer = new CpQueryFilterLexer( in ); TokenRewriteStream tokens = new TokenRewriteStream( lexer ); CpQueryFilterParser parser = new CpQueryFilterParser( tokens ); ParsedQuery query = parser.ql().parsedQuery; Equal rootNode = ( Equal ) query.getRootOperand(); assertEquals( "title", rootNode.getProperty().getValue() ); assertEquals( "hot", ( ( StringLiteral ) rootNode.getLiteral() ).getValue() ); }
@Test public void selectGeoWithInt() throws RecognitionException { String queryString = "select * where a within 1 of -40.343666, 175.630917"; ANTLRStringStream in = new ANTLRStringStream( queryString ); CpQueryFilterLexer lexer = new CpQueryFilterLexer( in ); TokenRewriteStream tokens = new TokenRewriteStream( lexer ); CpQueryFilterParser parser = new CpQueryFilterParser( tokens ); ParsedQuery query = parser.ql().parsedQuery; WithinOperand operand = ( WithinOperand ) query.getRootOperand(); assertEquals( "a", operand.getProperty().getValue() ); assertEquals( 1f, operand.getDistance().getFloatValue(), 0 ); assertEquals( -40.343666f, operand.getLatitude().getFloatValue(), 0 ); assertEquals( 175.630917f, operand.getLongitude().getFloatValue(), 0 ); }
@Test public void selectGeo() throws RecognitionException { String queryString = "select * where a within .1 of -40.343666, 175.630917"; ANTLRStringStream in = new ANTLRStringStream( queryString ); CpQueryFilterLexer lexer = new CpQueryFilterLexer( in ); TokenRewriteStream tokens = new TokenRewriteStream( lexer ); CpQueryFilterParser parser = new CpQueryFilterParser( tokens ); ParsedQuery query = parser.ql().parsedQuery; WithinOperand operand = ( WithinOperand ) query.getRootOperand(); assertEquals( "a", operand.getProperty().getValue() ); assertEquals( .1f, operand.getDistance().getFloatValue(), 0 ); assertEquals( -40.343666f, operand.getLatitude().getFloatValue(), 0 ); assertEquals( 175.630917f, operand.getLongitude().getFloatValue(), 0 ); }
@Test public void selectGeoWithAnd() throws RecognitionException { String queryString = "select * where location within 20000 of 37,-75 " + "and created > 1407776999925 and created < 1407777000266"; ANTLRStringStream in = new ANTLRStringStream( queryString ); CpQueryFilterLexer lexer = new CpQueryFilterLexer( in ); TokenRewriteStream tokens = new TokenRewriteStream( lexer ); CpQueryFilterParser parser = new CpQueryFilterParser( tokens ); ParsedQuery query = parser.ql().parsedQuery; AndOperand andOp1 = ( AndOperand ) query.getRootOperand(); AndOperand andOp2 = ( AndOperand ) andOp1.getLeft(); WithinOperand withinOperand = ( WithinOperand ) andOp2.getLeft(); assertEquals( "location", withinOperand.getProperty().getValue() ); assertEquals( 20000, withinOperand.getDistance().getFloatValue(), 0 ); assertEquals( 37f, withinOperand.getLatitude().getFloatValue(), 0 ); assertEquals( -75f, withinOperand.getLongitude().getFloatValue(), 0 ); }