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

Так что мой вопрос довольно прост, в моем классе лексера (расширение 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 и действует для экранирования оператора регулярных выражений.

Другие вопросы по тегам