递归下降解析器的缺点/实现挑战之一是处理左递归,例如
<expr> := <expr> '+' <num>
| <num>
解析器需要先解析一个 expr,然后才能解析一个 expr...
现在,Boost::Spirit::X3 生成递归下降解析器。这是否意味着它不支持左递归,或者它是否有解决方法?
注意:左递归可以(经常?总是?(事先从语法中删除(就像在这个问题的解决方案中一样(,但这不是我要问的。
Spirit 根本不会重写你的语法,它会完全按照你写的内容运行。