将 return 语句与其他语句分开 ANTRL
这是我的语法的一部分。
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
;
有什么想法吗?
here's part from my grammar.
statement
: assignmentStatement
| doLoopStatement
| whileStatement
| ifStatement
| procedureCallStatement
;
function
: 'FUNCTION' IDENT '(' parameters? ')' ':' type ':='
(variable (';' variable)*)?
'BEGIN'
main_body //body can be empty
return_Statement
'END' IDENT
;
where main_body is:
main_body
: (statement (';' statement)*)?
;
now, before creating my AST, I need to fix the return statement,
the problem is that the assignmentStatement
and return_Statement
and so I'm getting a LL(*) error from the parser, as it does not know what to choose.
assignmentStatement
: IDENT ':=' expression
;
return_Statement
: IDENT ':=' expression
;
any ideas?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果
assignmentStatement
确实应该与return_Statement
相同,那么就没有理由同时拥有两者。消除return_Statement
规则,并在function
规则中将其替换为assignmentStatement
。If
assignmentStatement
is really supposed to be identical toreturn_Statement
then there's no reason to have both. Eliminate thereturn_Statement
rule and in yourfunction
rule replace it withassignmentStatement
.