]> git.saurik.com Git - bison.git/commitdiff
* src/reader.c (parse_dquoted_param): New.
authorMarc Autret <autret_m@epita.fr>
Wed, 28 Nov 2001 22:28:01 +0000 (22:28 +0000)
committerMarc Autret <autret_m@epita.fr>
Wed, 28 Nov 2001 22:28:01 +0000 (22:28 +0000)
(parse_skel_decl): Use it.
* src/lex.h: Add its prototype.
* src/lex.c (literalchar): Become not static.

ChangeLog
src/lex.c
src/lex.h
src/reader.c

index 68fd377d73e025e901b3c990ec0f3f33546cf0bc..3ff10416b18e150e4739494fcf7fa8ec9fa09bd3 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2001-11-28  Marc Autret  <autret_m@epita.fr>
+
+       * src/reader.c (parse_dquoted_param): New.
+       (parse_skel_decl): Use it.
+       * src/lex.h: Add its prototype.
+       * src/lex.c (literalchar): Become not static.
+
 2001-11-28  Marc Autret  <autret_m@epita.fr>
 
        * src/output.h: And put its extern declaration here.
index 651ff98edc2580f0010c9c6e63dad8b2c547f096..78b8a8f391bf84f8db7981a39e008575f18dd8e4 100644 (file)
--- a/src/lex.c
+++ b/src/lex.c
@@ -152,7 +152,7 @@ xgetc (FILE *f)
    being, I prefer have literalchar behave like quotearg, and change
    my mind later if I was wrong.  */
 
-static int
+int
 literalchar (struct obstack *out, int *pcode, char term)
 {
   int c;
index 16ac115a56ee3bec65a4efee131adcbc57689144..df825a8b7a17af2329c89cdee25a463a111c3d23 100644 (file)
--- a/src/lex.h
+++ b/src/lex.h
@@ -73,6 +73,7 @@ void read_type_name PARAMS ((FILE *fin));
    entry found.  */
 
 token_t lex PARAMS ((void));
+int literalchar PARAMS ((struct obstack *out, int *pcode, char term));
 
 token_t parse_percent_token PARAMS ((void));
 
index 73e79704a6024fcacda7a22a7c928d1550c3b6cd..8e7d99494a9d1a5bdb54689669e13eb4bdb77ab7 100644 (file)
@@ -964,6 +964,52 @@ parse_muscle_decl (void)
 }
 
 
+
+/*---------------------------------.
+| Parse a double quoted parameter. |       
+`---------------------------------*/
+
+static const char *
+parse_dquoted_param (const char *from)
+{
+  struct obstack param_obstack;
+  const char *param = NULL;
+  int c;
+
+  obstack_init (&param_obstack);
+  c = skip_white_space ();
+
+  if (c != '"')
+    {
+      complain (_("invalid %s declaration"), from);
+      ungetc (c, finput);
+      skip_to_char ('%');
+      return NULL;
+    }
+
+  for (;;)
+    {
+      if (literalchar (NULL, &c, '\"'))
+       obstack_1grow (&param_obstack, c);
+      else
+       break;
+    }
+  
+  obstack_1grow (&param_obstack, '\0');
+  param = obstack_finish (&param_obstack);
+
+  if (c != '"' || strlen (param) == 0)
+    {
+      complain (_("invalid %s declaration"), from);
+      if (c != '"')
+       ungetc (c, finput);
+      skip_to_char ('%');
+      return NULL;
+    }
+
+  return param;
+}
+
 /*----------------------------------.
 | Parse what comes after %skeleton. |
 `----------------------------------*/
@@ -971,7 +1017,7 @@ parse_muscle_decl (void)
 void
 parse_skel_decl (void)
 {
-  /* Complete with parse_dquoted_param () on the CVS branch 1.29.  */
+  skeleton = parse_dquoted_param ("%skeleton");
 }
 
 /*----------------------------------------------------------------.