在antlr中匹配BEGIN和END

时间:2011-03-26 12:43:54

标签: parsing antlr

如果你看到'BEGIN'然后在这一行你必须看到'结束',我怎么能对antlr说?

这是我的代码(当我有多个语句时我只需要BEGIN / END)

whileStatement
    : 'WHILE' expression 'DO'
         'BEGIN'?
               statement
         'END'?
    ;

和我的陈述

statement
    :   assignmentStatement
    |   ifStatement
    |   doLoopStatement
    |   whileStatement
    |   procedureCallStatement
    ;   

1 个答案:

答案 0 :(得分:2)

没有使用ANTLR的经验,但通常在BNF /无上下文语法中,您将其表达为

whileStatement
    : 'WHILE' expr 'DO'
      statementBlock
    ;

statementBlock
    : statement
    | 'BEGIN' statement* 'END'
    ;

或在statementBlock的定义中添加statement作为替代。