提升::精神::莱克斯;如何指定令牌"||"?

Boost::Spirit::Lex; How do I specify the token "||"?

本文关键字:何指定 令牌 精神 提升      更新时间:2023-10-16

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

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

在我的构造函数内部,它编译得很好,但在运行时会触发SegFault。问题很明显,|是正则表达式系统中的"or"运算符,我如何克服这个问题?

来源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会看到字符串内容中的反斜杠,并执行转义regex运算符的操作。