2012-11-14 55 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

尚未,但感謝您的意見。我不知道。 –