]> git.saurik.com Git - bison.git/blobdiff - src/parse-gram.y
* src/symtab.h, src/symtab.c (symbol_t): printer and
[bison.git] / src / parse-gram.y
index 4eaecb382570a9026360e1394d4725bd48c06844..06a32c31da51c1ab14623b41e030c59d3b4c0b22 100644 (file)
@@ -82,6 +82,7 @@ symbol_t *current_lhs;
 location_t current_lhs_location;
 associativity current_assoc;
 int current_prec = 0;
+braced_code_t current_braced_code = action_braced_code;
 %}
 
 
@@ -100,13 +101,18 @@ int current_prec = 0;
 %token STRING CHARACTER
 %token INT
 
-%token PERCENT_TOKEN "%token"
-%token PERCENT_NTERM "%nterm"
-%token PERCENT_TYPE  "%type"
-%token PERCENT_UNION "%union"
-%token PERCENT_LEFT     "%left"
-%token PERCENT_RIGHT    "%right"
-%token PERCENT_NONASSOC "%nonassoc"
+%token PERCENT_TOKEN       "%token"
+%token PERCENT_NTERM       "%nterm"
+
+%token PERCENT_TYPE        "%type"
+%token PERCENT_DESTRUCTOR  "%destructor"
+%token PERCENT_PRINTER     "%printer"
+
+%token PERCENT_UNION       "%union"
+
+%token PERCENT_LEFT        "%left"
+%token PERCENT_RIGHT       "%right"
+%token PERCENT_NONASSOC    "%nonassoc"
 
 %token PERCENT_EXPECT "%expect"
 %token PERCENT_START "%start"
@@ -200,6 +206,26 @@ grammar_declaration:
       MUSCLE_INSERT_INT ("stype_line", @2.first_line);
       muscle_insert ("stype", $2);
     }
+| "%destructor"
+    { current_braced_code = destructor_braced_code; }
+  BRACED_CODE symbols.1
+    {
+      symbol_list_t *list;
+      for (list = $4; list; list = list->next)
+       symbol_destructor_set (list->sym, list->location, $3);
+      symbol_list_free ($4);
+      current_braced_code = action_braced_code;
+    }
+| "%printer"
+    { current_braced_code = printer_braced_code; }
+  BRACED_CODE symbols.1
+    {
+      symbol_list_t *list;
+      for (list = $4; list; list = list->next)
+       symbol_printer_set (list->sym, $3, list->location);
+      symbol_list_free ($4);
+      current_braced_code = action_braced_code;
+    }
 ;
 
 symbol_declaration: