在Boost.Spirit编译器示例之后,我将基于Flex / Bison的类似计算器的语法迁移到基于Spirit的语法。我想添加一个功能#include<another_input.inp>
。我已经成功定义了include_statement语法。我应该按照错误处理方式执行:on_success(include_statement, annotation_function(...))
,即对于include_statement的每次成功匹配,获取新的输入文件名并再次调用phrase_parse()
?或者像Flex / Bison一样推/输入输入堆栈?
感谢。
答案 0 :(得分:1)
从这里的小信息中猜测,您是想要问是否可以重用相同的grammar
实例,或者应该更好地实例化一个新实例来解析包含,它取决于。< / p>
你可以做到这两点。
当语法无状态时(提示:通常是否可以使用它const
),没有区别。否则,更喜欢实例化一个单独的实例。
然而,
grammar
对象是const
,您也可能修改外部状态(例如,使用语义操作中的phx::ref
),因此,无论您是否使用单独的语法实例,这都是一个问题