4

問題は、タスクに役立つ文法を作成したことですが、タスクが変更され、新しいルールを定義する必要があります。

しかし、既存の文法を変更するのではなく、既存の文法を使用してコードを複製せずに新しい文法を作成したいので、必要な新しいルールを定義するだけで済みます。私はこのようなことを試しましたが、うまくいきません:

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_

4

1 に答える 1