parse: make grammar for toplevel directives more readable

This commit is contained in:
Matthias Schiffer 2015-04-10 17:46:34 +02:00
parent 48b791d443
commit 650fff74de
2 changed files with 817 additions and 779 deletions

File diff suppressed because it is too large Load diff

View file

@ -21,8 +21,9 @@
grammar |=; grammar |=;
grammar |= grammar directive;
grammar |= grammar rule(rule) { directive |= rule(rule) {
if (grammar->rules.empty()) { if (grammar->rules.empty()) {
solar::item_t init(""); solar::item_t init("");
init.get_rhs().push_back(solar::symbol_t::make_nonterm(rule->item.get_lhs().c_str())); init.get_rhs().push_back(solar::symbol_t::make_nonterm(rule->item.get_lhs().c_str()));
@ -33,14 +34,14 @@ grammar |= grammar rule(rule) {
delete rule; delete rule;
} }
grammar |= grammar TYPE SYMBOL_LC(nonterm) BLOCK(type) { directive |= TYPE SYMBOL_LC(nonterm) BLOCK(type) {
grammar->nonterm_types.insert(std::make_pair(*nonterm, *type)); grammar->nonterm_types.insert(std::make_pair(*nonterm, *type));
delete nonterm; delete nonterm;
delete type; delete type;
} }
grammar |= grammar TYPE term(term) BLOCK(type) varname(name) { directive |= TYPE term(term) BLOCK(type) varname(name) {
grammar->term_types.insert(std::make_pair(*term, std::make_pair(*type, *name))); grammar->term_types.insert(std::make_pair(*term, std::make_pair(*type, *name)));
delete term; delete term;
@ -48,17 +49,17 @@ grammar |= grammar TYPE term(term) BLOCK(type) varname(name) {
delete name; delete name;
} }
grammar |= grammar SOURCE BLOCK(block) { directive |= SOURCE BLOCK(block) {
grammar->source_block = *block; grammar->source_block = *block;
delete block; delete block;
} }
grammar |= grammar HEADER BLOCK(block) { directive |= HEADER BLOCK(block) {
grammar->header_block = *block; grammar->header_block = *block;
delete block; delete block;
} }
grammar |= grammar EXTRA_ARG BLOCK(type) varname(name) { directive |= EXTRA_ARG BLOCK(type) varname(name) {
grammar->extra_args.push_back(std::make_pair(*type, *name)); grammar->extra_args.push_back(std::make_pair(*type, *name));
delete type; delete type;