我正在尝试为教育目的实现解析器组合器。解析器简单地定义为std::function<T(input&)>
。我已经说到我能够使用类似代码的东西定义一个简单的表达式语法:
auto expression; // the type does not matter for the context
auto factor = number
| (token('(') >= expression >= token(')'))
;
auto term = factor >= *( (token('*') | token('/')) >= factor );
expression = term >= *( (token('+') | token('-')) >= term );
可以看出,问题在于循环依赖性。我无法找到解决分组因子导致的循环依赖的方法。构造因子解析器的运算符需要表达式解析器,但这只是在最后构造。我怎么能解决这个问题?