Grako 左递归
Grako left recursion
我正在尝试使用 grako 来描述一个简单的左递归语法,但我很难做到。
右递归没有任何问题:
symbol = /[a-z]/ ;
condition = symbol "AND" condition | symbol ;
start = condition $ ;
根据我找到的所有例子,左递归应该这样描述:
symbol = /[a-z]/ ;
condition = condition "AND" symbol | symbol ;
start = condition $ ;
但是,它不适用于下面给出的规则:
a AND b AND c
我收到这个错误:
grako.exceptions.FailedParse: srecur(1:3) Expecting end of text. :
a AND b AND c
^
start
此时我的理解是规则的第一个字符匹配 symbol
而不是 condition "AND" symbol
,所以 grako 想使用它。但是我的开始规则强制所有角色都被消耗了。
我已经尝试过许多变通方法,但一直找不到合适的方法。
我正在尝试使用 grako 来描述一个简单的左递归语法,但我很难做到。
右递归没有任何问题:
symbol = /[a-z]/ ;
condition = symbol "AND" condition | symbol ;
start = condition $ ;
根据我找到的所有例子,左递归应该这样描述:
symbol = /[a-z]/ ;
condition = condition "AND" symbol | symbol ;
start = condition $ ;
但是,它不适用于下面给出的规则:
a AND b AND c
我收到这个错误:
grako.exceptions.FailedParse: srecur(1:3) Expecting end of text. :
a AND b AND c
^
start
此时我的理解是规则的第一个字符匹配 symbol
而不是 condition "AND" symbol
,所以 grako 想使用它。但是我的开始规则强制所有角色都被消耗了。
我已经尝试过许多变通方法,但一直找不到合适的方法。