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 directive;
grammar |= grammar rule(rule) {
directive |= rule(rule) {
if (grammar->rules.empty()) {
solar::item_t init("");
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;
}
grammar |= grammar TYPE SYMBOL_LC(nonterm) BLOCK(type) {
directive |= TYPE SYMBOL_LC(nonterm) BLOCK(type) {
grammar->nonterm_types.insert(std::make_pair(*nonterm, *type));
delete nonterm;
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)));
delete term;
@ -48,17 +49,17 @@ grammar |= grammar TYPE term(term) BLOCK(type) varname(name) {
delete name;
}
grammar |= grammar SOURCE BLOCK(block) {
directive |= SOURCE BLOCK(block) {
grammar->source_block = *block;
delete block;
}
grammar |= grammar HEADER BLOCK(block) {
directive |= HEADER BLOCK(block) {
grammar->header_block = *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));
delete type;