所以我的问题很简单,在我的词法分析器类(扩展 lex::lexer<T>
)中,我有以下内容;
this->self.add
...
("&&", AND_AND)
("||", OR_OR)
...
在我的构造函数中,它编译得很好,但在运行时触发了 SegFault。问题很明显|
是正则表达式系统中的“或”运算符,我该如何解决这个问题?
最佳答案
来自 http://www.boost.org/doc/libs/1_54_0/libs/spirit/doc/html/spirit/lex/quick_reference/lexer.html
\X
If X is a, b, e, n, r, f, t, v then the ANSI-C interpretation of \x. Otherwise a literal X (used to escape operators such as *)
所以你会用
("\\|\\|", OR_OR)
每对中的第一个反斜杠被 C++ 字符串解析器视为转义字符,导致将第二个反斜杠放入字符串内容中。字符串内容中的反斜杠随后会被 Spirit::Lex 看到,并用来逃避正则表达式运算符。
关于c++ - 升压::精神::莱克斯;如何指定 token "||"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18346489/