Различные типы семантических действий в Boost Spirit Lex

Может ли Boost’s Spirit Lex иметь несколько семантических действий для определения токена?

Рассмотрим эту конструкцию Lexer:

namespace bp = boost::phoenix;
this->self = lex::token_def<>("[ \v\f\t\r]+")
| lex::token_def<>("\n")[++bp::ref(line_no)]
| lex::token_def<>("\\/\\/")[set_lexer_state("single_line_comment")]
| lex::token_def<>(".")
;

this->self("single_line_comment")
= lex::token_def<>("\n")
[++bp::ref(line_no), set_lexer_state("INITIAL")]
| lex::token_def<>(".")
;

Однако проходит только переключатель состояния, но конец строки в состоянии single_line_comment не учитывается.

Если я поменяю порядок, например:

[set_lexer_state("INITIAL"), ++bp::ref(line_no)]

Конец строки засчитывается, а переключатель состояния не проходит. Можно ли иметь несколько семантических действий, разделенных запятыми, или мне нужно написать один функтор для переключения состояний и любых других действий, которые я хочу?

1

Решение

Задача ещё не решена.

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

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector