summaryrefslogtreecommitdiff
path: root/src/symtab.c
diff options
context:
space:
mode:
authorAkim Demaille <akim.demaille@gmail.com>2020-04-10 18:31:07 +0200
committerAkim Demaille <akim.demaille@gmail.com>2020-04-12 13:56:44 +0200
commite50de09886bfdf4febb75accdd1549952787b5e0 (patch)
treef4c72ebd23bc6a5123d343b3e2c01d30e7ac1ec4 /src/symtab.c
parent95421df67b21f7a508404b11f51d27e384335ea1 (diff)
downloadbison-e50de09886bfdf4febb75accdd1549952787b5e0.tar.gz
tokens: properly define the YYEOF token kind
Currently EOF is handled in an adhoc way, with a #define YYEOF 0 in the implementation file. As a result, the user has to define her own EOF token if she wants to use it, which is a pity. Give the $end token a visible kind name, YYEOF. Except that in C, where enums are not scoped, we would have collisions between all the definitions of YYEOFs in the header files, so in C, make it <api.PREFIX>EOF. * data/skeletons/c.m4 (YYEOF): Override its name to avoid collisions. Unless the user already gave it a different name. * data/skeletons/glr.c (YYEOF): Remove. Use ]b4_symbol(0, [id])[ instead. Add support for "pre_epilogue", for glr.cc. * data/skeletons/glr.cc: Remove dead code (never emitted #undefs). * data/skeletons/yacc.c * src/parse-gram.c * src/reader.c * src/symtab.c * tests/actions.at * tests/input.at
Diffstat (limited to 'src/symtab.c')
-rw-r--r--src/symtab.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/symtab.c b/src/symtab.c
index fd96b827..b236fc36 100644
--- a/src/symtab.c
+++ b/src/symtab.c
@@ -70,9 +70,12 @@ bool tag_seen = false;
static bool
symbol_is_user_defined (symbol *sym)
{
+ const bool eof_is_user_defined
+ = !endtoken->alias || STRNEQ (endtoken->alias->tag, "$end");
return sym->tag[0] != '$'
+ && (eof_is_user_defined || (sym != endtoken && sym->alias != errtoken))
&& sym != errtoken && sym->alias != errtoken
- && sym != undeftoken && sym->alias != undeftoken;
+ && sym != undeftoken && sym->alias != undeftoken;
}