升压::精神::莱克斯;如何指定令牌“||”?

时间:2013-08-20 23:21:53

标签: c++ regex boost-spirit boost-spirit-lex

所以我的问题很简单,在我的lexer类(扩展lex::lexer<T>)中,我有以下内容;

this->self.add
    ...
    ("&&", AND_AND)
    ("||", OR_OR)
    ...

在我的构造函数中,它编译得很好,但在运行时触发了SegFault。问题很明显|是正则表达式系统中的'或'运算符,我该如何解决这个问题?

1 个答案:

答案 0 :(得分:4)

来自http://www.boost.org/doc/libs/1_54_0/libs/spirit/doc/html/spirit/lex/quick_reference/lexer.html

\X
     

如果X是a,b,e,n,r,f,t,v那么\ x的ANSI-C解释。否则为文字X(用于转义运算符,如*)

所以你会用

 ("\\|\\|", OR_OR)

C ++字符串解析器将每对中的第一个反斜杠视为转义字符,从而将第二个反斜杠放入字符串内容中。然后,字符串内容中的反斜杠被Spirit :: Lex看到并且用于逃避正则表达式运算符。