Boost.Spirit将#include特性添加到计算器示例中

时间:2014-08-02 16:49:43

标签: c++ boost boost-spirit-qi

在Boost.Spirit编译器示例之后,我将基于Flex / Bison的类似计算器的语法迁移到基于Spirit的语法。我想添加一个功能#include<another_input.inp>。我已经成功定义了include_statement语法。我应该按照错误处理方式执行:on_success(include_statement, annotation_function(...)),即对于include_statement的每次成功匹配,获​​取新的输入文件名并再次调用phrase_parse()?或者像Flex / Bison一样推/输入输入堆栈?

感谢。

1 个答案:

答案 0 :(得分:1)

从这里的小信息中猜测,您是想要问是否可以重用相同的grammar实例,或者应该更好地实例化一个新实例来解析包含,它取决于。< / p>

你可以做到这两点。

当语法无状态时(提示:通常是否可以使用它const),没有区别。否则,更喜欢实例化一个单独的实例。

然而,

  • 这一点有点没有实际意义,因为看起来您已经决定在解析主文档后解析包含(如果我的评论正确的话)
  • 总是存在全球状态的危险;即使grammar对象是const,您也可能修改外部状态(例如,使用语义操作中的phx::ref),因此,无论您是否使用单独的语法实例,这都是一个问题