这是我试图在PetitParser中实现的(简化的)EBNF部分:
variable :: component / identifier
component :: indexed / field
indexed :: variable , $[ , blah , $]
field :: variable , $. , identifier
Run Code Online (Sandbox Code Playgroud)
我所做的是将所有这些产品(除外identifier)添加为我的子类的ivars,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
Run Code Online (Sandbox Code Playgroud)
最后,我创建了一个新的解析器实例并向其发送了消息parse: 'a.b[0]'.
问题:我得到了堆栈溢出.