解析时动态切换解析器

时间:2018-11-28 16:37:08

标签: c++ boost boost-spirit

我正在解析spice netlists,对此我已经有一个解析器。由于我实际上使用了幽灵(节奏,集成电子),因此我想支持两种模拟器语言(不幸的是,它们是不同的)。我可以使用一个开关(例如命令行),并从一开始就使用正确的解析器。但是,幽灵允许simulator lang=spectre语句,我也想支持该语句(当然,反之亦然)。怎么用boost :: spirit完成?

我的语法大致如下:

line = component_parser             | 
       command_parser               |  
       comment_parser               | 
       subcircuit_parser            | 
       subcircuit_instance_parser;

main = -line % qi::eol >> qi::eoi;

此顶级结构对两种语言均适用,因此我需要更改子解析器。对我而言,第一个想法是让顶级解析器将实例(或对象)保存到各自的解析器中,并继续查找simulator lang语句(使用语义动作)。这是一个好方法吗?如果没有,那怎么办呢?

1 个答案:

答案 0 :(得分:2)

您可以使用qi::lazyhttps://www.boost.org/doc/libs/1_68_0/libs/spirit/doc/html/spirit/qi/reference/auxiliary/lazy.html)。

有一个与此相关的惯用模式,称为The Nabialek Trick

我在此站点上有几个答案,展示了这些不同的技术。