グラコを使用して単純な左再帰文法を記述しようとしていますが、うまくいきません。
右再帰は問題なく動作します:
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
するため、グラコはそれを使用したいと考えているということです。しかし、私の開始ルールは、すべてのキャラクターが消費されたことを強制します。
私はまだ多くの回避策を使用しようとしましたが、適切なものを見つけることができませんでした.