]> git.saurik.com Git - bison.git/commitdiff
* src/parse-gram.y: Include quotearg.h.
authorPaul Eggert <eggert@cs.ucla.edu>
Sat, 16 Apr 2005 06:32:51 +0000 (06:32 +0000)
committerPaul Eggert <eggert@cs.ucla.edu>
Sat, 16 Apr 2005 06:32:51 +0000 (06:32 +0000)
(string_as_id): Quote $1 before using it as a key, since the
lexer no longer quotes it for us.
(string_content): Don't strip quotes, since lexer no longer
quotes it for us.
* src/scan-gram.l: Include quotearg.h.
("\""): Omit quote.
("'"<SC_ESCAPED_CHARACTER>): Quote symbol before using it as
a key, since the rest of the lexer doesn't quote it.
* src/symtab.c (symbol_get): Don't quote symbol; caller does it now.
* tests/regression.at (Token definitions): Check for backslashes
in token strings.

ChangeLog
src/parse-gram.y
src/scan-gram.l
src/symtab.c
tests/regression.at

index 0737249acad6b1f160a44707d4dd067f2c074463..4a999f6a6564fb321c52f419a689cd817fc87c07 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,25 @@
+2005-04-15  Paul Eggert  <eggert@cs.ucla.edu>
+
+       * src/parse-gram.y: Include quotearg.h.
+       (string_as_id): Quote $1 before using it as a key, since the
+       lexer no longer quotes it for us.
+       (string_content): Don't strip quotes, since lexer no longer
+       quotes it for us.
+       * src/scan-gram.l: Include quotearg.h.
+       ("\""): Omit quote.
+       ("'"<SC_ESCAPED_CHARACTER>): Quote symbol before using it as
+       a key, since the rest of the lexer doesn't quote it.
+       * src/symtab.c (symbol_get): Don't quote symbol; caller does it now.
+       * tests/regression.at (Token definitions): Check for backslashes
+       in token strings.
+
+       * data/yacc.c (YYSTACK_ALLOC_MAXIMUM): New macro.
+       (YYSIZE_T): Define to unsigned long int when using an older compiler.
+       (yyparse): Revamp code to generate long syntax error message, to
+       make it easier to translate, and to avoid problems with arithmetic
+       overflow.  Change "virtual memory" to "memory" in diagnostic, since
+       we don't know whether the memory is virtual.
+
 2005-04-13  Paul Eggert  <eggert@cs.ucla.edu>
 
        * NEWS: Bison-generated C parsers now use the _ macro to
index 6016cea74810e21eaed1bf63a2a1aa1f5ea48831..cecde65eb5c877339c8ec35c068475056d4e050d 100644 (file)
@@ -1,6 +1,6 @@
 %{/* Bison Grammar Parser                             -*- C -*-
 
-   Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -29,6 +29,7 @@
 #include "gram.h"
 #include "muscle_tab.h"
 #include "output.h"
+#include "quotearg.h"
 #include "reader.h"
 #include "symlist.h"
 
@@ -403,25 +404,23 @@ symbol:
 
 action:
   BRACED_CODE
-   { $$ = $1; }
+    { $$ = $1; }
 ;
 
-/* A string used as an ID: we have to keep the quotes. */
+/* A string used as an ID: quote it.  */
 string_as_id:
   STRING
     {
-      $$ = symbol_get ($1, @1);
+      $$ = symbol_get (quotearg_style (c_quoting_style, $1), @1);
       symbol_class_set ($$, token_sym, @1);
     }
 ;
 
-/* A string used for its contents.  Strip the quotes. */
+/* A string used for its contents.  Don't quote it.  */
 string_content:
   STRING
-    {
-      $$ = $1 + 1;
-      $$[strlen ($$) - 1] = '\0';
-    };
+    { $$ = $1; }
+;
 
 
 epilogue.opt:
index adf976168f1ff5aad538be62a84d41de05d42deb..9fc1dcb452d23ad0f2e00f73db39838fc2b89041 100644 (file)
@@ -34,6 +34,7 @@
 #include "files.h"
 #include "getargs.h"
 #include "gram.h"
+#include "quotearg.h"
 #include "reader.h"
 #include "uniqstr.h"
 
@@ -249,7 +250,7 @@ splice       (\\[ \f\t\v]*\n)*
   "'"        STRING_GROW; token_start = loc->start; BEGIN SC_ESCAPED_CHARACTER;
 
   /* Strings. */
-  "\""       STRING_GROW; token_start = loc->start; BEGIN SC_ESCAPED_STRING;
+  "\""       token_start = loc->start; BEGIN SC_ESCAPED_STRING;
 
   /* Prologue. */
   "%{"        code_start = loc->start; BEGIN SC_PROLOGUE;
@@ -360,7 +361,6 @@ splice       (\\[ \f\t\v]*\n)*
 <SC_ESCAPED_STRING>
 {
   "\"" {
-    STRING_GROW;
     STRING_FINISH;
     loc->start = token_start;
     val->chars = last_string;
@@ -384,7 +384,9 @@ splice       (\\[ \f\t\v]*\n)*
     STRING_GROW;
     STRING_FINISH;
     loc->start = token_start;
-    val->symbol = symbol_get (last_string, *loc);
+    val->symbol = symbol_get (quotearg_style (escape_quoting_style,
+                                             last_string),
+                             *loc);
     symbol_class_set (val->symbol, token_sym, *loc);
     last_string_1 = last_string[1];
     symbol_user_token_number_set (val->symbol, last_string_1, *loc);
index 223229fa79d5a2ec000cddbc79ab6a4ed3746ffc..3b5683a2c6fdcf42efec1db1a395152a2d9b6b4f 100644 (file)
@@ -475,8 +475,7 @@ symbol_get (const char *key, location loc)
   symbol probe;
   symbol *entry;
 
-  /* Keep the symbol in a printable form.  */
-  key = uniqstr_new (quotearg_style (escape_quoting_style, key));
+  key = uniqstr_new (key);
   probe.tag = key;
   entry = hash_lookup (symbol_table, &probe);
 
index dd87ef2d849c57cbf2767b30b7a55c3b273d29b9..3d67ee9da7d48f28070c70f31969eb54f97b84a9 100644 (file)
@@ -314,20 +314,44 @@ AT_SETUP([Token definitions])
 # Bison managed, when fed with `%token 'f' "f"' to #define 'f'!
 AT_DATA_GRAMMAR([input.y],
 [%{
+#include <stdio.h>
 void yyerror (const char *s);
 int yylex (void);
 %}
-[%token MYEOF 0 "end of file"
+[%error-verbose
+%token MYEOF 0 "end of file"
 %token 'a' "a"
 %token B_TOKEN "b"
 %token C_TOKEN 'c'
 %token 'd' D_TOKEN
+%token SPECIAL "\\\'\?\"\a\b\f\n\r\t\v\001\377\x001\x0000ff"
 %%
-exp: "a";
+exp: "a" "\\\'\?\"\a\b\f\n\r\t\v\001\377\x001\x0000ff";
+%%
+void
+yyerror (char const *s)
+{
+  fprintf (stderr, "%s\n", s);
+}
+
+int
+yylex (void)
+{
+  return SPECIAL;
+}
+
+int
+main (void)
+{
+  return yyparse ();
+}
 ]])
 
 AT_CHECK([bison -o input.c input.y])
-AT_COMPILE([input.o], [-c input.c])
+AT_COMPILE([input])
+AT_PARSER_CHECK([./input], 1, [],
+[syntax error, unexpected "\\'?\"\a\b\f\n\r\t\v\001\377\001\377", expecting "a"
+])
 AT_CLEANUP