@Override public BaseNode visitExpressionTextual(FEEL_1_1Parser.ExpressionTextualContext ctx) { BaseNode expr = visit( ctx.expr ); return expr; }
@Override public BaseNode visitContextEntry(FEEL_1_1Parser.ContextEntryContext ctx) { FEEL_1_1Parser.KeyContext key = ctx.key(); FEEL_1_1Parser.ExpressionContext expression = ctx.expression(); if (key == null || expression == null) { return null; } BaseNode name = visit(key); BaseNode value = visit(expression); if (value == null) return null; return ASTBuilderFactory.newContextEntry( ctx, name, value ); }
@Override public BaseNode visitNamedParameters(FEEL_1_1Parser.NamedParametersContext ctx) { List<BaseNode> params = new ArrayList<>(); for ( FEEL_1_1Parser.NamedParameterContext npc : ctx.namedParameter() ) { params.add( visit( npc ) ); } return ASTBuilderFactory.newListNode( ctx, params ); }
@Override public BaseNode visitQuantExprEvery(FEEL_1_1Parser.QuantExprEveryContext ctx) { ListNode list = (ListNode) visit( ctx.iterationContexts() ); BaseNode expr = visit( ctx.expression() ); return ASTBuilderFactory.newQuantifiedExpression( ctx, QuantifiedExpressionNode.Quantifier.EVERY, list, expr ); }
@Override public BaseNode visitPositionalParameters(FEEL_1_1Parser.PositionalParametersContext ctx) { List<BaseNode> params = new ArrayList<>(); for ( FEEL_1_1Parser.ExpressionContext ec : ctx.expression() ) { params.add( visit( ec ) ); } return ASTBuilderFactory.newListNode( ctx, params ); }
@Override public BaseNode visitSignedUnaryExpressionPlus(FEEL_1_1Parser.SignedUnaryExpressionPlusContext ctx) { BaseNode node = visit( ctx.unaryExpressionNotPlusMinus() ); return ASTBuilderFactory.newSignedUnaryNode( ctx, node ); }
@Override public BaseNode visitList(FEEL_1_1Parser.ListContext ctx) { if ( ctx.expressionList() == null ) { // empty list -> children are [ ] return ASTBuilderFactory.newListNode( ctx, new ArrayList<>() ); } else { // returns actual list return visit( ctx.expressionList() ); } }
@Override public BaseNode visitContext(FEEL_1_1Parser.ContextContext ctx) { ListNode list = ctx.contextEntries() != null ? (ListNode) visit( ctx.contextEntries() ) : ASTBuilderFactory.newListNode( ctx, new ArrayList<>() ); return ASTBuilderFactory.newContextNode( ctx, list ); }
@Override public BaseNode visitPositiveUnaryTests(FEEL_1_1Parser.PositiveUnaryTestsContext ctx) { List<BaseNode> tests = new ArrayList<>(); for ( int i = 0; i < ctx.getChildCount(); i++ ) { if ( ctx.getChild( i ) instanceof FEEL_1_1Parser.PositiveUnaryTestContext || ctx.getChild( i ) instanceof FEEL_1_1Parser.PrimaryContext) { tests.add( visit( ctx.getChild( i ) ) ); } } return ASTBuilderFactory.newListNode( ctx, tests ); }
private BaseNode parse(String input, Map<String, Type> inputTypes) { FEEL_1_1Parser parser = FEELParser.parse(null, input, inputTypes, Collections.emptyMap(), Collections.emptyList(), Collections.emptyList()); ParseTree tree = parser.expression(); ASTBuilderVisitor v = new ASTBuilderVisitor(inputTypes); BaseNode expr = v.visit( tree ); return expr; }
private CompiledFEELExpression parse(String input, Map<String, Type> inputTypes) { FEEL_1_1Parser parser = FEELParser.parse(null, input, inputTypes, Collections.emptyMap(), Collections.emptyList(), Collections.emptyList()); ParseTree tree = parser.compilation_unit(); ASTBuilderVisitor v = new ASTBuilderVisitor(inputTypes); BaseNode node = v.visit(tree); DirectCompilerResult directResult = node.accept(new ASTCompilerVisitor()); Expression expr = directResult.getExpression(); CompiledFEELExpression cu = new CompilerBytecodeLoader().makeFromJPExpression(input, expr, directResult.getFieldDeclarations()); return cu; }