2
在尝试定义oz语言的官方语法时,我遇到了无限递归。我把范围缩小(我认为)这些规则:语法 - 无限递归
<declarationPart> ::= <variable> | <pattern> '=' <expression> | <statement>
<pattern> ::= ['!'] <variable>
在pyparser:
pattern = Forward()
pattern << (Optional(exclam_tkn) + variable)
declarationPart = (variable \
| (pattern + equal + expression) \
| statement)
所以,在declarationPart,变量可以出现在变量和模式。按照上面的顺序,我没有递归问题,但'平等'没有被检测到,只有变量被解析。当我把'变量'作为第二项时,我确实有无限递归。
模式规则被简化 - 我确实需要分开。
我能理解失效机理,但我不知道这是一个语言的定义问题,或者如果我忽略了语法的东西...
如何使这项工作?或者一个建议来调试解析过程?
感谢您的回复!问题是这两个规则都是单独需要的。它们是完整语言定义的一部分,可能约有50条规则,并且它们已被分离以改进结构。 – jcoppens