multistart: allow tokens as start symbols

After all, why not?

* src/reader.c (switching_token): Use symbol_id_get.
(check_start_symbols): Require that the start symbol is a token only
if it's the only one.
* examples/c/lexcalc/parse.y: Let NUM be a start symbol.
This commit is contained in:
Akim Demaille
2020-08-04 16:47:19 +02:00
parent d9cf99b6a5
commit 683040b324
3 changed files with 15 additions and 9 deletions

View File

@@ -305,9 +305,14 @@ is_identifier (uniqstr s)
uniqstr
symbol_id_get (symbol const *sym)
{
if (sym->alias)
sym = sym->alias;
return is_identifier (sym->tag) ? sym->tag : 0;
// There's one weird case: YYerror is the alias, and error is the
// base symbol. Return YYerror in that case.
if (sym->alias && is_identifier (sym->alias->tag))
return sym->alias->tag;
else if (is_identifier (sym->tag))
return sym->tag;
else
return NULL;
}