提振.Spirit在计算器示例中添加了#include功能

Boost.Spirit adding #include feature into calculator example

本文关键字:添加 #include 功能 Spirit 计算器 提振      更新时间:2023-10-16

我正在将我基于Flex/Bison的类似计算器的语法迁移到基于Spirit的。我想添加一个特性#include<another_input.inp>。我已经成功地定义了include_statement语法。我是否应该遵循错误处理的方式:on_success(include_statement, annotation_function(...)),即每次成功匹配include_statement,获得新的输入文件名并再次调用phrase_parse() ?或者像Flex/Bison推送/弹出输入堆栈?

谢谢。

根据这里的少量信息猜测,您想问是否可以重用相同的grammar实例,或者应该更好地实例化一个新实例来解析包含,这取决于。

你可以两者都做。

当语法是无状态时(提示:如果您可以使用它,则通常const),没有区别。否则,最好实例化一个单独的实例。 然而,

  • 这一点有点没有意义,因为似乎你已经决定在解析主文档后解析包含(如果我得到你的评论正确)
  • 总是有全球状态的危险;即使grammar对象是const,你也可以潜在地修改外部状态(例如使用phx::ref从语义动作),所以,这将是一个问题,无论你是否使用单独的语法实例。