mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-17 16:23:04 +00:00
parser: expose a list of symbols
* src/parse-gram.y (%type): Also use current_class. (symbol_decl.1): Rename as... (symbols.1): this.
This commit is contained in:
@@ -449,7 +449,7 @@ grammar_declaration:
|
|||||||
;
|
;
|
||||||
|
|
||||||
|
|
||||||
%type <symbol_list*> nterm_decls symbol_decls symbol_decl.1
|
%type <symbol_list*> nterm_decls symbol_decls symbols.1
|
||||||
token_decls token_decls_for_prec
|
token_decls token_decls_for_prec
|
||||||
token_decl.1 token_decl_for_prec.1;
|
token_decl.1 token_decl_for_prec.1;
|
||||||
symbol_declaration:
|
symbol_declaration:
|
||||||
@@ -463,8 +463,9 @@ symbol_declaration:
|
|||||||
current_class = unknown_sym;
|
current_class = unknown_sym;
|
||||||
symbol_list_free ($syms);
|
symbol_list_free ($syms);
|
||||||
}
|
}
|
||||||
| "%type" symbol_decls[syms]
|
| "%type" { current_class = pct_type_sym; } symbol_decls[syms]
|
||||||
{
|
{
|
||||||
|
current_class = unknown_sym;
|
||||||
symbol_list_free ($syms);
|
symbol_list_free ($syms);
|
||||||
}
|
}
|
||||||
| precedence_declarator token_decls_for_prec[syms]
|
| precedence_declarator token_decls_for_prec[syms]
|
||||||
@@ -630,30 +631,32 @@ token_decl_for_prec:
|
|||||||
|
|
||||||
// A non empty list of typed symbols (for %type).
|
// A non empty list of typed symbols (for %type).
|
||||||
symbol_decls:
|
symbol_decls:
|
||||||
symbol_decl.1[syms]
|
symbols.1[syms]
|
||||||
{
|
{
|
||||||
$$ = $syms;
|
$$ = $syms;
|
||||||
}
|
}
|
||||||
| TAG symbol_decl.1[syms]
|
| TAG symbols.1[syms]
|
||||||
{
|
{
|
||||||
$$ = symbol_list_type_set ($syms, $TAG);
|
$$ = symbol_list_type_set ($syms, $TAG);
|
||||||
}
|
}
|
||||||
| symbol_decls TAG symbol_decl.1[syms]
|
| symbol_decls TAG symbols.1[syms]
|
||||||
{
|
{
|
||||||
$$ = symbol_list_append ($1, symbol_list_type_set ($syms, $TAG));
|
$$ = symbol_list_append ($1, symbol_list_type_set ($syms, $TAG));
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
// One or more token declarations (for %type).
|
// One or more symbols.
|
||||||
symbol_decl.1:
|
symbols.1:
|
||||||
symbol
|
symbol
|
||||||
{
|
{
|
||||||
symbol_class_set ($symbol, pct_type_sym, @symbol, false);
|
if (current_class != unknown_sym)
|
||||||
|
symbol_class_set ($symbol, current_class, @symbol, false);
|
||||||
$$ = symbol_list_sym_new ($symbol, @symbol);
|
$$ = symbol_list_sym_new ($symbol, @symbol);
|
||||||
}
|
}
|
||||||
| symbol_decl.1 symbol
|
| symbols.1 symbol
|
||||||
{
|
{
|
||||||
symbol_class_set ($symbol, pct_type_sym, @symbol, false);
|
if (current_class != unknown_sym)
|
||||||
|
symbol_class_set ($symbol, current_class, @symbol, false);
|
||||||
$$ = symbol_list_append ($1, symbol_list_sym_new ($symbol, @symbol));
|
$$ = symbol_list_append ($1, symbol_list_sym_new ($symbol, @symbol));
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|||||||
Reference in New Issue
Block a user