这是我试图在 PetitParser 中实现的(简化的)EBNF 部分:
variable :: component / identifier
component :: indexed / field
indexed :: variable , $[ , blah , $]
field :: variable , $. , identifier
我所做的是将所有这些产品(除了identifier
)添加为我的子类的 ivarsPPCompositeParser
并定义相应的方法如下:
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
最后,我创建了解析器的一个新实例并将 message 发送给它parse: 'a.b[0]'
。
问题:我得到一个堆栈溢出。