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