public static FEEL_1_1Parser parse(FEELEventListenersManager eventsManager, String source, Map<String, Type> inputVariableTypes, Map<String, Object> inputVariables, Collection<FEELFunction> additionalFunctions, List<FEELProfile> profiles) { ANTLRInputStream input = new ANTLRInputStream(source); FEEL_1_1Lexer lexer = new FEEL_1_1Lexer( input ); CommonTokenStream tokens = new CommonTokenStream( lexer ); FEEL_1_1Parser parser = new FEEL_1_1Parser( tokens ); ParserHelper parserHelper = new ParserHelper(eventsManager); additionalFunctions.forEach(f -> parserHelper.getSymbolTable().getBuiltInScope().define(f.getSymbol())); profiles.stream().filter(FEELv12Profile.class::isInstance).forEach(dc -> { parserHelper.setFeatDMN12EnhancedForLoopEnabled(true); parserHelper.setFeatDMN12weekday(true); }); parser.setHelper(parserHelper); parser.setErrorHandler( new FEELErrorHandler() ); parser.removeErrorListeners(); // removes the error listener that prints to the console parser.addErrorListener( new FEELParserErrorListener( eventsManager ) ); // pre-loads the parser with symbols defineVariables( inputVariableTypes, inputVariables, parser ); return parser; }
public static List<FEELEvent> checkVariableName( String source ) { if( source == null || source.isEmpty() ) { return Collections.singletonList( new SyntaxErrorEvent( FEELEvent.Severity.ERROR, Msg.createMessage( Msg.INVALID_VARIABLE_NAME_EMPTY ), null, 0, 0, null ) ); } ANTLRInputStream input = new ANTLRInputStream(source); FEEL_1_1Lexer lexer = new FEEL_1_1Lexer( input ); CommonTokenStream tokens = new CommonTokenStream( lexer ); FEEL_1_1Parser parser = new FEEL_1_1Parser( tokens ); parser.setHelper( new ParserHelper() ); parser.setErrorHandler( new FEELErrorHandler() ); FEELParserErrorListener errorChecker = new FEELParserErrorListener( null ); parser.removeErrorListeners(); // removes the error listener that prints to the console parser.addErrorListener( errorChecker ); FEEL_1_1Parser.NameDefinitionContext nameDef = parser.nameDefinition(); if( ! errorChecker.hasErrors() && nameDef != null && source.trim().equals( parser.getHelper().getOriginalText( nameDef ) ) ) { return Collections.emptyList(); } return errorChecker.getErrors(); }