]> git.saurik.com Git - bison.git/blobdiff - NEWS
Require default %destructor/%printer to be declared using
[bison.git] / NEWS
diff --git a/NEWS b/NEWS
index dd36e633ad222f2632b280e160801978147a8d0a..5ecabf597e90e2fadff83ea725621ae1f97c537e 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -3,6 +3,32 @@ Bison News
 
 Changes in version 2.3+:
 
+* Instead of %union, you can define and use your own union type
+  YYSTYPE if your grammar contains at least one <type> tag.
+  Your YYSTYPE need not be a macro; it can be a typedef.
+  This change is for compatibility with other Yacc implementations,
+  and is required by POSIX.
+
+* Locations columns and lines start at 1.
+  In accordance with the GNU Coding Standards and Emacs.
+
+* You may now declare a default %destructor and %printer:
+
+  For example:
+
+     %union { char *string; }
+     %token <string> STRING1
+     %token <string> STRING2
+     %type  <string> string1
+     %type  <string> string2
+     %destructor { free ($$); } %symbol-default
+     %destructor { free ($$); printf ("%d", @$.first_line); } STRING1 string1
+
+  guarantees that, when the parser discards any user-defined symbol, it passes
+  its semantic value to `free'.  However, when the parser discards a `STRING1'
+  or a `string1', it also prints its line number to `stdout'.  It performs only
+  the second `%destructor' in this case, so it invokes `free' only once.
+
 * Except for LALR(1) parsers in C with POSIX Yacc emulation enabled (with `-y',
   `--yacc', or `%yacc'), Bison no longer generates #define statements for
   associating token numbers with token names.  Removing the #define statements
@@ -16,7 +42,7 @@ Changes in version 2.3+:
   `%{ ... %}' syntax.  To generate the pre-prologue, Bison concatenates all
   prologue blocks that you've declared before the first %union.  To generate
   the post-prologue, Bison concatenates all prologue blocks that you've
-  declared after the first %union.  
+  declared after the first %union.
 
   Previous releases of Bison inserted the pre-prologue into both the header
   file and the code file in all cases except for LALR(1) parsers in C.  In the