所以我的问题很简单,在我的lexer类(扩展lex::lexer<T>
)中,我有以下内容;
this->self.add
...
("&&", AND_AND)
("||", OR_OR)
...
在我的构造函数中,它编译得很好,但在运行时触发了SegFault。问题很明显|
是正则表达式系统中的'或'运算符,我该如何解决这个问题?
答案 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看到并且用于逃避正则表达式运算符。