[PATCH 03/17] parser: expose a list of symbols

Akim Demaille <[email protected]>
Newsgroups gmane.comp.parsers.bison.patches
Message-ID <[email protected]>
* 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 <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_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));
     }
 ;
-- 
2.28.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.