Повысьте :: Дух :: Lex; Как указать токен & quot; || & quot ;?

Так что мой вопрос довольно прост, в моем классе лексера (расширение lex::lexer<T>), У меня есть следующее;

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

Внутри моего конструктора, который прекрасно компилируется, но запускает SegFault во время выполнения. Вопрос вполне очевиден | оператор ‘или’ в системе регулярных выражений, как мне обойти эту проблему?

1

Решение

От 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, тогда интерпретация ANSI-C для \ x. В противном случае литерал X (используется для экранирования операторов, таких как *)

Так что вы бы использовать

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

Первая обратная косая черта в каждой паре обрабатывается синтаксическим анализатором строк C ++ как escape-символ, в результате чего вторая строка помещается в содержимое строки. Эта обратная косая черта в строковом содержимом затем просматривается Spirit :: Lex и действует для экранирования оператора регулярных выражений.

4

Другие решения

Других решений пока нет …