summaryrefslogtreecommitdiffstats
path: root/src/parse.y
diff options
context:
space:
mode:
Diffstat (limited to 'src/parse.y')
-rw-r--r--src/parse.y13
1 files changed, 7 insertions, 6 deletions
diff --git a/src/parse.y b/src/parse.y
index 28f13ad..52f53a6 100644
--- a/src/parse.y
+++ b/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;