这是我语法的一部分。
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是:
main_body
: (statement (';' statement)*)?
;
现在,在创建AST之前,我需要修复return语句
问题在于assignmentStatement
和return_Statement
所以我从解析器中得到一个LL(*)错误,因为它不知道该选择什么。
assignmentStatement
: IDENT ':=' expression
;
return_Statement
: IDENT ':=' expression
;
任何想法?
答案 0 :(得分:0)
如果assignmentStatement
确实应该与return_Statement
完全相同,那么就没有理由同时拥有这两者。删除return_Statement
规则,并在function
规则中将其替换为assignmentStatement
。