parse: make grammar for toplevel directives more readable
This commit is contained in:
parent
48b791d443
commit
650fff74de
2 changed files with 817 additions and 779 deletions
1581
src/parse.cpp
1581
src/parse.cpp
File diff suppressed because it is too large
Load diff
13
src/parse.y
13
src/parse.y
|
@ -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;
|
||||||
|
|
Reference in a new issue