問題は、タスクに役立つ文法を作成したことですが、タスクが変更され、新しいルールを定義する必要があります。
しかし、既存の文法を変更するのではなく、既存の文法を使用してコードを複製せずに新しい文法を作成したいので、必要な新しいルールを定義するだけで済みます。私はこのようなことを試しましたが、うまくいきません:
struct New_grammar : Old_grammar<Iterator, Skipper>
{
New_grammar() : New_grammar::base_type(Command_list)
{
Command_list %= qi::eps >> + Commands;
Comandos %= oneoldCommand | NewCommand;
NewCommand = ("NewCommand" >> stmt)[qi::_val = phoenix::new_<NewCom>(qi::_1)];
}
// this is a new rule I need:
qi::rule<Iterator, Commands*(), qi::locals<std::string>, Skipper> NewCommand;
};
. Old_grammar
_ New_grammar
_ Old_gramar
_