PetitParser で実装しようとしている (簡略化された) EBNF セクションは次のとおりです。
variable :: component / identifier
component :: indexed / field
indexed :: variable , $[ , blah , $]
field :: variable , $. , identifier
私がしたことは、これらすべてのプロダクション ( を除くidentifier
) をサブクラスの ivar として追加PPCompositeParser
し、対応するメソッドを次のように定義することでした。
variable
^component / self identifier
component
^indexed / field
identifier
^(#letter asParser, (#word asParser) star) flatten
indexed
^variable , $[ asParser, #digit asParser, $] asParser
field
^variable , $. asParser, self identifier
start
^variable
最後に、パーサーの新しいインスタンスを作成し、メッセージを送信しましたparse: 'a.b[0]'
。
問題:スタック オーバーフローが発生します。