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 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;
|
||||
|
|
Reference in a new issue