C++ 解析时动态切换解析器

C++ 解析时动态切换解析器,c++,boost,boost-spirit,C++,Boost,Boost Spirit,我正在解析,我已经有了一个解析器。因为我实际上使用了spectre(cadence,integrated electronics),所以我想支持两种模拟器语言(不幸的是,它们不同)。我可以使用开关(例如命令行)并从一开始就使用正确的解析器。然而,spectre允许simulator lang=spectre语句,我也希望支持这些语句(当然,反之亦然)。如何使用boost::spirit实现这一点 我的语法大致如下: line = component_parser |

我正在解析,我已经有了一个解析器。因为我实际上使用了spectre(cadence,integrated electronics),所以我想支持两种模拟器语言(不幸的是,它们不同)。我可以使用开关(例如命令行)并从一开始就使用正确的解析器。然而,spectre允许
simulator lang=spectre
语句,我也希望支持这些语句(当然,反之亦然)。如何使用boost::spirit实现这一点

我的语法大致如下:

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

main = -line % qi::eol >> qi::eoi;
这种顶级结构对两种语言都适用,因此我需要更改子Parser。我的第一个想法是让顶级解析器将实例(或对象)保存到相应的解析器,并打开查找
simulator lang
语句(使用语义操作)。这是一个好方法吗?如果没有,其他人怎么做呢?

您可以使用()

有一种与此相关的惯用模式,称为

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

您可以使用()

有一种与此相关的惯用模式,称为

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


您是否尝试过重新分配到
(或
或其他合适的规则)?到目前为止,我还没有尝试过任何方法,但这与我对各个解析器的不同实例的想法类似。然而,使用boost spirit并不容易,所以我不确定在实际使用解析器使用输入时切换解析器是否合适。另外,也许有一种很好的、很有精神的方式来做这样的事情。您是否尝试过重新分配到
(或
main
或其他合适的规则)?到目前为止,我还没有尝试过任何东西,但这与我对各个解析器的不同实例的想法类似。然而,使用boost spirit并不容易,所以我不确定在实际使用解析器使用输入时切换解析器是否合适。而且,也许有一种很好的,充满灵性的方式来做这样的事情。所以很简单。谢谢,我现在正在做,看起来不错。不知何故,我认为我不能应用这个策略。所以这很容易。谢谢,我现在正在做,看起来不错。不知何故,我认为我不能应用这个策略。