来自其他陈述ANTLR的单独退货声明

时间:2011-03-27 01:57:44

标签: antlr

这是我语法的一部分。

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语句

问题在于assignmentStatementreturn_Statement 所以我从解析器中得到一个LL(*)错误,因为它不知道该选择什么。

assignmentStatement
    :   IDENT ':=' expression
    ;

return_Statement
    :   IDENT ':=' expression
    ;

任何想法?

1 个答案:

答案 0 :(得分:0)

如果assignmentStatement确实应该与return_Statement完全相同,那么就没有理由同时拥有这两者。删除return_Statement规则,并在function规则中将其替换为assignmentStatement