Я анализирую списки специй , для которых у меня уже есть парсер.Поскольку я на самом деле использую 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;
Эта структура верхнего уровня подходит для обоих языков, поэтому мне нужно изменить подпапки.Первой идеей для меня было бы, чтобы парсер верхнего уровня содержал экземпляры (или объекты) в соответствующем парсере и включал нахождение оператора simulator lang
(с семантическим действием).Это хороший подход?Если нет, то как еще можно это сделать?