boost-sprit-lex объединяет несколько токенов в один токен в lex, дифференцированный по id
редактировать Я вырвал лексер, так как он не интегрируется с ци и просто запутывает грамматику (см. Ответ ниже).
Мой лексер выглядит следующим образом:
template
struct tokens : lex::lexer
{
tokens()
: left_curly("\"{\""),
right_curly("\"}\""),
left_paren("\"(\""),
right_paren("\")\""),
colon(":"),
scolon(";"),
namespace_("(?i:namespace)"),
event("(?i:event)"),
optional("(?i:optional)"),
required("(?i:required)"),
repeated("(?i:repeated)"),
t_int_4("(?i:int4)"),
t_int_8("(?i:int8)"),
t_string("(?i:string)"),
ordinal("\\d+"),
identifier("\\w+")
{
using boost::spirit::lex::_val;
this->self
=
left_curly
| right_curly
| left_paren
| right_paren
| colon
| scolon
| namespace_
| event
| optional
| required
| repeated
| t_int_4
| t_int_8
| t_string
| ordinal
| identifier
| lex::token_def("[ \\t\\n]+") [lex::_pass = lex::pass_flags::pass_ignore];
}
lex::token_def left_curly, right_curly, colon, scolon,repeated, left_paren, right_paren;
lex::token_def namespace_, event, optional, required,t_int_4, t_int_8, t_string;
lex::token_def ordinal;
lex::token_def identifier;
};
Мне нужно ,t_int_4
t_int_8
, а такжеt_string
к представленному одному типу токена, приписанному целочисленному типу. На данный момент моя грамматика QI должна сделать это, а затем установить токен в семантическом действии qi :: rule:
atomic_type = tok.t_int_4 [ _val = RBL_INT4]
| tok.t_int_8 [ _val = RBL_INT8]
| tok.t_string [ _val = RBL_STRING];