1

したがって、私の質問は非常に単純です。私のレクサークラス(extending lex::lexer<T>)には、次のものがあります。

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

私のコンストラクター内では、コンパイルは問題なく実行されますが、実行時に SegFault がトリガーされます。問題は、正規表現システムの「or」演算子であることは明らか|ですが、どうすればこの問題を回避できますか?

4

1 に答える 1

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++ 文字列パーサーによってエスケープ文字として扱われ、2 番目の円記号が文字列コンテンツに配置されます。文字列コンテンツのバックスラッシュは、Spirit::Lex によって認識され、正規表現演算子をエスケープするように機能します。

于 2013-08-20T23:28:17.997 に答える