2

「[」、「]」、「&>」などの文字シーケンスを含む lex::token_def<> を作成したい

必要な文字をエスケープしようとしました:

namespace lex = boost::spirit::lex;

enum LexerIDs { ID_IDENTIFIER, ID_WHITESPACE, ID_INTEGER, ID_FLOAT, ID_PUNCTUATOR };

template <typename Lexer>
struct my_lexer : lex::lexer<Lexer>
{
    my_lexer() : punctuator("\[|\]|\(|\)|\.|&>|\*\*|\*|\+|-|~|!|/|%|<<|>>|<|>|<=|>=|==|!=")
    {
        this->self.add(punctuator, ID_PUNCTUATOR);
    }
    lex::token_def<> punctuator;
};

しかし、これにより、認識されないエスケープ文字と文字列の字句解析が失敗するという警告が表示されます。どうすればこれを正しく行うことができますか?

4

1 に答える 1

2

追加のエスケープ レベルが必要です。

my_lexer() : punctuator("\\[|\\]|\\(|\\)|\\.|&>|\\*\\*|\\*|\\+|-|~|!|/|%|<<|>>|<|>|<=|>=|==|!=")

"\\"1 つのバックスラッシュを含む文字列リテラルであり、レクサー コンストラクターが解析します。

于 2012-11-14T14:07:14.660 に答える