style: rename user_token_number as code

This should have been done in 3.6, but I wanted to avoid introducing
conflicts into Vincent's work on counterexamples.  It turns out it's
completely orthogonal.

* data/README.md, data/skeletons/bison.m4, data/skeletons/c++.m4,
* data/skeletons/c.m4, data/skeletons/glr.c, data/skeletons/java.m4,
* data/skeletons/lalr1.d, data/skeletons/lalr1.java,
* data/skeletons/variant.hh, data/skeletons/yacc.c, src/conflicts.c,
* src/derives.c, src/gram.c, src/gram.h, src/output.c,
* src/parse-gram.c, src/parse-gram.y, src/print-xml.c, src/print.c,
* src/reader.c, src/symtab.c, src/symtab.h, tests/input.at,
* tests/types.at:
s/user_token_number/code/g.
Plus minor changes.
This commit is contained in:
Akim Demaille
2020-05-22 20:12:03 +02:00
parent 339d11badf
commit e7aff57122
25 changed files with 88 additions and 95 deletions

View File

@@ -710,13 +710,13 @@ rule_conflicts_print (void)
complain (&r->location, complaint,
_("shift/reduce conflicts for rule %d:"
" %d found, %d expected"),
r->user_number, sr, expected_sr);
r->code, sr, expected_sr);
int rr = count_rule_rr_conflicts (r);
if (rr != expected_rr && (rr != 0 || expected_rr != -1))
complain (&r->location, complaint,
_("reduce/reduce conflicts for rule %d:"
" %d found, %d expected"),
r->user_number, rr, expected_rr);
r->code, rr, expected_rr);
}
}
if (warning_is_enabled (Wcounterexample))

View File

@@ -47,7 +47,7 @@ print_derives (void)
fprintf (stderr, " %s derives\n", symbols[i]->tag);
for (rule **rp = derives[i - ntokens]; *rp; ++rp)
{
fprintf (stderr, " %3d ", (*rp)->user_number);
fprintf (stderr, " %3d ", (*rp)->code);
rule_rhs_print (*rp, stderr);
fprintf (stderr, "\n");
}

View File

@@ -44,7 +44,7 @@ int nvars = 0;
symbol_number *token_translations = NULL;
int max_user_token_number = 256;
int max_code = 256;
int required_version = 0;

View File

@@ -173,7 +173,7 @@ typedef struct
{
/* The number of the rule in the source. It is usually the index in
RULES too, except if there are useless rules. */
rule_number user_number;
rule_number code;
/* The index in RULES. Usually the rule number in the source,
except if some rules are useless. */
@@ -262,7 +262,7 @@ extern symbol **symbols;
by the user's yylex routine, it yields the internal token number
used by the parser and throughout bison. */
extern symbol_number *token_translations;
extern int max_user_token_number;
extern int max_code;

View File

@@ -274,12 +274,12 @@ prepare_symbols (void)
MUSCLE_INSERT_INT ("tokens_number", ntokens);
MUSCLE_INSERT_INT ("nterms_number", nvars);
MUSCLE_INSERT_INT ("symbols_number", nsyms);
MUSCLE_INSERT_INT ("user_token_number_max", max_user_token_number);
MUSCLE_INSERT_INT ("code_max", max_code);
muscle_insert_symbol_number_table ("translate",
token_translations,
token_translations[0],
1, max_user_token_number + 1);
1, max_code + 1);
/* tname -- token names. */
prepare_symbol_names ("tname");
@@ -309,7 +309,7 @@ prepare_symbols (void)
{
int *values = xnmalloc (ntokens, sizeof *values);
for (int i = 0; i < ntokens; ++i)
values[i] = symbols[i]->content->user_token_number;
values[i] = symbols[i]->content->code;
muscle_insert_int_table ("toknum", values,
values[0], 1, ntokens);
free (values);
@@ -565,8 +565,8 @@ prepare_symbol_definitions (void)
SET_KEY ("tag");
MUSCLE_INSERT_STRING (key, symbol_tag (sym));
SET_KEY ("user_number");
MUSCLE_INSERT_INT (key, sym->content->user_token_number);
SET_KEY ("code");
MUSCLE_INSERT_INT (key, sym->content->code);
SET_KEY ("is_token");
MUSCLE_INSERT_INT (key, i < ntokens);

View File

@@ -2367,7 +2367,7 @@ yyreduce:
(yyval.token_decl) = (yyvsp[-2].id);
symbol_class_set ((yyvsp[-2].id), current_class, (yylsp[-2]), true);
if (0 <= (yyvsp[-1].yykind_82))
symbol_user_token_number_set ((yyvsp[-2].id), (yyvsp[-1].yykind_82), (yylsp[-1]));
symbol_code_set ((yyvsp[-2].id), (yyvsp[-1].yykind_82), (yylsp[-1]));
if ((yyvsp[0].alias))
symbol_make_alias ((yyvsp[-2].id), (yyvsp[0].alias), (yylsp[0]));
}
@@ -2424,7 +2424,7 @@ yyreduce:
(yyval.token_decl_for_prec) = (yyvsp[-1].id);
symbol_class_set ((yyvsp[-1].id), token_sym, (yylsp[-1]), false);
if (0 <= (yyvsp[0].yykind_82))
symbol_user_token_number_set ((yyvsp[-1].id), (yyvsp[0].yykind_82), (yylsp[0]));
symbol_code_set ((yyvsp[-1].id), (yyvsp[0].yykind_82), (yylsp[0]));
}
break;
@@ -2573,7 +2573,7 @@ yyreduce:
}
(yyval.id) = symbol_get (char_name ((yyvsp[0].CHAR)), (yylsp[0]));
symbol_class_set ((yyval.id), token_sym, (yylsp[0]), false);
symbol_user_token_number_set ((yyval.id), (yyvsp[0].CHAR), (yylsp[0]));
symbol_code_set ((yyval.id), (yyvsp[0].CHAR), (yylsp[0]));
}
break;

View File

@@ -531,7 +531,7 @@ token_decl:
$$ = $id;
symbol_class_set ($id, current_class, @id, true);
if (0 <= $num)
symbol_user_token_number_set ($id, $num, @num);
symbol_code_set ($id, $num, @num);
if ($alias)
symbol_make_alias ($id, $alias, @alias);
}
@@ -593,7 +593,7 @@ token_decl_for_prec:
$$ = $id;
symbol_class_set ($id, token_sym, @id, false);
if (0 <= $num)
symbol_user_token_number_set ($id, $num, @num);
symbol_code_set ($id, $num, @num);
}
| string_as_id
;
@@ -763,7 +763,7 @@ id:
}
$$ = symbol_get (char_name ($1), @1);
symbol_class_set ($$, token_sym, @1, false);
symbol_user_token_number_set ($$, $1, @1);
symbol_code_set ($$, $1, @1);
}
;

View File

@@ -379,7 +379,7 @@ print_grammar (FILE *out, int level)
/* Terminals */
xml_puts (out, level + 1, "<terminals>");
for (symbol_number i = 0; i < max_user_token_number + 1; i++)
for (int i = 0; i < max_code + 1; i++)
if (token_translations[i] != undeftoken->content->number)
{
char const *tag = symbols[token_translations[i]]->tag;

View File

@@ -362,7 +362,7 @@ print_terminal_symbols (FILE *out)
{
/* TERMINAL (type #) : rule #s terminal is on RHS */
fprintf (out, "%s\n\n", _("Terminals, with rules where they appear"));
for (symbol_number i = 0; i < max_user_token_number + 1; i++)
for (int i = 0; i < max_code + 1; ++i)
if (token_translations[i] != undeftoken->content->number)
{
const char *tag = symbols[token_translations[i]]->tag;
@@ -445,7 +445,7 @@ print_results (void)
reduce_output (out);
grammar_rules_partial_print (out,
_("Rules useless in parser due to conflicts"),
rule_useless_in_parser_p);
rule_useless_in_parser_p);
conflicts_output (out);
grammar_rules_print (out);

View File

@@ -634,7 +634,7 @@ packgram (void)
if (lhs != grammar)
grammar_rule_check_and_complete (lhs);
rules[ruleno].user_number = ruleno;
rules[ruleno].code = ruleno;
rules[ruleno].number = ruleno;
rules[ruleno].lhs = lhs->content.sym->content;
rules[ruleno].rhs = ritem + itemno;
@@ -782,7 +782,7 @@ check_and_convert_grammar (void)
endtoken->content->class = token_sym;
endtoken->content->number = 0;
/* Value specified by POSIX. */
endtoken->content->user_token_number = 0;
endtoken->content->code = 0;
{
symbol *alias = symbol_get ("$end", empty_loc);
symbol_class_set (alias, token_sym, empty_loc, false);

View File

@@ -33,6 +33,13 @@
#include "gram.h"
#include "intprops.h"
/** Undefined token code. */
#define CODE_UNDEFINED (-1)
/* Undefined symbol number. */
#define NUMBER_UNDEFINED (-1)
static struct hash_table *symbol_table = NULL;
static struct hash_table *semantic_type_table = NULL;
@@ -99,7 +106,7 @@ sym_content_new (symbol *s)
res->prec_loc = empty_loc;
res->prec = 0;
res->assoc = undef_assoc;
res->user_token_number = USER_NUMBER_UNDEFINED;
res->code = CODE_UNDEFINED;
res->class = unknown_sym;
res->status = undeclared;
@@ -571,24 +578,24 @@ symbol_class_set (symbol *sym, symbol_class class, location loc, bool declaring)
`------------------------------------------------*/
void
symbol_user_token_number_set (symbol *sym, int user_token_number, location loc)
symbol_code_set (symbol *sym, int code, location loc)
{
int *user_token_numberp = &sym->content->user_token_number;
int *codep = &sym->content->code;
if (sym->content->class != token_sym)
complain (&loc, complaint,
_("nonterminals cannot be given a token code"));
else if (*user_token_numberp != USER_NUMBER_UNDEFINED
&& *user_token_numberp != user_token_number)
else if (*codep != CODE_UNDEFINED
&& *codep != code)
complain (&loc, complaint, _("redefining code of token %s"),
sym->tag);
else if (user_token_number == INT_MAX)
else if (code == INT_MAX)
complain (&loc, complaint, _("code of token %s too large"),
sym->tag);
else
{
*user_token_numberp = user_token_number;
*codep = code;
/* User defined $end token? */
if (user_token_number == 0 && !endtoken)
if (code == 0 && !endtoken)
{
endtoken = sym->content->symbol;
/* It is always mapped to 0, so it was already counted in
@@ -735,7 +742,7 @@ symbol_pack (symbol *sym)
}
static void
complain_user_token_number_redeclared (int num, symbol *first, symbol *second)
complain_code_redeclared (int num, symbol *first, symbol *second)
{
symbols_sort (&first, &second);
complain (&second->location, complaint,
@@ -758,13 +765,13 @@ symbol_translation (symbol *sym)
&& !sym->is_alias)
{
/* A token which translation has already been set?*/
if (token_translations[sym->content->user_token_number]
if (token_translations[sym->content->code]
!= undeftoken->content->number)
complain_user_token_number_redeclared
(sym->content->user_token_number,
symbols[token_translations[sym->content->user_token_number]], sym);
complain_code_redeclared
(sym->content->code,
symbols[token_translations[sym->content->code]], sym);
else
token_translations[sym->content->user_token_number]
token_translations[sym->content->code]
= sym->content->number;
}
}
@@ -1040,53 +1047,53 @@ symbols_check_defined (void)
static void
symbols_token_translations_init (void)
{
bool num_256_available_p = true;
bool code_256_available_p = true;
/* Find the highest token code, and whether 256, the POSIX preferred
token code for the error token, is used. */
max_user_token_number = 0;
max_code = 0;
for (int i = 0; i < ntokens; ++i)
{
sym_content *sym = symbols[i]->content;
if (sym->user_token_number != USER_NUMBER_UNDEFINED)
if (sym->code != CODE_UNDEFINED)
{
if (sym->user_token_number > max_user_token_number)
max_user_token_number = sym->user_token_number;
if (sym->user_token_number == 256)
num_256_available_p = false;
if (sym->code > max_code)
max_code = sym->code;
if (sym->code == 256)
code_256_available_p = false;
}
}
/* If 256 is not used, assign it to error, to follow POSIX. */
if (num_256_available_p
&& errtoken->content->user_token_number == USER_NUMBER_UNDEFINED)
errtoken->content->user_token_number = 256;
if (code_256_available_p
&& errtoken->content->code == CODE_UNDEFINED)
errtoken->content->code = 256;
/* Set the missing user numbers. */
if (max_user_token_number < 256)
max_user_token_number = 256;
/* Set the missing codes. */
if (max_code < 256)
max_code = 256;
for (int i = 0; i < ntokens; ++i)
{
sym_content *sym = symbols[i]->content;
if (sym->user_token_number == USER_NUMBER_UNDEFINED)
if (sym->code == CODE_UNDEFINED)
{
IGNORE_TYPE_LIMITS_BEGIN
if (INT_ADD_WRAPV (max_user_token_number, 1, &max_user_token_number))
if (INT_ADD_WRAPV (max_code, 1, &max_code))
complain (NULL, fatal, _("token number too large"));
IGNORE_TYPE_LIMITS_END
sym->user_token_number = max_user_token_number;
sym->code = max_code;
}
if (sym->user_token_number > max_user_token_number)
max_user_token_number = sym->user_token_number;
if (sym->code > max_code)
max_code = sym->code;
}
token_translations = xnmalloc (max_user_token_number + 1,
token_translations = xnmalloc (max_code + 1,
sizeof *token_translations);
/* Initialize all entries for literal tokens to the internal token
number for $undefined, which represents all invalid inputs. */
for (int i = 0; i < max_user_token_number + 1; ++i)
for (int i = 0; i < max_code + 1; ++i)
token_translations[i] = undeftoken->content->number;
for (int i = 0; symbols_sorted[i]; ++i)
symbol_translation (symbols_sorted[i]);

View File

@@ -149,21 +149,13 @@ struct sym_content
int prec;
assoc assoc;
/** The user specified token number.
E.g., %token FOO 42.*/
int user_token_number;
/** Token code, possibly specified by the user (%token FOO 42). */
int code;
symbol_class class;
declaration_status status;
};
/** Undefined user number. */
# define USER_NUMBER_UNDEFINED -1
/* Undefined internal token number. */
# define NUMBER_UNDEFINED (-1)
/** Fetch (or create) the symbol associated to KEY. */
symbol *symbol_from_uniqstr (const uniqstr key, location loc);
@@ -235,8 +227,8 @@ void symbol_precedence_set (symbol *sym, int prec, assoc a, location loc);
void symbol_class_set (symbol *sym, symbol_class class, location loc,
bool declaring);
/** Set the \c user_token_number associated with \c sym. */
void symbol_user_token_number_set (symbol *sym, int user_number, location loc);
/** Set the \c code associated with \c sym. */
void symbol_code_set (symbol *sym, int code, location loc);