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_4t_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];

Ответы на вопрос(1)

Ваш ответ на вопрос