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("\\[|\\]|\\(|\\)|\\.|&>|\\*\\*|\\*|\\+|-|~|!|/|%|<<|>>|<|>|<=|>=|==|!=")

"\\"是一个包含一个反斜杠的字符串文字,然后词法分析器构造函数对其进行解析。

于 2012-11-14T14:07:14.660 回答