Так что мой вопрос довольно прост, в моем классе лексера (расширение 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
Если X является a, b, e, n, r, f, t, v, тогда интерпретация ANSI-C для \ x. В противном случае литерал X (используется для экранирования операторов, таких как *)
Так что вы бы использовать
("\\|\\|", OR_OR)
Первая обратная косая черта в каждой паре обрабатывается синтаксическим анализатором строк C ++ как escape-символ, в результате чего вторая строка помещается в содержимое строки. Эта обратная косая черта в строковом содержимом затем просматривается Spirit :: Lex и действует для экранирования оператора регулярных выражений.
Других решений пока нет …