ANTLR4 выдает исключение и завершает работу, если возникает какая-либо ошибка с использованием Java - PullRequest
0 голосов
/ 16 октября 2019

У меня пользовательская функция, написанная так. Functionconcat(Functionadd(1,2),1).

Ниже приведен грамматик, который я использую. Теперь я изменил грамматику, с которой он работает, и проверяю тип возвращаемого значения для param, если функция существует:

grammar FunctionGrammer;

INT
 : [0-9]+
 ;

ID
 : [a-zA-Z_] [a-zA-Z_0-9]*
 ; 

expr : add;
string : 'Functionadd(' INT ',' INT ')' ;
add : 'Functionadd(' INT ',' INT ')' ;
concat : 'Functionconcat(' (string|INT )','INT ')';

Ниже приведен метод теста:

public static void main(String[] args) {
    try {
        CodePointCharStream input = CharStreams.fromString("Functionconcat(Functionadd(m,2),1)");
        FunctionGrammerLexer lexer = new FunctionGrammerLexer(input);
        CommonTokenStream tokenStream = new CommonTokenStream(lexer);
        FunctionGrammerParser parser = new FunctionGrammerParser(tokenStream);
        parser.setErrorHandler(new BailErrorStrategy());
        ParseTree tree = parser.concat();
        FunctionCompilerImpl visitor = new FunctionCompilerImpl();
        visitor.visit(tree);
    } catch (ParseCancellationException e) {
        e.printStackTrace();
    }

    }

Это исключение, но какмогу ли я дать значимое исключение, такое как исключение несоответствия типа данных параметра / параметра или исключение несоответствия имени функции.

impl посетителя:

public class FunctionCompilerImpl extends FunctionGrammerBaseVisitor<String>{



    @Override
    public String visitConcat(FunctionGrammerParser.ConcatContext ctx) {
        super.visitConcat(ctx);
        System.out.println("==================="+ctx);
        return null;
    }

}

Но vistor не печатает System.out.println("==================="+ctx);.

...