token IDENT (`Some(Token::Ident(_))`);
token CODE (`Some(Token::Code(_))`);
token 'token' (`Some(Token::Keyword(Keyword::Token))`);
token 'epsilon' (`Some(Token::Keyword(Keyword::Epsilon))`);
token 'end' (`Some(Token::Keyword(Keyword::End))`);
token '(' (`Some(Token::LParen)`);
token ')' (`Some(Token::RParen)`);
token '{' (`Some(Token::LBrace)`);
token '}' (`Some(Token::RBrace)`);
token '.' (`Some(Token::Period)`);
token ':' (`Some(Token::Colon)`);
token ',' (`Some(Token::Comma)`);
token ';' (`Some(Token::Semicolon)`);
token '|' (`Some(Token::Pipe)`);
token '?' (`Some(Token::Question)`);
token '*' (`Some(Token::Star)`);
token '+' (`Some(Token::Plus)`);
token end (`None`);
desc (`ast::Desc`) {
desc item (`reduce_desc_a`);
item (`reduce_desc_b`);
desc ';' (`reduce_desc_c`);
';' (`reduce_desc_d`);
}
item (`ast::Item`) {
token_decl (`reduce_item_a`);
rule_decl (`reduce_item_b`);
}
token_decl (`ast::TokenDecl`) {
'token' token_name '(' CODE ')' ';' (`reduce_token_decl_a`);
'token' token_name ';' (`reduce_token_decl_b`);
}
token_name (`ast::TokenName`) {
IDENT (`reduce_token_name_a`);
'end' (`reduce_token_name_b`);
}
rule_decl (`ast::RuleDecl`) {
IDENT '(' CODE ')' '{' rule_list '}' (`reduce_rule_decl_a`);
IDENT '{' rule_list '}' (`reduce_rule_decl_b`);
}
rule_list (`Vec<ast::Variant>`) {
rule_list variant (`reduce_rule_list_a`);
variant (`reduce_rule_list_b`);
}
variant (`ast::Variant`) {
sequence_or_epsilon ':' CODE ')' ';' (`reduce_variant_a`);
sequence_or_epsilon ';' (`reduce_variant_b`);
}
sequence_or_epsilon (`Vec<String>`) {
sequence (`reduce_sequence_or_epsilon_a`);
'epsilon' (`reduce_sequence_or_epsilon_b`);
}
sequence (`Vec<String>`) {
sequence symbol (`reduce_sequence_a`);
symbol (`reduce_sequence_b`);
}
symbol (`()`) {
primary_symbol (`reduce_symbol_a`);
primary_symbol '?' (`reduce_symbol_b`);
repetition_sequence '*' (`reduce_symbol_c`);
repetition_sequence '+' (`reduce_symbol_d`);
}
repetition_sequence (`()`) {
primary_symbol (`recuce_repetition_sequence_a`);
'(' sequence ';' sequence ')' (`recuce_repetition_sequence_b`);
}
primary_symbol (`()`) {
IDENT (`reduce_primary_symbol_a`);
'(' sequence ')' (`reduce_primary_symbol_b`);
}