2012-11-14 27 views
2

我想创建一个法:: 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; 
}; 

,但是这给了我关于无法识别的转义字符&词法与失败的字符串一定的警示作用。我怎样才能正确地做到这一点?

回答

2

你需要一个额外的转义级别:

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

"\\"是包含一个反斜杠,作为词法分析器构造然后解析字符串文字。

+0

谢谢 - 就是这样。唯一不幸的是正则表达式得到了一个额外的'混淆'层 –

+2

@TobiasLangner如果你可以使用C++ 11,[原始字符串](http://www.stroustrup.com/C++11FAQ。 html#raw-strings)可以提供很多帮助。 – 2012-11-14 15:21:15

+0

尚未,但感谢您的意见。我不知道。 –