]> git.saurik.com Git - bison.git/commitdiff
* src/parse-gram.y (declaration): Have %parse-param and %lex-param
authorAkim Demaille <akim@epita.fr>
Fri, 15 Nov 2002 16:42:16 +0000 (16:42 +0000)
committerAkim Demaille <akim@epita.fr>
Fri, 15 Nov 2002 16:42:16 +0000 (16:42 +0000)
take two BRACED_CODE, not two string_content.
Free the scanner's obstack when we are done.
(code_content): New.
* tests/calc.at: Adjust.
* doc/bison.texinfo: Adjust.
Also, make sure to include the `,' for these declarations.

ChangeLog
doc/bison.texinfo
src/parse-gram.c
src/parse-gram.y
tests/calc.at

index f9e41b8b2442946215300e4faf48cde7ac701a2e..d504ad412328ca30c1c56f67ee92098f9d80b4a2 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2002-11-15  Akim Demaille  <akim@epita.fr>
+
+       * src/parse-gram.y (declaration): Have %parse-param and %lex-param
+       take two BRACED_CODE, not two string_content.
+       Free the scanner's obstack when we are done.
+       (code_content): New.
+       * tests/calc.at: Adjust.
+       * doc/bison.texinfo: Adjust.
+       Also, make sure to include the `,' for these declarations.
+
 2002-11-15  Tim Van Holder  <tim.van.holder@pandora.be>
 
        * m4/prereq.m4: Removed the commented jm_PREREQ_HASH
index 6883f471d3c5a6ad2e5f53be198b1d53ba474618..6cef9b5e9ac170d1c8871a6603cdfcd88920bfe3 100644 (file)
@@ -3847,7 +3847,7 @@ If you use a reentrant parser, you can optionally pass additional
 parameter information to it in a reentrant way.  To do so, use the
 declaration @code{%parse-param}:
 
-@deffn {Directive} %parse-param @var{argument-declaration} @var{argument-name}
+@deffn {Directive} %parse-param @{@var{argument-declaration}@}, @{@var{argument-name}@}
 @findex %parse-param
 Declare that @code{argument-name} is an additional @code{yyparse}
 argument.  This argument is also passed to @code{yyerror}.  The
@@ -3858,8 +3858,8 @@ prototypes.
 Here's an example.  Write this in the parser:
 
 @example
-%parse-param "int *nastiness"  "nastiness"
-%parse-param "int *randomness" "randomness"
+%parse-param @{int *nastiness@},  @{nastiness@}
+%parse-param @{int *randomness@}, @{randomness@}
 @end example
 
 @noindent
@@ -4090,7 +4090,7 @@ If you wish to pass the additional parameter data to @code{yylex}, use
 @code{%lex-param} just like @code{%parse-param} (@pxref{Parser
 Function}).
 
-@deffn {Directive} lex-param @var{argument-declaration} @var{argument-name}
+@deffn {Directive} lex-param @{@var{argument-declaration}@}, @{@var{argument-name}@}
 @findex %lex-param
 Declare that @code{argument-name} is an additional @code{yylex}
 argument.
@@ -4099,9 +4099,9 @@ argument.
 For instance:
 
 @example
-%parse-param "int *nastiness"  "nastiness"
-%lex-param   "int *nastiness"  "nastiness"
-%parse-param "int *randomness" "randomness"
+%parse-param @{int *nastiness@},  @{nastiness@}
+%lex-param   @{int *nastiness@},  @{nastiness@}
+%parse-param @{int *randomness@}, @{randomness@}
 @end example
 
 @noindent
@@ -4190,7 +4190,7 @@ void yyerror (const char *msg);                 /* Yacc parsers.  */
 void yyerror (YYLTYPE *locp, const char *msg);  /* GLR parsers.   */
 @end example
 
-If @samp{%parse-param "int *nastiness"  "nastiness"} is used, then:
+If @samp{%parse-param @{int *nastiness@}, @{nastiness@}} is used, then:
 
 @example
 void yyerror (int *randomness, const char *msg);  /* Yacc parsers.  */
@@ -4207,10 +4207,10 @@ convention of @code{yylex} @emph{and} the calling convention of
 %locations
 /* Pure yylex.  */
 %pure-parser
-%lex-param   "int *nastiness"  "nastiness"
+%lex-param   @{int *nastiness@},  @{nastiness@}
 /* Pure yyparse.  */
-%parse-param "int *nastiness"  "nastiness"
-%parse-param "int *randomness" "randomness"
+%parse-param @{int *nastiness@},  @{nastiness@}
+%parse-param @{int *randomness@}, @{randomness@}
 @end example
 
 @noindent
@@ -6498,7 +6498,7 @@ Bison declaration to assign left associativity to token(s).
 @xref{Precedence Decl, ,Operator Precedence}.
 @end deffn
 
-@deffn {Directive} %lex-param "@var{argument-declaration}" "@var{argument-name}"
+@deffn {Directive} %lex-param @{@var{argument-declaration}@}. @{@var{argument-name}"@}
 Bison declaration to specifying an additional parameter that
 @code{yylex} should accept.  @xref{Pure Calling,, Calling Conventions
 for Pure Parsers}.
@@ -6530,7 +6530,7 @@ Bison declaration to set the name of the parser file.  @xref{Decl
 Summary}.
 @end deffn
 
-@deffn {Directive} %parse-param "@var{argument-declaration}" "@var{argument-name}"
+@deffn {Directive} %parse-param @{@var{argument-declaration}@}, @{@var{argument-name}@}
 Bison declaration to specifying an additional parameter that
 @code{yyparse} should accept.  @xref{Parser Function,, The Parser
 Function @code{yyparse}}.
index ab24546e1dcde2e6d2b50a1b295c39cd6a38b1d0..1952b06a8db4ae7d3d4d2a07f1c7ecfabdfd53e6 100644 (file)
@@ -360,16 +360,16 @@ union yyalloc
 /* YYFINAL -- State number of the termination state. */
 #define YYFINAL  3
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   125
+#define YYLAST   152
 
 /* YYNTOKENS -- Number of terminals. */
 #define YYNTOKENS  47
 /* YYNNTS -- Number of nonterminals. */
-#define YYNNTS  28
+#define YYNNTS  29
 /* YYNRULES -- Number of rules. */
-#define YYNRULES  76
+#define YYNRULES  77
 /* YYNRULES -- Number of states. */
-#define YYNSTATES  115
+#define YYNSTATES  116
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
@@ -427,18 +427,18 @@ static const unsigned char yyprhs[] =
      111,   113,   115,   116,   118,   120,   123,   125,   127,   130,
      133,   137,   139,   142,   144,   147,   149,   152,   155,   156,
      162,   164,   168,   169,   172,   175,   179,   183,   187,   189,
-     191,   193,   195,   197,   198,   201,   202
+     191,   193,   195,   197,   199,   200,   203,   204
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS. */
 static const yysigned_char yyrhs[] =
 {
-      48,     0,    -1,    49,    43,    63,    73,    -1,    -1,    49,
-      50,    74,    -1,    51,    -1,    44,    -1,    17,    -1,    18,
+      48,     0,    -1,    49,    43,    63,    74,    -1,    -1,    49,
+      50,    75,    -1,    51,    -1,    44,    -1,    17,    -1,    18,
       72,    72,    -1,    19,    -1,    20,    -1,    21,     4,    -1,
-      22,    37,    72,    -1,    23,    -1,    24,    72,    40,    72,
+      22,    37,    72,    -1,    23,    -1,    24,    73,    40,    73,
       -1,    25,    -1,    26,    37,    72,    -1,    27,    -1,    28,
-      37,    72,    -1,    29,    72,    40,    72,    -1,    30,    -1,
+      37,    72,    -1,    29,    73,    40,    73,    -1,    30,    -1,
       31,    72,    -1,    33,    -1,    34,    -1,    35,    -1,    57,
       -1,    54,    -1,    32,    69,    -1,    10,    46,    -1,    -1,
        8,    52,    46,    60,    -1,    -1,     9,    53,    46,    60,
@@ -452,21 +452,21 @@ static const yysigned_char yyrhs[] =
       38,    -1,    68,    -1,    67,    41,    68,    -1,    -1,    68,
       69,    -1,    68,    70,    -1,    68,    14,    69,    -1,    68,
       15,     4,    -1,    68,    16,    36,    -1,    42,    -1,    71,
-      -1,    46,    -1,     3,    -1,     3,    -1,    -1,    43,    45,
-      -1,    -1,    38,    -1
+      -1,    46,    -1,     3,    -1,     3,    -1,    46,    -1,    -1,
+      43,    45,    -1,    -1,    38,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const unsigned short yyrline[] =
 {
        0,   170,   170,   182,   184,   187,   189,   190,   191,   192,
-     193,   194,   195,   196,   197,   199,   200,   201,   202,   203,
-     205,   206,   207,   208,   209,   212,   214,   215,   219,   226,
-     225,   236,   235,   248,   247,   253,   253,   258,   267,   282,
-     284,   285,   288,   290,   295,   297,   301,   306,   311,   317,
-     323,   333,   336,   345,   347,   353,   355,   360,   367,   366,
-     371,   373,   376,   379,   381,   383,   385,   387,   391,   393,
-     396,   402,   411,   419,   421,   428,   430
+     193,   194,   195,   196,   197,   202,   203,   204,   205,   206,
+     211,   212,   213,   214,   215,   218,   220,   221,   225,   232,
+     231,   242,   241,   254,   253,   259,   259,   264,   273,   288,
+     290,   291,   294,   296,   301,   303,   307,   312,   317,   323,
+     329,   339,   342,   351,   353,   359,   361,   366,   373,   372,
+     377,   379,   382,   385,   387,   389,   391,   393,   397,   399,
+     402,   408,   417,   426,   434,   436,   443,   445
 };
 #endif
 
@@ -491,7 +491,7 @@ static const char *const yytname[] =
   "precedence_declarator", "type.opt", "symbols.1", "symbol_def", 
   "symbol_defs.1", "grammar", "rules_or_grammar_declaration", "rules", 
   "@5", "rhses.1", "rhs", "symbol", "action", "string_as_id", 
-  "string_content", "epilogue.opt", "semi_colon.opt", 0
+  "string_content", "code_content", "epilogue.opt", "semi_colon.opt", 0
 };
 #endif
 
@@ -518,7 +518,7 @@ static const unsigned char yyr1[] =
       58,    58,    59,    59,    60,    60,    61,    61,    61,    61,
       61,    62,    62,    63,    63,    64,    64,    64,    66,    65,
       67,    67,    68,    68,    68,    68,    68,    68,    69,    69,
-      70,    71,    72,    73,    73,    74,    74
+      70,    71,    72,    73,    74,    74,    75,    75
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -531,7 +531,7 @@ static const unsigned char yyr2[] =
        1,     1,     0,     1,     1,     2,     1,     1,     2,     2,
        3,     1,     2,     1,     2,     1,     2,     2,     0,     5,
        1,     3,     0,     2,     2,     3,     3,     3,     1,     1,
-       1,     1,     1,     0,     2,     0,     1
+       1,     1,     1,     1,     0,     2,     0,     1
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -542,89 +542,95 @@ static const unsigned char yydefact[] =
        3,     0,     0,     1,    35,    33,     0,    29,    31,     0,
       39,    40,    41,     7,     0,     9,    10,     0,     0,    13,
        0,    15,     0,    17,     0,     0,    20,     0,     0,    22,
-      23,    24,     0,     6,    75,     5,    26,    25,    42,     0,
-       0,     0,     0,     0,    28,    72,     0,    11,     0,     0,
-       0,     0,     0,    21,    71,    68,    27,    69,     0,     0,
-       0,     0,    53,    55,    76,     4,    43,     0,    46,    47,
-      51,    36,    34,    37,    44,     0,     0,     8,    12,     0,
-      16,    18,     0,    57,    58,    56,     0,    54,     2,    38,
-      48,    49,    52,    45,    30,    32,    14,    19,    62,    74,
-      50,     0,    60,    59,    62,     0,     0,     0,    70,    63,
-      64,    61,    65,    66,    67
+      23,    24,     0,     6,    76,     5,    26,    25,    42,     0,
+       0,     0,     0,     0,    28,    72,     0,    11,     0,    73,
+       0,     0,     0,     0,    21,    71,    68,    27,    69,     0,
+       0,     0,     0,    53,    55,    77,     4,    43,     0,    46,
+      47,    51,    36,    34,    37,    44,     0,     0,     8,    12,
+       0,    16,    18,     0,    57,    58,    56,     0,    54,     2,
+      38,    48,    49,    52,    45,    30,    32,    14,    19,    62,
+      75,    50,     0,    60,    59,    62,     0,     0,     0,    70,
+      63,    64,    61,    65,    66,    67
 };
 
 /* YYDEFGOTO[NTERM-NUM]. */
 static const yysigned_char yydefgoto[] =
 {
-      -1,     1,     2,    34,    60,    42,    43,    36,    40,    39,
-      37,    38,    67,    73,    70,    71,    61,    62,    63,    98,
-     101,   102,    74,   110,    57,    46,    88,    65
+      -1,     1,     2,    34,    61,    42,    43,    36,    40,    39,
+      37,    38,    68,    74,    71,    72,    62,    63,    64,    99,
+     102,   103,    75,   111,    58,    46,    50,    89,    66
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -67
+#define YYPACT_NINF -66
 static const yysigned_char yypact[] =
 {
-     -67,     7,    81,   -67,   -67,   -67,   -13,   -67,   -67,   -16,
-     -67,   -67,   -67,   -67,    32,   -67,   -67,    36,    20,   -67,
-      32,   -67,    21,   -67,    22,    32,   -67,    32,    -1,   -67,
-     -67,   -67,    43,   -67,    24,   -67,   -67,   -67,    28,   -14,
-     -14,    -1,    25,    26,   -67,   -67,    32,   -67,    32,    30,
-      32,    32,    33,   -67,   -67,   -67,   -67,   -67,    38,    29,
-      40,     4,   -67,   -67,   -67,   -67,   -67,    -1,   -67,    16,
-     -67,   -14,   -14,    -1,   -67,    -1,    -1,   -67,   -67,    32,
-     -67,   -67,    32,   -67,   -67,   -67,    34,   -67,   -67,    -1,
-      77,   -67,   -67,   -67,    -1,    -1,   -67,   -67,   -67,   -67,
-     -67,   -20,    23,   -67,   -67,    -1,    78,    45,   -67,   -67,
-     -67,    23,   -67,   -67,   -67
+     -66,     6,   108,   -66,   -66,   -66,   -16,   -66,   -66,   -21,
+     -66,   -66,   -66,   -66,    19,   -66,   -66,    32,     5,   -66,
+       3,   -66,    10,   -66,    11,     3,   -66,    19,     1,   -66,
+     -66,   -66,    80,   -66,    12,   -66,   -66,   -66,    16,   -19,
+     -19,     1,     7,     8,   -66,   -66,    19,   -66,    19,   -66,
+      18,    19,    19,    20,   -66,   -66,   -66,   -66,   -66,    13,
+      24,    17,     2,   -66,   -66,   -66,   -66,   -66,     1,   -66,
+      29,   -66,   -19,   -19,     1,   -66,     1,     1,   -66,   -66,
+       3,   -66,   -66,     3,   -66,   -66,   -66,    21,   -66,   -66,
+       1,    61,   -66,   -66,   -66,     1,     1,   -66,   -66,   -66,
+     -66,   -66,   -17,    15,   -66,   -66,     1,    65,    34,   -66,
+     -66,   -66,    15,   -66,   -66,   -66
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yysigned_char yypgoto[] =
 {
-     -67,   -67,   -67,   -67,    82,   -67,   -67,   -67,   -67,   -67,
-     -67,   -67,   -67,   -42,   -29,    55,   -67,    35,   -67,   -67,
-     -67,    -7,   -28,   -67,   -66,   -19,   -67,   -67
+     -66,   -66,   -66,   -66,    63,   -66,   -66,   -66,   -66,   -66,
+     -66,   -66,   -66,   -49,   -34,    31,   -66,    14,   -66,   -66,
+     -66,   -33,   -28,   -66,   -65,   -11,   -24,   -66,   -66
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
    positive, shift that token.  If negative, reduce the rule which
    number is the opposite.  If zero, do what YYDEFACT says.
    If YYTABLE_NINF, parse error.  */
-#define YYTABLE_NINF -74
+#define YYTABLE_NINF -75
 static const yysigned_char yytable[] =
 {
-      56,    49,    54,    91,   -73,    58,    52,     3,    53,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,   103,    54,
-      90,   104,    68,    41,   100,    89,    54,    77,    69,    78,
-      44,    80,    81,    94,    95,    45,    28,   105,   106,   107,
-      47,    55,    92,    92,    58,    93,    59,    86,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    48,    50,    51,
-      96,    93,    64,    97,    66,    55,    93,    93,    84,   108,
-      79,    75,    76,    82,   109,    28,    83,   112,    85,    99,
-      54,   114,   113,   109,    35,    59,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    72,    87,   111,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,     0,     0,     0,
-       0,     0,     0,     0,    32,    33
+      57,    53,   -74,    59,    55,    92,     3,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    54,    69,    55,    90,
+      41,   104,    45,    70,   105,    44,   101,    95,    96,   106,
+     107,   108,    55,    91,    28,    78,    47,    79,    93,    93,
+      81,    82,    48,    56,    60,    87,    94,    51,    52,    49,
+      65,    84,    67,    76,    77,    86,    97,    56,    80,    98,
+      83,   109,    94,    85,    55,    35,   100,    94,    94,   114,
+     115,    73,   112,     0,     0,   110,    88,     0,   113,     0,
+       0,    59,     0,     0,   110,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    28,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    60,     0,     0,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,     0,     0,     0,     0,     0,     0,
+       0,    32,    33
 };
 
 static const yysigned_char yycheck[] =
 {
-      28,    20,     3,    69,     0,     1,    25,     0,    27,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    38,     3,
-       4,    41,    36,    36,    90,    67,     3,    46,    42,    48,
-      46,    50,    51,    75,    76,     3,    32,    14,    15,    16,
-       4,    42,    71,    72,     1,    73,    42,    43,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    37,    37,    37,
-      79,    89,    38,    82,    36,    42,    94,    95,    39,    46,
-      40,    46,    46,    40,   102,    32,    38,   105,    38,    45,
-       3,    36,     4,   111,     2,    42,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    40,    61,   104,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    43,    44
+      28,    25,     0,     1,     3,    70,     0,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    27,    36,     3,    68,
+      36,    38,     3,    42,    41,    46,    91,    76,    77,    14,
+      15,    16,     3,     4,    32,    46,     4,    48,    72,    73,
+      51,    52,    37,    42,    42,    43,    74,    37,    37,    46,
+      38,    38,    36,    46,    46,    38,    80,    42,    40,    83,
+      40,    46,    90,    39,     3,     2,    45,    95,    96,     4,
+      36,    40,   105,    -1,    -1,   103,    62,    -1,   106,    -1,
+      -1,     1,    -1,    -1,   112,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    32,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    42,    -1,    -1,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    43,    44
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -635,14 +641,14 @@ static const unsigned char yystos[] =
       11,    12,    13,    17,    18,    19,    20,    21,    22,    23,
       24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
       34,    35,    43,    44,    50,    51,    54,    57,    58,    56,
-      55,    36,    52,    53,    46,     3,    72,     4,    37,    72,
-      37,    37,    72,    72,     3,    42,    69,    71,     1,    42,
-      51,    63,    64,    65,    38,    74,    36,    59,    36,    42,
-      61,    62,    62,    60,    69,    46,    46,    72,    72,    40,
-      72,    72,    40,    38,    39,    38,    43,    64,    73,    60,
-       4,    71,    61,    69,    60,    60,    72,    72,    66,    45,
-      71,    67,    68,    38,    41,    14,    15,    16,    46,    69,
-      70,    68,    69,     4,    36
+      55,    36,    52,    53,    46,     3,    72,     4,    37,    46,
+      73,    37,    37,    73,    72,     3,    42,    69,    71,     1,
+      42,    51,    63,    64,    65,    38,    75,    36,    59,    36,
+      42,    61,    62,    62,    60,    69,    46,    46,    72,    72,
+      40,    72,    72,    40,    38,    39,    38,    43,    64,    74,
+      60,     4,    71,    61,    69,    60,    60,    73,    73,    66,
+      45,    71,    67,    68,    38,    41,    14,    15,    16,    46,
+      69,    70,    68,    69,     4,    36
 };
 
 #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
@@ -1256,68 +1262,74 @@ yyreduce:
 
   case 14:
 #line 198 "parse-gram.y"
-    { muscle_pair_list_grow ("lex_param", yyvsp[-2].string, yyvsp[0].string); }
+    {
+                            muscle_pair_list_grow ("lex_param", yyvsp[-2].string, yyvsp[0].string);
+                            scanner_last_string_free ();
+                          }
     break;
 
   case 15:
-#line 199 "parse-gram.y"
+#line 202 "parse-gram.y"
     { locations_flag = 1; }
     break;
 
   case 16:
-#line 200 "parse-gram.y"
+#line 203 "parse-gram.y"
     { spec_name_prefix = yyvsp[0].string; }
     break;
 
   case 17:
-#line 201 "parse-gram.y"
+#line 204 "parse-gram.y"
     { no_lines_flag = 1; }
     break;
 
   case 18:
-#line 202 "parse-gram.y"
+#line 205 "parse-gram.y"
     { spec_outfile = yyvsp[0].string; }
     break;
 
   case 19:
-#line 204 "parse-gram.y"
-    { muscle_pair_list_grow ("parse_param", yyvsp[-2].string, yyvsp[0].string); }
+#line 207 "parse-gram.y"
+    {
+                            muscle_pair_list_grow ("parse_param", yyvsp[-2].string, yyvsp[0].string);
+                            scanner_last_string_free ();
+                          }
     break;
 
   case 20:
-#line 205 "parse-gram.y"
+#line 211 "parse-gram.y"
     { pure_parser = 1; }
     break;
 
   case 21:
-#line 206 "parse-gram.y"
+#line 212 "parse-gram.y"
     { skeleton = yyvsp[0].string; }
     break;
 
   case 22:
-#line 207 "parse-gram.y"
+#line 213 "parse-gram.y"
     { token_table_flag = 1; }
     break;
 
   case 23:
-#line 208 "parse-gram.y"
+#line 214 "parse-gram.y"
     { report_flag = 1; }
     break;
 
   case 24:
-#line 209 "parse-gram.y"
+#line 215 "parse-gram.y"
     { yacc_flag = 1; }
     break;
 
   case 27:
-#line 216 "parse-gram.y"
+#line 222 "parse-gram.y"
     {
       grammar_start_symbol_set (yyvsp[0].symbol, yylsp[0]);
     }
     break;
 
   case 28:
-#line 220 "parse-gram.y"
+#line 226 "parse-gram.y"
     {
       typed = 1;
       MUSCLE_INSERT_INT ("stype_line", yylsp[0].first_line);
@@ -1326,12 +1338,12 @@ yyreduce:
     break;
 
   case 29:
-#line 226 "parse-gram.y"
+#line 232 "parse-gram.y"
     { current_braced_code = destructor_braced_code; }
     break;
 
   case 30:
-#line 228 "parse-gram.y"
+#line 234 "parse-gram.y"
     {
       symbol_list_t *list;
       for (list = yyvsp[0].list; list; list = list->next)
@@ -1342,12 +1354,12 @@ yyreduce:
     break;
 
   case 31:
-#line 236 "parse-gram.y"
+#line 242 "parse-gram.y"
     { current_braced_code = printer_braced_code; }
     break;
 
   case 32:
-#line 238 "parse-gram.y"
+#line 244 "parse-gram.y"
     {
       symbol_list_t *list;
       for (list = yyvsp[0].list; list; list = list->next)
@@ -1358,12 +1370,12 @@ yyreduce:
     break;
 
   case 33:
-#line 248 "parse-gram.y"
+#line 254 "parse-gram.y"
     { current_class = nterm_sym; }
     break;
 
   case 34:
-#line 249 "parse-gram.y"
+#line 255 "parse-gram.y"
     {
       current_class = unknown_sym;
       current_type = NULL;
@@ -1371,12 +1383,12 @@ yyreduce:
     break;
 
   case 35:
-#line 253 "parse-gram.y"
+#line 259 "parse-gram.y"
     { current_class = token_sym; }
     break;
 
   case 36:
-#line 254 "parse-gram.y"
+#line 260 "parse-gram.y"
     {
       current_class = unknown_sym;
       current_type = NULL;
@@ -1384,7 +1396,7 @@ yyreduce:
     break;
 
   case 37:
-#line 259 "parse-gram.y"
+#line 265 "parse-gram.y"
     {
       symbol_list_t *list;
       for (list = yyvsp[0].list; list; list = list->next)
@@ -1394,7 +1406,7 @@ yyreduce:
     break;
 
   case 38:
-#line 269 "parse-gram.y"
+#line 275 "parse-gram.y"
     {
       symbol_list_t *list;
       ++current_prec;
@@ -1409,49 +1421,49 @@ yyreduce:
     break;
 
   case 39:
-#line 283 "parse-gram.y"
+#line 289 "parse-gram.y"
     { yyval.assoc = left_assoc; }
     break;
 
   case 40:
-#line 284 "parse-gram.y"
+#line 290 "parse-gram.y"
     { yyval.assoc = right_assoc; }
     break;
 
   case 41:
-#line 285 "parse-gram.y"
+#line 291 "parse-gram.y"
     { yyval.assoc = non_assoc; }
     break;
 
   case 42:
-#line 289 "parse-gram.y"
+#line 295 "parse-gram.y"
     { current_type = NULL; }
     break;
 
   case 43:
-#line 290 "parse-gram.y"
+#line 296 "parse-gram.y"
     { current_type = yyvsp[0].struniq; }
     break;
 
   case 44:
-#line 296 "parse-gram.y"
+#line 302 "parse-gram.y"
     { yyval.list = symbol_list_new (yyvsp[0].symbol, yylsp[0]); }
     break;
 
   case 45:
-#line 297 "parse-gram.y"
+#line 303 "parse-gram.y"
     { yyval.list = symbol_list_prepend (yyvsp[-1].list, yyvsp[0].symbol, yylsp[0]); }
     break;
 
   case 46:
-#line 303 "parse-gram.y"
+#line 309 "parse-gram.y"
     {
        current_type = yyvsp[0].struniq;
      }
     break;
 
   case 47:
-#line 307 "parse-gram.y"
+#line 313 "parse-gram.y"
     {
        symbol_class_set (yyvsp[0].symbol, current_class, yylsp[0]);
        symbol_type_set (yyvsp[0].symbol, current_type, yylsp[0]);
@@ -1459,7 +1471,7 @@ yyreduce:
     break;
 
   case 48:
-#line 312 "parse-gram.y"
+#line 318 "parse-gram.y"
     {
       symbol_class_set (yyvsp[-1].symbol, current_class, yylsp[-1]);
       symbol_type_set (yyvsp[-1].symbol, current_type, yylsp[-1]);
@@ -1468,7 +1480,7 @@ yyreduce:
     break;
 
   case 49:
-#line 318 "parse-gram.y"
+#line 324 "parse-gram.y"
     {
       symbol_class_set (yyvsp[-1].symbol, current_class, yylsp[-1]);
       symbol_type_set (yyvsp[-1].symbol, current_type, yylsp[-1]);
@@ -1477,7 +1489,7 @@ yyreduce:
     break;
 
   case 50:
-#line 324 "parse-gram.y"
+#line 330 "parse-gram.y"
     {
       symbol_class_set (yyvsp[-2].symbol, current_class, yylsp[-2]);
       symbol_type_set (yyvsp[-2].symbol, current_type, yylsp[-2]);
@@ -1487,17 +1499,17 @@ yyreduce:
     break;
 
   case 51:
-#line 335 "parse-gram.y"
+#line 341 "parse-gram.y"
     {;}
     break;
 
   case 52:
-#line 337 "parse-gram.y"
+#line 343 "parse-gram.y"
     {;}
     break;
 
   case 56:
-#line 356 "parse-gram.y"
+#line 362 "parse-gram.y"
     {
       if (yacc_flag)
        complain_at (yyloc, _("POSIX forbids declarations in the grammar"));
@@ -1505,79 +1517,79 @@ yyreduce:
     break;
 
   case 57:
-#line 361 "parse-gram.y"
+#line 367 "parse-gram.y"
     {
       yyerrok;
     }
     break;
 
   case 58:
-#line 367 "parse-gram.y"
+#line 373 "parse-gram.y"
     { current_lhs = yyvsp[-1].symbol; current_lhs_location = yylsp[-1]; }
     break;
 
   case 59:
-#line 368 "parse-gram.y"
+#line 374 "parse-gram.y"
     {;}
     break;
 
   case 60:
-#line 372 "parse-gram.y"
+#line 378 "parse-gram.y"
     { grammar_rule_end (yylsp[0]); }
     break;
 
   case 61:
-#line 373 "parse-gram.y"
+#line 379 "parse-gram.y"
     { grammar_rule_end (yylsp[0]); }
     break;
 
   case 62:
-#line 378 "parse-gram.y"
+#line 384 "parse-gram.y"
     { grammar_rule_begin (current_lhs, current_lhs_location); }
     break;
 
   case 63:
-#line 380 "parse-gram.y"
+#line 386 "parse-gram.y"
     { grammar_current_rule_symbol_append (yyvsp[0].symbol, yylsp[0]); }
     break;
 
   case 64:
-#line 382 "parse-gram.y"
+#line 388 "parse-gram.y"
     { grammar_current_rule_action_append (yyvsp[0].string, yylsp[0]); }
     break;
 
   case 65:
-#line 384 "parse-gram.y"
+#line 390 "parse-gram.y"
     { grammar_current_rule_prec_set (yyvsp[0].symbol, yylsp[0]); }
     break;
 
   case 66:
-#line 386 "parse-gram.y"
+#line 392 "parse-gram.y"
     { grammar_current_rule_dprec_set (yyvsp[0].integer, yylsp[0]); }
     break;
 
   case 67:
-#line 388 "parse-gram.y"
+#line 394 "parse-gram.y"
     { grammar_current_rule_merge_set (yyvsp[0].struniq, yylsp[0]); }
     break;
 
   case 68:
-#line 392 "parse-gram.y"
+#line 398 "parse-gram.y"
     { yyval.symbol = yyvsp[0].symbol; }
     break;
 
   case 69:
-#line 393 "parse-gram.y"
+#line 399 "parse-gram.y"
     { yyval.symbol = yyvsp[0].symbol; }
     break;
 
   case 70:
-#line 398 "parse-gram.y"
+#line 404 "parse-gram.y"
     { yyval.string = yyvsp[0].string; }
     break;
 
   case 71:
-#line 404 "parse-gram.y"
+#line 410 "parse-gram.y"
     {
       yyval.symbol = symbol_get (yyvsp[0].string, yylsp[0]);
       symbol_class_set (yyval.symbol, token_sym, yylsp[0]);
@@ -1585,15 +1597,23 @@ yyreduce:
     break;
 
   case 72:
-#line 413 "parse-gram.y"
+#line 419 "parse-gram.y"
+    {
+      yyval.string = yyvsp[0].string + 1;
+      yyval.string[strlen (yyval.string) - 1] = '\0';
+    }
+    break;
+
+  case 73:
+#line 428 "parse-gram.y"
     {
       yyval.string = yyvsp[0].string + 1;
       yyval.string[strlen (yyval.string) - 1] = '\0';
     }
     break;
 
-  case 74:
-#line 422 "parse-gram.y"
+  case 75:
+#line 437 "parse-gram.y"
     {
       epilogue_augment (yyvsp[0].string, yylsp[0]);
       scanner_last_string_free ();
@@ -1604,7 +1624,7 @@ yyreduce:
     }
 
 /* Line 950 of /usr/local/share/bison/yacc.c.  */
-#line 1607 "parse-gram.c"
+#line 1627 "parse-gram.c"
 \f
   yyvsp -= yylen;
   yyssp -= yylen;
@@ -1823,7 +1843,7 @@ yyreturn:
 }
 
 
-#line 432 "parse-gram.y"
+#line 447 "parse-gram.y"
 
 /*------------------------------------------------------------------.
 | When debugging the parser, display tokens' locations and values.  |
index c10c82ac61043ecfe68f0c6ae0b37f438867c2bb..e881e3f0ca892eb5bcb00b8942878e12a1779a17 100644 (file)
@@ -158,7 +158,7 @@ braced_code_t current_braced_code = action_braced_code;
 
 
 %type <string> STRING string_content
-               BRACED_CODE action
+               BRACED_CODE code_content action
                PROLOGUE EPILOGUE
 %type <struniq> TYPE
 %type <integer> INT
@@ -194,14 +194,20 @@ declaration:
 | "%expect" INT                            { expected_conflicts = $2; }
 | "%file-prefix" "=" string_content        { spec_file_prefix = $3; }
 | "%glr-parser"                           { glr_parser = 1; }
-| "%lex-param" string_content "," string_content
-                           { muscle_pair_list_grow ("lex_param", $2, $4); }
+| "%lex-param" code_content "," code_content
+                           {
+                            muscle_pair_list_grow ("lex_param", $2, $4);
+                            scanner_last_string_free ();
+                          }
 | "%locations"                             { locations_flag = 1; }
 | "%name-prefix" "=" string_content        { spec_name_prefix = $3; }
 | "%no-lines"                              { no_lines_flag = 1; }
 | "%output" "=" string_content             { spec_outfile = $3; }
-| "%parse-param" string_content "," string_content
-                           { muscle_pair_list_grow ("parse_param", $2, $4); }
+| "%parse-param" code_content "," code_content
+                           {
+                            muscle_pair_list_grow ("parse_param", $2, $4);
+                            scanner_last_string_free ();
+                          }
 | "%pure-parser"                           { pure_parser = 1; }
 | "%skeleton" string_content               { skeleton = $2; }
 | "%token-table"                           { token_table_flag = 1; }
@@ -416,6 +422,15 @@ string_content:
     };
 
 
+/* A BRACED_CODE used for its contents.  Strip the braces. */
+code_content:
+  BRACED_CODE
+    {
+      $$ = $1 + 1;
+      $$[strlen ($$) - 1] = '\0';
+    };
+
+
 epilogue.opt:
   /* Nothing.  */
 | "%%" EPILOGUE
index f558e27e7283b8edf7c9ac66895c1441ee2ad964..c3873e57c55c10ee687231a310eb4b685e875ddf 100644 (file)
@@ -562,7 +562,7 @@ AT_CHECK_CALC_LALR([%error-verbose %debug %locations %defines %name-prefix="calc
 
 AT_CHECK_CALC_LALR([%pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc])
 
-AT_CHECK_CALC_LALR([%pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc %parse-param "value_t *result", "result" %parse-param "int *count", "count"])
+AT_CHECK_CALC_LALR([%pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc %parse-param {value_t *result}, {result} %parse-param {int *count}, {count}])
 
 
 # ----------------------- #
@@ -597,4 +597,4 @@ AT_CHECK_CALC_GLR([%error-verbose %debug %locations %defines %name-prefix="calc"
 
 AT_CHECK_CALC_GLR([%pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc])
 
-AT_CHECK_CALC_GLR([%pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc %parse-param "value_t *result", "result" %parse-param "int *count", "count"])
+AT_CHECK_CALC_GLR([%pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc %parse-param {value_t *result}, {result} %parse-param {int *count}, {count}])