Antlr 将return语句与其他语句分开
这是我语法中的一部分Antlr 将return语句与其他语句分开,antlr,Antlr,这是我语法中的一部分 statement : assignmentStatement | doLoopStatement | whileStatement | ifStatement | procedureCallStatement ; function : 'FUNCTION' IDENT '(' parameters? ')' ':' type ':=' (variable (';
statement
: assignmentStatement
| doLoopStatement
| whileStatement
| ifStatement
| procedureCallStatement
;
function
: 'FUNCTION' IDENT '(' parameters? ')' ':' type ':='
(variable (';' variable)*)?
'BEGIN'
main_body //body can be empty
return_Statement
'END' IDENT
;
其中主体是:
main_body
: (statement (';' statement)*)?
;
现在,在创建AST之前,我需要修复return语句
问题是assignmentStatement
和return\u语句
因此,我从解析器中得到一个LL(*)错误,因为它不知道选择什么
assignmentStatement
: IDENT ':=' expression
;
return_Statement
: IDENT ':=' expression
;
有什么想法吗?如果
assignmentStatement
真的应该与return\u Statement
相同,那么就没有理由同时使用这两个语句。消除return\u语句
规则,并在函数
规则中将其替换为assignmentStatement