From 7eca26e87b5cd0ed9208bee83759046a26c8dca6 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Wed, 19 Feb 2020 18:51:21 +0100 Subject: [PATCH] parser: expose a list of symbols * src/parse-gram.y (%type): Also use current_class. (symbol_decl.1): Rename as... (symbols.1): this. --- src/parse-gram.y | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/parse-gram.y b/src/parse-gram.y index 73a2ccea..c849eb80 100644 --- a/src/parse-gram.y +++ b/src/parse-gram.y @@ -449,7 +449,7 @@ grammar_declaration: ; -%type nterm_decls symbol_decls symbol_decl.1 +%type nterm_decls symbol_decls symbols.1 token_decls token_decls_for_prec token_decl.1 token_decl_for_prec.1; symbol_declaration: @@ -463,8 +463,9 @@ symbol_declaration: current_class = unknown_sym; 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); } | precedence_declarator token_decls_for_prec[syms] @@ -630,30 +631,32 @@ token_decl_for_prec: // A non empty list of typed symbols (for %type). symbol_decls: - symbol_decl.1[syms] + symbols.1[syms] { $$ = $syms; } -| TAG symbol_decl.1[syms] +| TAG symbols.1[syms] { $$ = 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)); } ; -// One or more token declarations (for %type). -symbol_decl.1: +// One or more symbols. +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_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)); } ;