Parsing 语法无限递归

Parsing 语法无限递归,parsing,pyparsing,Parsing,Pyparsing,在试图定义oz语言的官方语法时,我遇到了一个无限递归。我(我认为)把范围缩小到以下规则: <declarationPart> ::= <variable> | <pattern> '=' <expression> | <statement> <pattern> ::= ['!'] <variable> ::=|'=| ::= ['!'] 在pyparser中: pattern =

在试图定义oz语言的官方语法时,我遇到了一个无限递归。我(我认为)把范围缩小到以下规则:

<declarationPart> ::= <variable> | <pattern> '=' <expression> | <statement>

<pattern> ::= ['!'] <variable>
::=|'=|
::= ['!'] 
在pyparser中:

pattern             = Forward()
pattern     << (Optional(exclam_tkn) + variable)

declarationPart = ( variable \
            | (pattern + equal + expression) \
            | statement)
pattern=Forward()

模式我对
pyparsing
不太熟悉,但出于一般解析目的,我可能会将这两个规则合并为一个,如下所示

<declarationPart> ::= ['!'] <variable> [ '=' <expression> ] | <statement>
::=['!']['=']|

然后在语义分析阶段标记该语法意外接受的最终非法构造。

谢谢您的回复!问题是这两条规则是分开需要的。它们是一个完整的语言定义的一部分,大约有50条规则长,它们已经被拆分以改进结构。