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;
res->line = lineno;
res->action = NULL;
res->action_line = 0;
- res->guard = NULL;
- res->guard_line = 0;
res->ruleprec = NULL;
return res;
}
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 */
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)
{
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 */
{
/* 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)
| |
| Two symbols are entered in the table, one for the token symbol and |
| one for the literal. Both are given the <type>, 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 |
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)
}
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 */
\f
/*------------------------------------------------------------------.
| 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)
{
}
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);
-}
-
\f
/*-------------------------------------------------------------------.
| 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 |
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 */
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;
}
/* 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. */
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;
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)
ritem_print (stderr);
}
\f
-/*-------------------------------------------------------------------.
-| 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)
}
/* 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 ();