作用域中的java Antlr check返回语句
我想知道如何在语法分析期间检查函数中的所有路径是否都有返回。假设我在Lexer中有以下内容
RETURN: 'return';
PRINT: 'print';
IF:'if';
ELSE: 'else';
THEN:'then';
PLUS: '+';
MINUS:'-';
EQUALS: '==';
DIGIT: '0'..'9';
OPEN:'{';
CLOSE:'}';
STRING: [a..zA..Z]+;
SEMICOLON: ';';
和解析器
function: STRING OPEN statement CLOSE
statement: RETURN expr | PRINT expr | IF expr THEN statement ELSE statement | statement SEMICOLON statement;
expr: DIGIT| expr PLUS expr | expr MINUS expr | expr EQUALS expr;
我的问题是一个有效的函数应该有一个return语句,后面什么都没有。 所以一个有效的是
test { return 2+2 }
或者
test{ if 2 == 2 then return 2 else return 3 }
如果返回后有无法访问的代码,则返回无效代码。例如
test{return 2; print 3}
我该如何检查返回语句后是否没有任何内容
我的主要java方法如下所示:
MyLexer mylexer = new MyLexer(new ANTLRInputStream(System.in));
CommonTokenStream toks = new CommonTokenStream(mylexer);
MyParser parser = new MyParser(tokens);
ParseTree parseTree = parser.program();
# 1 楼答案
我不是专家,直到今天才使用过错误报告,但是如果你只是想要一个错误列表,你可以根据The Definitive ANTLR 4 Reference第9章的启发做以下事情
文件
Question.g4
:文件
MyListener.java
:文件
test.java
:文件
t.text
:执行: