X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/82b6cb3fb20b5036b201a07c4ea1b2a59b904d01..b87f8b2159820e022e3b726b8369f74d64712f8f:/src/reader.c diff --git a/src/reader.c b/src/reader.c index 0e1fc2bd..75957010 100644 --- a/src/reader.c +++ b/src/reader.c @@ -45,9 +45,6 @@ typedef struct symbol_list const char *action; int action_line; - /* The guard is attached to the LHS of a rule. */ - const char *guard; - int guard_line; symbol_t *ruleprec; } symbol_list; @@ -80,8 +77,6 @@ symbol_list_new (symbol_t *sym) res->line = lineno; res->action = NULL; res->action_line = 0; - res->guard = NULL; - res->guard_line = 0; res->ruleprec = NULL; return res; } @@ -131,7 +126,7 @@ symbol_make_alias (symbol_t *symbol, char *typename) symval->class = token_sym; symval->type_name = typename; symval->user_token_number = symbol->user_token_number; - symbol->user_token_number = SALIAS; + symbol->user_token_number = USER_NUMBER_ALIAS; symval->alias = symbol; symbol->alias = symval; /* symbol and symval combined are only one symbol */ @@ -154,7 +149,7 @@ static bool symbol_check_alias_consistence (symbol_t *this) { /* Check only those who _are_ the aliases. */ - if (this->alias && this->user_token_number == SALIAS) + if (this->alias && this->user_token_number == USER_NUMBER_ALIAS) { if (this->prec != this->alias->prec) { @@ -209,8 +204,8 @@ symbol_pack (symbol_t *this) this->number = this->alias->number; } } - /* Do not do processing below for SALIASs. */ - if (this->user_token_number == SALIAS) + /* Do not do processing below for USER_NUMBER_ALIASs. */ + if (this->user_token_number == USER_NUMBER_ALIAS) return TRUE; } else /* this->class == token_sym */ @@ -234,7 +229,7 @@ symbol_translation (symbol_t *this) { /* Non-terminal? */ if (this->class == token_sym - && this->user_token_number != SALIAS) + && this->user_token_number != USER_NUMBER_ALIAS) { /* A token which translation has already been set? */ if (token_translations[this->user_token_number] != undeftoken->number) @@ -1003,10 +998,10 @@ parse_expect_decl (void) | | | Two symbols are entered in the table, one for the token symbol and | | one for the literal. Both are given the , if any, from the | -| declaration. The ->user_token_number of the first is SALIAS and | -| the ->user_token_number of the second is set to the number, if | -| any, from the declaration. The two symbols are linked via | -| pointers in their ->alias fields. | +| declaration. The ->user_token_number of the first is | +| USER_NUMBER_ALIAS and the ->user_token_number of the second is set | +| to the number, if any, from the declaration. The two symbols are | +| linked via pointers in their ->alias fields. | | | | During OUTPUT_DEFINES_TABLE, the symbol is reported thereafter, | | only the literal string is retained it is the literal string that | @@ -1019,7 +1014,7 @@ parse_thong_decl (void) token_t token; symbol_t *symbol; char *typename = 0; - int usrtoknum = SUNDEF; + int usrtoknum = USER_NUMBER_UNDEFINED; token = lex (); /* fetch typename or first token */ if (token == tok_typename) @@ -1040,7 +1035,7 @@ parse_thong_decl (void) } symval->class = token_sym; symval->type_name = typename; - symval->user_token_number = SALIAS; + symval->user_token_number = USER_NUMBER_ALIAS; symbol = symval; token = lex (); /* get number or literal string */ @@ -1269,24 +1264,24 @@ read_declarations (void) /*------------------------------------------------------------------. | Assuming that a `{' has just been seen, copy everything up to the | -| matching `}' into the actions file. RULE_LENGTH is the number of | -| values in the current rule so far, which says where to find `$0' | -| with respect to the top of the stack. | +| matching `}' into ACTION_OBSTACK. | | | -| This routine is used both for actions and guards. Only | -| ACTION_OBSTACK is used, but this is fine, since we use only | -| pointers to relevant portions inside this obstack. | +| RULE_LENGTH is the number of values in the current rule so far, | +| which says where to find `$0' with respect to the top of the | +| stack. It is not the same as the rule->length in the case of mid | +| rule actions. | +| | +| This routine is used for actions. | `------------------------------------------------------------------*/ static void -parse_braces (symbol_list *rule, int rule_length) +parse_action (symbol_list *rule, int rule_length) { - int c; - int count; - - count = 1; + int count = 1; + rule->action_line = lineno; while (count > 0) { + int c; while ((c = getc (finput)) != '}') switch (c) { @@ -1330,29 +1325,9 @@ parse_braces (symbol_list *rule, int rule_length) } obstack_1grow (&action_obstack, '\0'); -} - - -static void -parse_action (symbol_list *rule, int rule_length) -{ - rule->action_line = lineno; - parse_braces (rule, rule_length); rule->action = obstack_finish (&action_obstack); } - -static void -parse_guard (symbol_list *rule, int rule_length) -{ - token_t t = lex (); - if (t != tok_left_curly) - complain (_("invalid %s declaration"), "%guard"); - rule->guard_line = lineno; - parse_braces (rule, rule_length); - rule->guard = obstack_finish (&action_obstack); -} - /*-------------------------------------------------------------------. @@ -1384,8 +1359,8 @@ gensym (void) | null pointer instead of a symbol to terminate the rule. The next | | symbol is the lhs of the following rule. | | | -| All guards and actions are copied out to the appropriate files, | -| labelled by the rule number they apply to. | +| All actions are copied out, labelled by the rule number they apply | +| to. | | | | Bison used to allow some %directives in the rules sections, but | | this is no longer consider appropriate: (i) the documented grammar | @@ -1582,15 +1557,6 @@ readgram (void) t = lex (); } - if (t == tok_guard) - { - if (!semantic_parser) - complain (_("%%guard present but %%semantic_parser not specified")); - - parse_guard (crule, rulelength); - t = lex (); - } - if (t == tok_left_curly) { /* This case never occurs -wjh */ @@ -1700,7 +1666,7 @@ token_translations_init (void) for (i = 0; i < ntokens; ++i) { symbol_t *this = symbols[i]; - if (this->user_token_number != SUNDEF) + if (this->user_token_number != USER_NUMBER_UNDEFINED) { if (this->user_token_number > max_user_token_number) max_user_token_number = this->user_token_number; @@ -1710,7 +1676,8 @@ token_translations_init (void) } /* If 256 is not used, assign it to error, to follow POSIX. */ - if (num_256_available_p && errtoken->user_token_number == SUNDEF) + if (num_256_available_p + && errtoken->user_token_number == USER_NUMBER_UNDEFINED) errtoken->user_token_number = 256; /* Set the missing user numbers. */ @@ -1720,7 +1687,7 @@ token_translations_init (void) for (i = 0; i < ntokens; ++i) { symbol_t *this = symbols[i]; - if (this->user_token_number == SUNDEF) + if (this->user_token_number == USER_NUMBER_UNDEFINED) this->user_token_number = ++max_user_token_number; if (this->user_token_number > max_user_token_number) max_user_token_number = this->user_token_number; @@ -1791,8 +1758,6 @@ packgram (void) rules[ruleno].useful = TRUE; rules[ruleno].action = p->action; rules[ruleno].action_line = p->action_line; - rules[ruleno].guard = p->guard; - rules[ruleno].guard_line = p->guard_line; p = p->next; while (p && p->sym) @@ -1829,13 +1794,12 @@ packgram (void) ritem_print (stderr); } -/*-------------------------------------------------------------------. -| Read in the grammar specification and record it in the format | -| described in gram.h. All guards are copied into the GUARD_OBSTACK | -| and all actions into ACTION_OBSTACK, in each case forming the body | -| of a C function (YYGUARD or YYACTION) which contains a switch | -| statement to decide which guard or action to execute. | -`-------------------------------------------------------------------*/ +/*------------------------------------------------------------------. +| Read in the grammar specification and record it in the format | +| described in gram.h. All actions are copied into ACTION_OBSTACK, | +| in each case forming the body of a C function (YYACTION) which | +| contains a switch statement to decide which action to execute. | +`------------------------------------------------------------------*/ void reader (void) @@ -1889,7 +1853,7 @@ reader (void) } /* Read in the grammar, build grammar in list form. Write out - guards and actions. */ + actions. */ readgram (); /* Some C code is given at the end of the grammar file. */ read_additionnal_code ();