-static int start_flag = 0;
-static bucket *startval = NULL;
-
-/* Nonzero if components of semantic values are used, implying
- they must be unions. */
-static int value_components_used;
-
-/* Nonzero if %union has been seen. */
-static int typed = 0;
-
-/* Incremented for each %left, %right or %nonassoc seen */
-static int lastprec = 0;
-
-bucket *errtoken = NULL;
-bucket *undeftoken = NULL;
-bucket *eoftoken = NULL;
-bucket *axiom = NULL;
-
-static symbol_list *
-symbol_list_new (bucket *sym)
-{
- symbol_list *res = XMALLOC (symbol_list, 1);
- res->next = NULL;
- res->sym = sym;
- res->line = lineno;
- res->action = NULL;
- res->action_line = 0;
- res->guard = NULL;
- res->guard_line = 0;
- res->ruleprec = NULL;
- return res;
-}
-
-/*------------------------.
-| Operations on buckets. |
-`------------------------*/
-
-
-/*-----------------------------------------------------------.
-| If THIS is not defined, report an error, and consider it a |
-| nonterminal. |
-`-----------------------------------------------------------*/
-
-static bool
-bucket_check_defined (bucket *this)
-{
- if (this->class == unknown_sym)
- {
- complain
- (_("symbol %s is used, but is not defined as a token and has no rules"),
- this->tag);
- this->class = nterm_sym;
- this->number = nvars++;
- }
-
- return TRUE;
-}
-
-
-/*-------------------------------------------------------------------.
-| Assign a symbol number, and write the definition of the token name |
-| into FDEFINES. Put in SYMBOLS. |
-`-------------------------------------------------------------------*/
-
-static bool
-bucket_make_alias (bucket *symbol, char *typename)
-{
- if (symval->alias)
- warn (_("symbol `%s' used more than once as a literal string"),
- symval->tag);
- else if (symbol->alias)
- warn (_("symbol `%s' given more than one literal string"),
- symbol->tag);
- else
- {
- symval->class = token_sym;
- symval->type_name = typename;
- symval->user_token_number = symbol->user_token_number;
- symbol->user_token_number = SALIAS;
- symval->alias = symbol;
- symbol->alias = symval;
- /* symbol and symval combined are only one symbol */
- nsyms--;
- ntokens--;
- assert (ntokens == symbol->number || ntokens == symval->number);
- symbol->number = symval->number =
- (symval->number < symbol->number) ? symval->number : symbol->number;
- }
-
- return TRUE;
-}
-
-/*---------------------------------------------------------.
-| Check that THIS, and its alias, have same precedence and |
-| associativity. |
-`---------------------------------------------------------*/
-
-static bool
-bucket_check_alias_consistence (bucket *this)
-{
- /* Check only those who _are_ the aliases. */
- if (this->alias && this->user_token_number == SALIAS)
- {
- if (this->prec != this->alias->prec)
- {
- if (this->prec != 0 && this->alias->prec != 0)
- complain (_("conflicting precedences for %s and %s"),
- this->tag, this->alias->tag);
- if (this->prec != 0)
- this->alias->prec = this->prec;
- else
- this->prec = this->alias->prec;
- }
-
- if (this->assoc != this->alias->assoc)
- {
- if (this->assoc != 0 && this->alias->assoc != 0)
- complain (_("conflicting assoc values for %s and %s"),
- this->tag, this->alias->tag);
- if (this->assoc != 0)
- this->alias->assoc = this->assoc;
- else
- this->assoc = this->alias->assoc;
- }
- }
- return TRUE;
-}
-
-
-/*-------------------------------------------------------------------.
-| Assign a symbol number, and write the definition of the token name |
-| into FDEFINES. Put in SYMBOLS. |
-`-------------------------------------------------------------------*/
-
-static bool
-bucket_pack (bucket *this)
-{
- if (getenv ("DEBUG"))
- fprintf (stderr, "Packing %s, %s, number = %d\n",
- this->tag,
- this->class == nterm_sym ? "nterm" : "TERM",
- this->number);
- if (this->class == nterm_sym)
- {
- this->number += ntokens;
- }
- else if (this->alias)
- {
- /* This symbol and its alias are a single token defn.
- Allocate a tokno, and assign to both check agreement of
- prec and assoc fields and make both the same */
- if (this->number == -1)
- {
- if (this == eoftoken || this->alias == eoftoken)
- this->number = this->alias->number = 0;
- else
- {
- assert (this->alias->number != -1);
- this->number = this->alias->number;
- }
- }
- /* Do not do processing below for SALIASs. */
- if (this->user_token_number == SALIAS)
- return TRUE;
- }
- else /* this->class == token_sym */
- {
- assert (this->number != -1);
- }
-
- if (getenv ("DEBUG"))
- fprintf (stderr, "Setting %d = %s\n", this->number, this->tag);
- symbols[this->number] = this;
- return TRUE;
-}
-