我语法中的歧义在哪里



我有以下不明确的语法,其中大写字母规则适用于简单的词法标记:

program : function | function program
function : FN ID ARROW TYPE invariants DASH block
fn_call : ID L_PAREN CONSTANT R_PAREN

invariants : invariant | invariant invariants
invariant : TYPE ID COLON invariant_tests
invariant_tests : test | test COMMA invariant_tests
test : OPERATOR CONSTANT | STAR

block : expression | expression block
expression : loop | fn_call | assignment | def | constant
loop : FOR def IN CONSTANT COLON block
assignment : ID ASSIGN CONSTANT | ID ASSIGN ID
def : TYPE assignment

我收到8个移位/减少错误(当使用Python 2.7和PLY时)。

歧义是我如何定义"一个或多个"(例如block : expression | expression block)的结果吗?

正如前面的发言者所说,您必须区分"块用法"。例如,尝试:

loop : FOR def IN CONSTANT COLON block END FOR

问题是我如何定义loop:

loop : FOR def IN CONSTANT COLON block

因为解析器不知道块是属于循环还是属于函数。

基本上,悬挂其他问题的另一个变体。

相关内容

  • 没有找到相关文章

最新更新