Initial check-in introducing experimental GLR parsing. See entry in
authorPaul Hilfinger <Hilfinger@CS.Berkeley.EDU>
Fri, 28 Jun 2002 02:26:44 +0000 (02:26 +0000)
committerPaul Hilfinger <Hilfinger@CS.Berkeley.EDU>
Fri, 28 Jun 2002 02:26:44 +0000 (02:26 +0000)
ChangeLog dated 2002-06-27 from Paul Hilfinger for details.

31 files changed:
ChangeLog
NEWS
data/Makefile.am
doc/bison.texinfo
po/de.po
po/es.po
po/et.po
po/fr.po
po/hr.po
po/it.po
po/ja.po
po/nl.po
po/ru.po
po/sv.po
po/tr.po
src/conflicts.c
src/conflicts.h
src/gram.c
src/gram.h
src/output.c
src/parse-gram.c
src/parse-gram.h
src/parse-gram.y
src/reader.c
src/reader.h
src/scan-gram.c
src/scan-gram.l
src/symlist.c
src/symlist.h
tests/Makefile.am
tests/testsuite.at

index d3536bd..5e6dde7 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,123 @@
-2002-06-27  Akim Demaille  <akim@epita.fr>
+2002-06-27  Paul Hilfinger  <Hilfinger@CS.Berkeley.EDU>
+
+       Accumulated changelog for new GLR parsing features.
+
+        * src/conflicts.c (count_total_conflicts): Change name to 
+       conflicts_total_count.
+       * src/conflicts.h: Ditto.
+       * src/output.c (token_actions): Use the new name.
+       (output_conflicts): Change conflp => conflict_list_heads, and
+       confl => conflict_list for better readability.
+       * data/glr.c: Use the new names.
+       * NEWS: Add self to GLR announcement.
+       
+       * src/reader.c (free_merger_functions): Cleanup: XFREE->free.
+
+       * doc/bison.texinfo (GLR Parsers): Make corrections suggested by
+       Akim Demaille.
+
+       * data/bison.glr: Change name to glr.c
+       * data/glr.c: Renamed from bison.glr.
+       * data/Makefile.am: Add glr.c
+       
+       * src/getargs.c: 
+       
+       * src/symlist.h:  Add dprec and merger fields to symbol_list_s.
+       * src/symlist.c (symbol_list_new): Initialize dprec and merger fields.
+       
+       Originally 2002-06-16  Paul Hilfinger  <Hilfinger@CS.Berkeley.EDU>
+
+       * data/bison.glr: Be sure to restore the
+       current #line when returning to the skeleton contents after having
+       exposed the input file's #line.
+
+       Originally 2002-06-13  Paul Hilfinger  <Hilfinger@CS.Berkeley.EDU>
+
+       * data/bison.glr: Bring up to date with changes to bison.simple.
+
+       Originally 2002-06-03  Paul Hilfinger  <Hilfinger@CS.Berkeley.EDU>
+
+       * data/bison.glr: Correct definitions that use b4_prefix.
+       Various reformatting.
+       (GLRStack): Make yychar (in YYPURE case) and yytokenp as part of stack.
+       (yyreportParseError, yyrecoverParseError, yyprocessOneStack): remove
+       yytokenp argument; now part of stack.
+       (yychar): Define to behave as documented.
+       (yyclearin): Ditto.
+       
+       Originally 2002-05-14  Paul Hilfinger  <Hilfinger@CS.Berkeley.EDU>
+
+       * src/reader.h: Add declaration for free_merger_functions.
+
+       * src/reader.c (merge_functions): New variable.
+       (get_merge_function): New function.
+       (free_merger_functions): New function.
+       (readgram): Check for %prec that is not followed by a symbol.
+       Handle %dprec and %merge declarations.
+       (packgram): Initialize dprec and merger fields in rules array.
+
+       * src/output.c (conflict_tos, conflrow, conflict_table, conflict_list,
+       conflict_list_cnt, conflict_list_free): New variables.
+       (table_grow): Also grow conflict_table.
+       (prepare_rules): Output dprec and merger tables.  
+       (conflict_row): New function.
+       (action_row): Output conflict lists for GLR parser.  Don't use 
+       default reduction in conflicted states for GLR parser so that there
+       are spaces for the conflict lists.
+       (save_row): Also save conflict information.
+       (token_actions): Allocate conflict list.
+       (merger_output): New function.
+       (pack_vector): Pack conflict table, too.
+       (output_conflicts): New function to output yyconflp and yyconfl.
+       (output_check): Allocate conflict_tos.
+       (output_actions): Output conflict tables, also.
+       (output_skeleton): Output b4_mergers definition.
+       (prepare): Output b4_max_rhs_length definition.
+       Use 'bison.glr' as default skeleton for GLR parsers.
+
+       * src/gram.c (glr_parser): New flag.
+       (grammar_free): Call free_merger_functions.
+
+       * src/conflicts.c (count_rr_conflicts): Augment to optionally count
+       all pairs of conflicting reductions, rather than just all tokens
+       causing conflicts.  Needed to size conflict tables.
+       (conflicts_output): Modify call to count_rr_conflicts for new 
+       interface.
+       (conflicts_print): Ditto.
+       (count_total_conflicts): New function.
+
+       * src/reader.h (merger_list): New type.
+       (merge_functions): New variable.
+
+       * src/lex.h (tok_dprec, tok_merge): New token types.
+
+       * src/gram.h (rule_s): Add dprec and merger fields.
+       (glr_parser): New flag.
+
+       * src/conflicts.h (count_total_conflicts): New function.
+
+       * src/options.c (option_table): Add %dprec, %merge, and %glr-parser.
+
+       * doc/bison.texinfo (Generalized LR Parsing): New section.
+       (GLR Parsers): New section.
+       (Language and Grammar): Mention GLR parsing.
+       (Table of Symbols): Add %dprec, %glr-parser, %merge, GLR
+       Correct typo ("tge" -> "the").
+
+       * data/bison.glr: New skeleton for GLR parsing.
+
+       * tests/cxx-gram.at: New tests for GLR parsing.
+
+       * tests/testsuite.at: Include cxx-gram.at.
+
+       * tests/Makefile.am: Add cxx-gram.at.
+       
+       * src/parse-gram.y:
+
+       * src/scan-gram.l: Add %dprec, %glr-parser, %merge.
+
+       * src/parse-gram.y: Grammar for %dprec, %merge, %glr-parser.
+       2002-06-27  Akim Demaille  <akim@epita.fr>
 
        * src/options.h, src/options.c: Remove.
        * src/getargs.c (short_options, long_options): New.
diff --git a/NEWS b/NEWS
index 8eeef04..144d865 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -3,6 +3,14 @@ Bison News
 
 Changes in version 1.49b:
 
+* GLR parsing
+  The declaration
+     %glr-parser
+  causes Bison to produce a Generalized LR (GLR) parser, capable of handling
+  almost any context-free grammar, ambiguous or not.  The new declarations
+  %dprec and %merge on grammar rules allow parse-time resolution of 
+  ambiguities.  Contributed by Paul Hilfinger.
+
 * Output Directory
   When not in Yacc compatibility mode, when the output file was not
   specified, runnning `bison foo/bar.y' created `foo/bar.c'.  It
index 605d591..786d8ab 100644 (file)
@@ -15,7 +15,7 @@
 ## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
 ## 02111-1307  USA
 
-dist_pkgdata_DATA = yacc.c lalr1.cc
+dist_pkgdata_DATA = yacc.c lalr1.cc glr.c
 
 m4sugardir = $(pkgdatadir)/m4sugar
 dist_m4sugar_DATA = m4sugar/m4sugar.m4 m4sugar/version.m4
index 2441d0d..e4eff35 100644 (file)
@@ -282,6 +282,7 @@ The Bison Parser Algorithm
 * Parser States::     The parser is a finite-state-machine with stack.
 * Reduce/Reduce::     When two rules are applicable in the same situation.
 * Mystery Conflicts::  Reduce/reduce conflicts that look unjustified.
+* Generalized LR Parsing::  Parsing arbitrary context-free grammars.
 * Stack Overflow::    What happens when stack gets full.  How to avoid it.
 
 Operator Precedence
@@ -388,6 +389,7 @@ use Bison or Yacc, we suggest you start by reading this chapter carefully.
                         a semantic value (the value of an integer,
                         the name of an identifier, etc.).
 * Semantic Actions::  Each rule can have an action containing C code.
+* GLR Parsers::       Writing parsers for general context-free languages
 * Locations Overview::    Tracking Locations.
 * Bison Parser::      What are Bison's input and output,
                         how is the output used?
@@ -418,8 +420,12 @@ specify the language Algol 60.  Any grammar expressed in BNF is a
 context-free grammar.  The input to Bison is essentially machine-readable
 BNF.
 
-Not all context-free languages can be handled by Bison, only those
-that are LALR(1).  In brief, this means that it must be possible to
+@cindex LALR(1) grammars
+@cindex LR(1) grammars
+There are various important subclasses of context-free grammar.  Although it
+can handle almost all context-free grammars, Bison is optimized for what
+are called LALR(1) grammars.
+In brief, in these grammars, it must be possible to
 tell how to parse any portion of an input string with just a single
 token of look-ahead.  Strictly speaking, that is a description of an
 LR(1) grammar, and LALR(1) involves additional restrictions that are
@@ -427,6 +433,24 @@ hard to explain simply; but it is rare in actual practice to find an
 LR(1) grammar that fails to be LALR(1).  @xref{Mystery Conflicts, ,
 Mysterious Reduce/Reduce Conflicts}, for more information on this.
 
+@cindex GLR parsing
+@cindex generalized LR (GLR) parsing
+@cindex ambiguous grammars
+@cindex non-deterministic parsing
+Parsers for LALR(1) grammars are @dfn{deterministic}, meaning roughly that
+the next grammar rule to apply at any point in the input is uniquely 
+determined by the preceding input and a fixed, finite portion (called
+a @dfn{look-ahead}) of the remaining input.
+A context-free grammar can be @dfn{ambiguous}, meaning that 
+there are multiple ways to apply the grammar rules to get the some inputs.
+Even unambiguous grammars can be @dfn{non-deterministic}, meaning that no
+fixed look-ahead always suffices to determine the next grammar rule to apply.
+With the proper declarations, Bison is also able to parse these more general 
+context-free grammars, using a technique known as GLR parsing (for 
+Generalized LR).  Bison's GLR parsers are able to handle any context-free 
+grammar for which the number of possible parses of any given string 
+is finite.  
+
 @cindex symbols (abstract)
 @cindex token
 @cindex syntactic grouping
@@ -632,6 +656,180 @@ expr: expr '+' expr   @{ $$ = $1 + $3; @}
 The action says how to produce the semantic value of the sum expression
 from the values of the two subexpressions.
 
+@node GLR Parsers
+@section Writing GLR Parsers
+@cindex GLR parsing
+@cindex generalized LR (GLR) parsing
+@findex %glr-parser
+@cindex conflicts
+@cindex shift/reduce conflicts
+
+In some grammars, there will be cases where Bison's standard LALR(1)
+parsing algorithm cannot decide whether to apply a certain grammar rule
+at a given point.  That is, it may not be able to decide (on the basis
+of the input read so far) which of two possible reductions (applications
+of a grammar rule) applies, or whether to apply a reduction or read more
+of the input and apply a reduction later in the input.  These are known
+respectively as @dfn{reduce/reduce} conflicts (@pxref{Reduce/Reduce}),
+and @dfn{shift/reduce} conflicts (@pxref{Shift/Reduce}).
+
+To use a grammar that is not easily modified to be LALR(1), a more
+general parsing algorithm is sometimes necessary.  If you include
+@code{%glr-parser} among the Bison declarations in your file
+(@pxref{Grammar Outline}), the result will be a Generalized LR (GLR)
+parser.  These parsers handle Bison grammars that contain no unresolved
+conflicts (i.e., after applying precedence declarations) identically to
+LALR(1) parsers.  However, when faced with unresolved shift/reduce and
+reduce/reduce conflicts, GLR parsers use the simple expedient of doing
+both, effectively cloning the parser to follow both possibilities.  Each
+of the resulting parsers can again split, so that at any given time,
+there can be any number of possible parses being explored.  The parsers
+proceed in lockstep; that is, all of them consume (shift) a given input
+symbol before any of them proceed to the next.  Each of the cloned
+parsers eventually meets one of two possible fates: either it runs into
+a parsing error, in which case it simply vanishes, or it merges with
+another parser, because the two of them have reduced the input to an
+identical set of symbols.
+
+During the time that there are multiple parsers, semantic actions are
+recorded, but not performed.  When a parser disappears, its recorded
+semantic actions disappear as well, and are never performed.  When a
+reduction makes two parsers identical, causing them to merge, Bison
+records both sets of semantic actions.  Whenever the last two parsers
+merge, reverting to the single-parser case, Bison resolves all the
+outstanding actions either by precedences given to the grammar rules
+involved, or by performing both actions, and then calling a designated
+user-defined function on the resulting values to produce an arbitrary
+merged result.
+
+Let's consider an example, vastly simplified from C++.  
+
+@example
+%@{
+  #define YYSTYPE const char*
+%@}
+
+%token TYPENAME ID
+
+%right '='
+%left '+'
+
+%glr-parser
+
+%%
+
+prog : 
+     | prog stmt   @{ printf ("\n"); @}
+     ;
+
+stmt : expr ';'  %dprec 1
+     | decl      %dprec 2
+     ;
+
+expr : ID              @{ printf ("%s ", $$); @}
+     | TYPENAME '(' expr ')'  
+                       @{ printf ("%s <cast> ", $1); @}
+     | expr '+' expr   @{ printf ("+ "); @}
+     | expr '=' expr   @{ printf ("= "); @}
+     ;
+
+decl : TYPENAME declarator ';' 
+                       @{ printf ("%s <declare> ", $1); @}
+     | TYPENAME declarator '=' expr ';'
+                       @{ printf ("%s <init-declare> ", $1); @}
+     ;
+
+declarator : ID                @{ printf ("\"%s\" ", $1); @}
+     | '(' declarator ')'
+     ;
+@end example
+
+@noindent
+This models a problematic part of the C++ grammar---the ambiguity between
+certain declarations and statements.  For example,
+
+@example
+T (x) = y+z;
+@end example
+
+@noindent
+parses as either an @code{expr} or a @code{stmt}
+(assuming that @samp{T} is recognized as a TYPENAME and @samp{x} as an ID).
+Bison detects this as a reduce/reduce conflict between the rules
+@code{expr : ID} and @code{declarator : ID}, which it cannot resolve at the 
+time it encounters @code{x} in the example above.  The two @code{%dprec} 
+declarations, however, give precedence to interpreting the example as a 
+@code{decl}, which implies that @code{x} is a declarator.
+The parser therefore prints
+
+@example
+"x" y z + T <init-declare> 
+@end example
+
+Consider a different input string for this parser:
+
+@example
+T (x) + y;
+@end example
+
+@noindent
+Here, there is no ambiguity (this cannot be parsed as a declaration).
+However, at the time the Bison parser encounters @code{x}, it does not
+have enough information to resolve the reduce/reduce conflict (again,
+between @code{x} as an @code{expr} or a @code{declarator}).  In this
+case, no precedence declaration is used.  Instead, the parser splits
+into two, one assuming that @code{x} is an @code{expr}, and the other
+assuming @code{x} is a @code{declarator}.  The second of these parsers
+then vanishes when it sees @code{+}, and the parser prints
+
+@example
+x T <cast> y + 
+@end example
+
+Suppose that instead of resolving the ambiguity, you wanted to see all
+the possibilities.  For this purpose, we must @dfn{merge} the semantic
+actions of the two possible parsers, rather than choosing one over the
+other.  To do so, you could change the declaration of @code{stmt} as
+follows:
+
+@example
+stmt : expr ';'  %merge <stmtMerge>
+     | decl      %merge <stmtMerge>
+     ;
+@end example
+
+@noindent
+
+and define the @code{stmtMerge} function as:
+
+@example
+static YYSTYPE stmtMerge (YYSTYPE x0, YYSTYPE x1)
+@{
+  printf ("<OR> ");
+  return "";
+@}
+@end example
+
+@noindent
+with an accompanying forward declaration
+in the C declarations at the beginning of the file:
+
+@example
+%@{
+  #define YYSTYPE const char*
+  static YYSTYPE stmtMerge (YYSTYPE x0, YYSTYPE x1);
+%@}
+@end example
+
+@noindent
+With these declarations, the resulting parser will parse the first example
+as both an @code{expr} and a @code{decl}, and print
+
+@example
+"x" y z + T <init-declare> x T <cast> y z + = <OR> 
+@end example
+
+
 @node Locations Overview
 @section Locations
 @cindex location
@@ -2913,7 +3111,7 @@ the location of the grouping (the result of the computation). The second one
 is an array holding locations of all right hand side elements of the rule
 being matched. The last one is the size of the right hand side rule.
 
-By default, it is defined this way:
+By default, it is defined this way for simple LALR(1) parsers:
 
 @example
 @group
@@ -2925,6 +3123,19 @@ By default, it is defined this way:
 @end group
 @end example
 
+@noindent
+and like this for GLR parsers:
+
+@example
+@group
+#define YYLLOC_DEFAULT(Current, Rhs, N)          \
+  Current.first_line   = YYRHSLOC(Rhs,1).first_line;      \
+  Current.first_column = YYRHSLOC(Rhs,1).first_column;    \
+  Current.last_line    = YYRHSLOC(Rhs,N).last_line;       \
+  Current.last_column  = YYRHSLOC(Rhs,N).last_column;
+@end group
+@end example
+
 When defining @code{YYLLOC_DEFAULT}, you should consider that:
 
 @itemize @bullet
@@ -3890,6 +4101,7 @@ Return immediately from @code{yyparse}, indicating success.
 @findex YYBACKUP
 Unshift a token.  This macro is allowed only for rules that reduce
 a single value, and only when there is no look-ahead token.
+It is also disallowed in GLR parsers.
 It installs a look-ahead token with token type @var{token} and
 semantic value @var{value}; then it discards the value that was
 going to be reduced by this rule.
@@ -4030,6 +4242,7 @@ This kind of parser is known in the literature as a bottom-up parser.
 * Parser States::     The parser is a finite-state-machine with stack.
 * Reduce/Reduce::     When two rules are applicable in the same situation.
 * Mystery Conflicts::  Reduce/reduce conflicts that look unjustified.
+* Generalized LR Parsing::  Parsing arbitrary context-free grammars.
 * Stack Overflow::    What happens when stack gets full.  How to avoid it.
 @end menu
 
@@ -4624,6 +4837,82 @@ return_spec:
         ;
 @end example
 
+@node Generalized LR Parsing 
+@section Generalized LR (GLR) Parsing
+@cindex GLR parsing
+@cindex generalized LR (GLR) parsing
+@cindex ambiguous grammars
+@cindex non-deterministic parsing
+
+Bison produces @emph{deterministic} parsers that choose uniquely 
+when to reduce and which reduction to apply 
+based on a summary of the preceding input and on one extra token of lookahead.
+As a result, normal Bison handles a proper subset of the family of
+context-free languages.
+Ambiguous grammars, since they have strings with more than one possible 
+sequence of reductions cannot have deterministic parsers in this sense.
+The same is true of languages that require more than one symbol of
+lookahead, since the parser lacks the information necessary to make a
+decision at the point it must be made in a shift-reduce parser.
+Finally, as previously mentioned (@pxref{Mystery Conflicts}), 
+there are languages where Bison's particular choice of how to
+summarize the input seen so far loses necessary information.
+
+When you use the @samp{%glr-parser} declaration in your grammar file,
+Bison generates a parser that uses a different algorithm, called
+Generalized LR (or GLR).  A Bison GLR parser uses the same basic
+algorithm for parsing as an ordinary Bison parser, but behaves
+differently in cases where there is a shift-reduce conflict that has not
+been resolved by precedence rules (@pxref{Precedence}) or a 
+reduce-reduce conflict.  When a GLR parser encounters such a situation, it
+effectively @emph{splits} into a several parsers, one for each possible 
+shift or reduction.  These parsers then proceed as usual, consuming
+tokens in lock-step.  Some of the stacks may encounter other conflicts
+and split further, with the result that instead of a sequence of states, 
+a Bison GLR parsing stack is what is in effect a tree of states.  
+
+In effect, each stack represents a guess as to what the proper parse
+is.  Additional input may indicate that a guess was wrong, in which case
+the appropriate stack silently disappears.  Otherwise, the semantics
+actions generated in each stack are saved, rather than being executed 
+immediately.  When a stack disappears, its saved semantic actions never
+get executed.  When a reduction causes two stacks to become equivalent, 
+their sets of semantic actions are both saved with the state that
+results from the reduction.  We say that two stacks are equivalent
+when they both represent the same sequence of states, 
+and each pair of corresponding states represents a
+grammar symbol that produces the same segment of the input token
+stream.
+
+Whenever the parser makes a transition from having multiple
+states to having one, it reverts to the normal LALR(1) parsing
+algorithm, after resolving and executing the saved-up actions.
+At this transition, some of the states on the stack will have semantic
+values that are sets (actually multisets) of possible actions.  The
+parser tries to pick one of the actions by first finding one whose rule
+has the highest dynamic precedence, as set by the @samp{%dprec}
+declaration.  Otherwise, if the alternative actions are not ordered by 
+precedence, but there the same merging function is declared for both
+rules by the @samp{%merge} declaration, 
+Bison resolves and evaluates both and then calls the merge function on
+the result.  Otherwise, it reports an ambiguity.
+
+It is possible to use a data structure for the GLR parsing tree that
+permits the processing of any LALR(1) grammar in linear time (in the
+size of the input), any unambiguous (not necessarily LALR(1)) grammar in
+quadratic worst-case time, and any general (possibly ambiguous) 
+context-free grammar in cubic worst-case time.  However, Bison currently
+uses a simpler data structure that requires time proportional to the
+length of the input times the maximum number of stacks required for any
+prefix of the input.  Thus, really ambiguous or non-deterministic
+grammars can require exponential time and space to process.  Such badly
+behaving examples, however, are not generally of practical interest.
+Usually, non-determinism in a grammar is local---the parser is ``in
+doubt'' only for a few tokens at a time.  Therefore, the current data
+structure should generally be adequate.  On LALR(1) portions of a
+grammar, in particular, it is only slightly slower than with the default
+Bison parser.
+
 @node Stack Overflow
 @section Stack Overflow, and How to Avoid It
 @cindex stack overflow
@@ -5912,10 +6201,17 @@ Equip the parser for debugging.  @xref{Decl Summary}.
 Bison declaration to create a header file meant for the scanner.
 @xref{Decl Summary}.
 
+@item %dprec 
+Bison declaration to assign a precedence to a rule that is used at parse
+time to resolve reduce/reduce conflicts.  @xref{GLR Parsers}.
+
 @item %file-prefix="@var{prefix}"
-Bison declaration to set tge prefix of the output files. @xref{Decl
+Bison declaration to set the prefix of the output files. @xref{Decl
 Summary}.
 
+@item %glr-parser
+Bison declaration to produce a GLR parser.  @xref{GLR Parsers}.
+
 @c @item %source-extension
 @c Bison declaration to specify the generated parser output file extension.
 @c @xref{Decl Summary}.
@@ -5928,6 +6224,12 @@ Summary}.
 Bison declaration to assign left associativity to token(s).
 @xref{Precedence Decl, ,Operator Precedence}.
 
+@item %merge
+Bison declaration to assign a merging function to a rule.  If there is a
+reduce/reduce conflict with a rule having the same merging function, the 
+function is applied to the two semantic values to get a single result.
+@xref{GLR Parsers}.
+
 @item %name-prefix="@var{prefix}"
 Bison declaration to rename the external symbols. @xref{Decl Summary}.
 
@@ -6040,6 +6342,13 @@ machine.  In the case of the parser, the input is the language being
 parsed, and the states correspond to various stages in the grammar
 rules.  @xref{Algorithm, ,The Bison Parser Algorithm }.
 
+@item Generalized LR (GLR)
+A parsing algorithm that can handle all context-free grammars, including those
+that are not LALR(1).  It resolves situations that Bison's usual LALR(1) 
+algorithm cannot by effectively splitting off multiple parsers, trying all
+possible parsers, and discarding those that fail in the light of additional
+right context.  @xref{Generalized LR Parsing, ,Generalized LR Parsing}.
+
 @item Grouping
 A language construct that is (in general) grammatically divisible;
 for example, `expression' or `declaration' in C.
index 1c02dae..009cc7f 100644 (file)
--- a/po/de.po
+++ b/po/de.po
@@ -6,7 +6,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: bison 1.35\n"
-"POT-Creation-Date: 2002-06-27 14:17+0200\n"
+"POT-Creation-Date: 2002-06-27 17:56-0700\n"
 "PO-Revision-Date: 2002-04-26 11:58:57+0200\n"
 "Last-Translator: Michael Piefel <piefel@informatik.hu-berlin.de>\n"
 "Language-Team: German <de@li.org>\n"
@@ -47,49 +47,49 @@ msgstr "Konflikt in Zustand %d zwischen Regel %d and Token %s wurde %s.\n"
 msgid "    Conflict between rule %d and token %s resolved as an error"
 msgstr "Konflikt in Zustand %d zwischen Regel %d and Token %s wurde %s.\n"
 
-#: src/conflicts.c:375
+#: src/conflicts.c:378
 #, c-format
 msgid "%d shift/reduce conflict"
 msgid_plural "%d shift/reduce conflicts"
 msgstr[0] "%d Schiebe/Reduziere-Konflikt"
 msgstr[1] "%d Schiebe/Reduziere-Konflikte"
 
-#: src/conflicts.c:382
+#: src/conflicts.c:385
 msgid "and"
 msgstr "und"
 
-#: src/conflicts.c:388
+#: src/conflicts.c:391
 #, c-format
 msgid "%d reduce/reduce conflict"
 msgid_plural "%d reduce/reduce conflicts"
 msgstr[0] "%d Reduziere/Reduziere-Konflikt"
 msgstr[1] "%d Reduziere/Reduziere-Konflikte"
 
-#: src/conflicts.c:413
+#: src/conflicts.c:416
 #, c-format
 msgid "State %d contains "
 msgstr "Zustand %d enthält "
 
-#: src/conflicts.c:460
+#: src/conflicts.c:487
 msgid "conflicts: "
 msgstr "Konflikte: "
 
-#: src/conflicts.c:462
+#: src/conflicts.c:489
 #, c-format
 msgid " %d shift/reduce"
 msgstr " %d Schiebe/Reduziere"
 
-#: src/conflicts.c:466
+#: src/conflicts.c:493
 #, c-format
 msgid " %d reduce/reduce"
 msgstr " %d Reduziere/Reduziere"
 
-#: src/conflicts.c:471
+#: src/conflicts.c:498
 #, c-format
 msgid "%s contains "
 msgstr "%s enthält "
 
-#: src/conflicts.c:478
+#: src/conflicts.c:505
 #, c-format
 msgid "expected %d shift/reduce conflict\n"
 msgid_plural "expected %d shift/reduce conflicts\n"
@@ -105,16 +105,16 @@ msgstr "kann Datei »%s« nicht öffnen"
 msgid "cannot close file"
 msgstr "kann Datei nicht schließen"
 
-#: src/getargs.c:99
+#: src/getargs.c:100
 msgid "GNU bison generates parsers for LALR(1) grammars.\n"
 msgstr "GNU bison generiert Parser für LALR(1)-Grammatiken.\n"
 
-#: src/getargs.c:103
+#: src/getargs.c:104
 #, c-format
 msgid "Usage: %s [OPTION]... FILE\n"
 msgstr "Aufruf: %s [OPTION]... DATEI\n"
 
-#: src/getargs.c:107
+#: src/getargs.c:108
 msgid ""
 "If a long option shows an argument as mandatory, then it is mandatory\n"
 "for the equivalent short option also.  Similarly for optional arguments.\n"
@@ -124,7 +124,7 @@ msgstr ""
 "für die äquivalente kurze Option erforderlich.  Ähnlich für optionale "
 "Argumente.\n"
 
-#: src/getargs.c:113
+#: src/getargs.c:114
 msgid ""
 "Operation modes:\n"
 "  -h, --help      display this help and exit\n"
@@ -136,7 +136,7 @@ msgstr ""
 "  -v, --version   Versionsinformation anzeigen und beenden.\n"
 "  -y, --yacc      POSIX' yacc emulieren\n"
 
-#: src/getargs.c:120
+#: src/getargs.c:121
 msgid ""
 "Parser:\n"
 "  -S, --skeleton=FILE        specify the skeleton to use\n"
@@ -158,7 +158,7 @@ msgstr ""
 "  -k, --token-table          einer Tabellen der Token-Namen mit "
 "einschließen\n"
 
-#: src/getargs.c:132
+#: src/getargs.c:133
 #, fuzzy
 msgid ""
 "Output:\n"
@@ -178,7 +178,7 @@ msgstr ""
 "  -g, --graph                auch eine VCG-Beschreibung des Automaten "
 "herstellen\n"
 
-#: src/getargs.c:143
+#: src/getargs.c:144
 msgid ""
 "THINGS is a list of comma separated words that can include:\n"
 "  `state'        describe the states\n"
@@ -189,28 +189,28 @@ msgid ""
 "  `none'         disable the report\n"
 msgstr ""
 
-#: src/getargs.c:154
+#: src/getargs.c:155
 msgid "Report bugs to <bug-bison@gnu.org>.\n"
 msgstr ""
 "Berichten Sie Fehler (auf Englisch, mit LC_ALL=C) an <bug-bison@gnu.org>.\n"
 
-#: src/getargs.c:168
+#: src/getargs.c:169
 #, c-format
 msgid "bison (GNU Bison) %s"
 msgstr "bison (GNU Bison) %s"
 
-#: src/getargs.c:170
+#: src/getargs.c:171
 msgid "Written by Robert Corbett and Richard Stallman.\n"
 msgstr ""
 
-#: src/getargs.c:174
+#: src/getargs.c:175
 #, fuzzy, c-format
 msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
 msgstr ""
 "Copyright 1984, 1986, 1989, 1992, 2000, 2001, 2002\n"
 "Free Software Foundation, Inc.\n"
 
-#: src/getargs.c:176
+#: src/getargs.c:177
 msgid ""
 "This is free software; see the source for copying conditions.  There is NO\n"
 "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
@@ -219,17 +219,17 @@ msgstr ""
 "gibt keine Garantie; auch nicht für VERKAUFBARKEIT oder FÜR SPEZIELLE "
 "ZWECKE.\n"
 
-#: src/getargs.c:333
+#: src/getargs.c:334
 #, c-format
 msgid "Try `%s --help' for more information.\n"
 msgstr "»%s --help« gibt weitere Informationen.\n"
 
-#: src/getargs.c:340
+#: src/getargs.c:341
 #, c-format
 msgid "%s: no grammar file given\n"
 msgstr "%s: keine Grammatik-Datei angegeben\n"
 
-#: src/getargs.c:344
+#: src/getargs.c:345
 #, c-format
 msgid "%s: extra arguments ignored after `%s'\n"
 msgstr "%s: zusätzliche Argumente nach »%s« werden ignoriert\n"
@@ -317,34 +317,64 @@ msgstr " auf der linken Seite:"
 msgid " on right:"
 msgstr " auf der rechten Seite:"
 
-#: src/reader.c:52
+#: src/reader.c:53
 #, c-format
 msgid "multiple %s declarations"
 msgstr "mehr als eine %s-Deklaration"
 
-#: src/reader.c:202
+#: src/reader.c:139
+#, c-format
+msgid "result type clash on merge function %s: `%s' vs. `%s'"
+msgstr ""
+
+#: src/reader.c:257
 #, c-format
 msgid "rule given for %s, which is a token"
 msgstr "Regel für %s vorhanden, welches aber ein Token ist"
 
-#: src/reader.c:227
+#: src/reader.c:282
 #, c-format
 msgid "type clash (`%s' `%s') on default action"
 msgstr "Typkonflikt (»%s« »%s«) bei Default-Aktion"
 
-#: src/reader.c:235
+#: src/reader.c:290
 msgid "empty rule for typed nonterminal, and no action"
 msgstr "leere Regel für Nicht-Terminal mit Typ und keine Aktion"
 
-#: src/reader.c:306
+#: src/reader.c:361
 msgid "two @prec's in a row"
 msgstr "zwei @prec-Anweisungen nacheinander"
 
-#: src/reader.c:447
+#: src/reader.c:371
+#, c-format
+msgid "%%dprec affects only GLR parsers"
+msgstr ""
+
+#: src/reader.c:373
+#, c-format
+msgid "%%dprec must be followed by positive number"
+msgstr ""
+
+#: src/reader.c:375
+#, c-format
+msgid "only one %%dprec allowed per rule"
+msgstr ""
+
+#: src/reader.c:386
+#, c-format
+msgid "%%merge affects only GLR parsers"
+msgstr ""
+
+#: src/reader.c:388
+#, c-format
+msgid "only one %%merge allowed per rule"
+msgstr ""
+
+#: src/reader.c:531
 msgid "no rules in the input grammar"
 msgstr "Eingabegrammatik enthält keine Regeln"
 
-#: src/reader.c:479
+#: src/reader.c:563
 #, c-format
 msgid "too many symbols (tokens plus nonterminals); maximum %d"
 msgstr "zu viele Symbole (Token plus Nicht-Terminale); Maximum %d"
@@ -407,22 +437,22 @@ msgstr[1] "%d nutzlose Regeln"
 msgid "Start symbol %s does not derive any sentence"
 msgstr "es lassen sich keine Sätze vom Startsymbol %s ableiten"
 
-#: scan-gram.l:556
+#: scan-gram.l:559
 #, c-format
 msgid "$$ of `%s' has no declared type"
 msgstr "$$ von »%s« hat keinen deklarierten Typ"
 
-#: scan-gram.l:573 scan-gram.l:660
+#: scan-gram.l:576 scan-gram.l:663
 #, fuzzy, c-format
 msgid "invalid value: %s%d"
 msgstr "unzulässiger @-Wert"
 
-#: scan-gram.l:580
+#: scan-gram.l:583
 #, c-format
 msgid "$%d of `%s' has no declared type"
 msgstr "$%d von »%s« hat keinen deklarierten Typ"
 
-#: scan-gram.l:591 scan-gram.l:608 scan-gram.l:667 scan-gram.l:684
+#: scan-gram.l:594 scan-gram.l:611 scan-gram.l:670 scan-gram.l:687
 #, c-format
 msgid "%s is invalid"
 msgstr "%s ist unzulässig"
index 99acce7..542f421 100644 (file)
--- a/po/es.po
+++ b/po/es.po
@@ -29,7 +29,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: GNU bison 1.35\n"
-"POT-Creation-Date: 2002-06-27 14:17+0200\n"
+"POT-Creation-Date: 2002-06-27 17:56-0700\n"
 "PO-Revision-Date: 2002-04-03 10:19+0200\n"
 "Last-Translator: Nicolás García-Pedrajas <ngarcia-pedrajas@acm.org>\n"
 "Language-Team: Spanish <es@li.org>\n"
@@ -83,30 +83,30 @@ msgstr ""
 "El conflicto en el estado %d entre la regla %d y el terminal %s se resuelve "
 "como %s.\n"
 
-#: src/conflicts.c:375
+#: src/conflicts.c:378
 #, c-format
 msgid "%d shift/reduce conflict"
 msgid_plural "%d shift/reduce conflicts"
 msgstr[0] "%d conflicto desplazamiento/reducción"
 msgstr[1] "%d conflictos desplazamiento/reducción"
 
-#: src/conflicts.c:382
+#: src/conflicts.c:385
 msgid "and"
 msgstr "y"
 
-#: src/conflicts.c:388
+#: src/conflicts.c:391
 #, c-format
 msgid "%d reduce/reduce conflict"
 msgid_plural "%d reduce/reduce conflicts"
 msgstr[0] " %d conflicto reducción/reducción"
 msgstr[1] " %d conflictos reducción/reducción"
 
-#: src/conflicts.c:413
+#: src/conflicts.c:416
 #, c-format
 msgid "State %d contains "
 msgstr "El estado %d contiene"
 
-#: src/conflicts.c:460
+#: src/conflicts.c:487
 msgid "conflicts: "
 msgstr "conflictos: "
 
@@ -122,7 +122,7 @@ msgstr "conflictos: "
 # ok
 # ngp
 #
-#: src/conflicts.c:462
+#: src/conflicts.c:489
 #, c-format
 msgid " %d shift/reduce"
 msgstr " %d desplazamiento(s)/reducción(ones)"
@@ -139,17 +139,17 @@ msgstr " %d desplazamiento(s)/reducci
 #
 # ok
 # ngp
-#: src/conflicts.c:466
+#: src/conflicts.c:493
 #, c-format
 msgid " %d reduce/reduce"
 msgstr " %d reducción(ones)/reducción(ones)"
 
-#: src/conflicts.c:471
+#: src/conflicts.c:498
 #, c-format
 msgid "%s contains "
 msgstr "%s contiene "
 
-#: src/conflicts.c:478
+#: src/conflicts.c:505
 #, c-format
 msgid "expected %d shift/reduce conflict\n"
 msgid_plural "expected %d shift/reduce conflicts\n"
@@ -165,16 +165,16 @@ msgstr "no se puede abrir el fichero `%s'"
 msgid "cannot close file"
 msgstr "no se puede cerrar el fichero"
 
-#: src/getargs.c:99
+#: src/getargs.c:100
 msgid "GNU bison generates parsers for LALR(1) grammars.\n"
 msgstr "GNU bison genera analizadores para gramáticas LALR(1).\n"
 
-#: src/getargs.c:103
+#: src/getargs.c:104
 #, c-format
 msgid "Usage: %s [OPTION]... FILE\n"
 msgstr "Utilización: %s [OPCIÓN]... FICHERO\n"
 
-#: src/getargs.c:107
+#: src/getargs.c:108
 msgid ""
 "If a long option shows an argument as mandatory, then it is mandatory\n"
 "for the equivalent short option also.  Similarly for optional arguments.\n"
@@ -184,7 +184,7 @@ msgstr ""
 "para la opción corta equivalente también. De igual forma para los argumentos "
 "opcionales.\n"
 
-#: src/getargs.c:113
+#: src/getargs.c:114
 msgid ""
 "Operation modes:\n"
 "  -h, --help      display this help and exit\n"
@@ -196,7 +196,7 @@ msgstr ""
 "  -V, --version   informa de la versión y termina\n"
 "  -y, --yacc      emula POSIX yacc\n"
 
-#: src/getargs.c:120
+#: src/getargs.c:121
 msgid ""
 "Parser:\n"
 "  -S, --skeleton=FILE        specify the skeleton to use\n"
@@ -216,7 +216,7 @@ msgstr ""
 "  -n, --no-parser            solamente genera las tablas\n"
 " --k, --token-table          incluye una tabla de nombres de terminales\n"
 
-#: src/getargs.c:132
+#: src/getargs.c:133
 #, fuzzy
 msgid ""
 "Output:\n"
@@ -237,7 +237,7 @@ msgstr ""
 "  -g, --graph                también produce una descripción en VCG del "
 "automaton\n"
 
-#: src/getargs.c:143
+#: src/getargs.c:144
 msgid ""
 "THINGS is a list of comma separated words that can include:\n"
 "  `state'        describe the states\n"
@@ -248,27 +248,27 @@ msgid ""
 "  `none'         disable the report\n"
 msgstr ""
 
-#: src/getargs.c:154
+#: src/getargs.c:155
 msgid "Report bugs to <bug-bison@gnu.org>.\n"
 msgstr "Informe de los errores a <bug-bison@gnu.org>.\n"
 
-#: src/getargs.c:168
+#: src/getargs.c:169
 #, c-format
 msgid "bison (GNU Bison) %s"
 msgstr "bison (GNU bison) %s"
 
-#: src/getargs.c:170
+#: src/getargs.c:171
 msgid "Written by Robert Corbett and Richard Stallman.\n"
 msgstr ""
 
-#: src/getargs.c:174
+#: src/getargs.c:175
 #, fuzzy, c-format
 msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
 msgstr ""
 "Copyright 1984, 1986, 1989, 1992, 2000, 2001, 2002\n"
 "Free Software Foundation, Inc.\n"
 
-#: src/getargs.c:176
+#: src/getargs.c:177
 msgid ""
 "This is free software; see the source for copying conditions.  There is NO\n"
 "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
@@ -278,20 +278,20 @@ msgstr ""
 "NINGUNA garantía; ni siquiera para COMERCIALIZACIÓN o ADAPTACIÓN PARA UN\n"
 "USO PARTICULAR\n"
 
-#: src/getargs.c:333
+#: src/getargs.c:334
 #, c-format
 msgid "Try `%s --help' for more information.\n"
 msgstr "Pruebe `%s --help' para más información.\n"
 
 # Me parece menos "computadora" decir "ningún fichero de gramática" - cll
 #
-#: src/getargs.c:340
+#: src/getargs.c:341
 #, c-format
 msgid "%s: no grammar file given\n"
 msgstr "%s: no se ha especificado ningún fichero de gramática\n"
 
 # Ignorar es no saber, to ignore es no hacer caso, que no es lo mismo. sv
-#: src/getargs.c:344
+#: src/getargs.c:345
 #, c-format
 msgid "%s: extra arguments ignored after `%s'\n"
 msgstr "%s: los argumentos extra después de '%s' no se tendrán en cuenta\n"
@@ -379,34 +379,64 @@ msgstr " en la izquierda:"
 msgid " on right:"
 msgstr " en la derecha:"
 
-#: src/reader.c:52
+#: src/reader.c:53
 #, c-format
 msgid "multiple %s declarations"
 msgstr "múltiples declaraciones de %s"
 
-#: src/reader.c:202
+#: src/reader.c:139
+#, c-format
+msgid "result type clash on merge function %s: `%s' vs. `%s'"
+msgstr ""
+
+#: src/reader.c:257
 #, c-format
 msgid "rule given for %s, which is a token"
 msgstr "se ha dado una regla para %s, que es un terminal"
 
-#: src/reader.c:227
+#: src/reader.c:282
 #, c-format
 msgid "type clash (`%s' `%s') on default action"
 msgstr "los tipos (`%s' `%s') no concuerdan en la acción por defecto"
 
-#: src/reader.c:235
+#: src/reader.c:290
 msgid "empty rule for typed nonterminal, and no action"
 msgstr "regla vacía para un no terminal con tipo y no hay ninguna acción"
 
-#: src/reader.c:306
+#: src/reader.c:361
 msgid "two @prec's in a row"
 msgstr "dos @prec en una línea"
 
-#: src/reader.c:447
+#: src/reader.c:371
+#, c-format
+msgid "%%dprec affects only GLR parsers"
+msgstr ""
+
+#: src/reader.c:373
+#, c-format
+msgid "%%dprec must be followed by positive number"
+msgstr ""
+
+#: src/reader.c:375
+#, c-format
+msgid "only one %%dprec allowed per rule"
+msgstr ""
+
+#: src/reader.c:386
+#, c-format
+msgid "%%merge affects only GLR parsers"
+msgstr ""
+
+#: src/reader.c:388
+#, c-format
+msgid "only one %%merge allowed per rule"
+msgstr ""
+
+#: src/reader.c:531
 msgid "no rules in the input grammar"
 msgstr "no hay reglas en la gramática de entrada"
 
-#: src/reader.c:479
+#: src/reader.c:563
 #, c-format
 msgid "too many symbols (tokens plus nonterminals); maximum %d"
 msgstr "demasiados símbolos (terminales y no terminales); máximo %d"
@@ -469,22 +499,22 @@ msgstr[1] "%d reglas sin uso"
 msgid "Start symbol %s does not derive any sentence"
 msgstr "El símbolo de inicio (axioma) %s no deriva ninguna sentencia"
 
-#: scan-gram.l:556
+#: scan-gram.l:559
 #, c-format
 msgid "$$ of `%s' has no declared type"
 msgstr "$$ de `%s' no tiene tipo declarado"
 
-#: scan-gram.l:573 scan-gram.l:660
+#: scan-gram.l:576 scan-gram.l:663
 #, fuzzy, c-format
 msgid "invalid value: %s%d"
 msgstr "valor @ no válido"
 
-#: scan-gram.l:580
+#: scan-gram.l:583
 #, c-format
 msgid "$%d of `%s' has no declared type"
 msgstr "$%d de `%s' no tiene tipo declarado"
 
-#: scan-gram.l:591 scan-gram.l:608 scan-gram.l:667 scan-gram.l:684
+#: scan-gram.l:594 scan-gram.l:611 scan-gram.l:670 scan-gram.l:687
 #, c-format
 msgid "%s is invalid"
 msgstr "%s no es válido"
index 5289c89..766d59b 100644 (file)
--- a/po/et.po
+++ b/po/et.po
@@ -5,7 +5,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: bison 1.33b\n"
-"POT-Creation-Date: 2002-06-27 14:17+0200\n"
+"POT-Creation-Date: 2002-06-27 17:56-0700\n"
 "PO-Revision-Date: 2002-03-05 16:27+0200\n"
 "Last-Translator: Toomas Soome <tsoome@ut.ee>\n"
 "Language-Team: Estonian <et@li.org>\n"
@@ -46,49 +46,49 @@ msgstr "Konflikt olekus %d reegli %d ja m
 msgid "    Conflict between rule %d and token %s resolved as an error"
 msgstr "Konflikt olekus %d reegli %d ja märgi %s vahel lahendatud, kui %s.\n"
 
-#: src/conflicts.c:375
+#: src/conflicts.c:378
 #, c-format
 msgid "%d shift/reduce conflict"
 msgid_plural "%d shift/reduce conflicts"
 msgstr[0] "%d nihutamine/redutseerimine konflikt"
 msgstr[1] "%d nihutamine/redutseerimine konflikti"
 
-#: src/conflicts.c:382
+#: src/conflicts.c:385
 msgid "and"
 msgstr "ja"
 
-#: src/conflicts.c:388
+#: src/conflicts.c:391
 #, c-format
 msgid "%d reduce/reduce conflict"
 msgid_plural "%d reduce/reduce conflicts"
 msgstr[0] "%d redutseerimine/redutseerimine konflikt"
 msgstr[1] "%d redutseerimine/redutseerimine konflikti"
 
-#: src/conflicts.c:413
+#: src/conflicts.c:416
 #, c-format
 msgid "State %d contains "
 msgstr "Olek %d sisaldab "
 
-#: src/conflicts.c:460
+#: src/conflicts.c:487
 msgid "conflicts: "
 msgstr "konfliktid: "
 
-#: src/conflicts.c:462
+#: src/conflicts.c:489
 #, c-format
 msgid " %d shift/reduce"
 msgstr " %d nihutamine/redutseerimine"
 
-#: src/conflicts.c:466
+#: src/conflicts.c:493
 #, c-format
 msgid " %d reduce/reduce"
 msgstr " %d redutseerimine/redutseerimine"
 
-#: src/conflicts.c:471
+#: src/conflicts.c:498
 #, c-format
 msgid "%s contains "
 msgstr "%s sisaldab "
 
-#: src/conflicts.c:478
+#: src/conflicts.c:505
 #, c-format
 msgid "expected %d shift/reduce conflict\n"
 msgid_plural "expected %d shift/reduce conflicts\n"
@@ -104,16 +104,16 @@ msgstr "faili `%s' ei saa avada"
 msgid "cannot close file"
 msgstr "faili ei õnnestu sulgeda"
 
-#: src/getargs.c:99
+#: src/getargs.c:100
 msgid "GNU bison generates parsers for LALR(1) grammars.\n"
 msgstr "GNU bison genereerib parsereid LALR(1) grammatikatele.\n"
 
-#: src/getargs.c:103
+#: src/getargs.c:104
 #, c-format
 msgid "Usage: %s [OPTION]... FILE\n"
 msgstr "Kasuta: %s [VÕTI]...FAIL\n"
 
-#: src/getargs.c:107
+#: src/getargs.c:108
 msgid ""
 "If a long option shows an argument as mandatory, then it is mandatory\n"
 "for the equivalent short option also.  Similarly for optional arguments.\n"
@@ -121,7 +121,7 @@ msgstr ""
 "Kui pikk võti näitab, et argument on kohustuslik, siis on see kohustuslik \n"
 "ka lühikese võtme korral. Sama ka vabalt valitavate võtmete korral.\n"
 
-#: src/getargs.c:113
+#: src/getargs.c:114
 msgid ""
 "Operation modes:\n"
 "  -h, --help      display this help and exit\n"
@@ -133,7 +133,7 @@ msgstr ""
 "  -V, --version   esita versiooniinfo ja lõpeta töö\n"
 "  -y, --yacc      emuleeri POSIX yacc\n"
 
-#: src/getargs.c:120
+#: src/getargs.c:121
 msgid ""
 "Parser:\n"
 "  -S, --skeleton=FILE        specify the skeleton to use\n"
@@ -153,7 +153,7 @@ msgstr ""
 "  -n, --no-parser            genereeri ainult tabelid\n"
 "  -k, --token-table          lisa ka sümbolite nimede tabel\n"
 
-#: src/getargs.c:132
+#: src/getargs.c:133
 #, fuzzy
 msgid ""
 "Output:\n"
@@ -172,7 +172,7 @@ msgstr ""
 "  -o, --output-file=FAIL     jäta väljund FAILi\n"
 "  -g, --graph                loo automaadi kirjeldus VCG graafina\n"
 
-#: src/getargs.c:143
+#: src/getargs.c:144
 msgid ""
 "THINGS is a list of comma separated words that can include:\n"
 "  `state'        describe the states\n"
@@ -183,27 +183,27 @@ msgid ""
 "  `none'         disable the report\n"
 msgstr ""
 
-#: src/getargs.c:154
+#: src/getargs.c:155
 msgid "Report bugs to <bug-bison@gnu.org>.\n"
 msgstr "Teatage palun vigadest aadressil <bug-bison@gnu.org>.\n"
 
-#: src/getargs.c:168
+#: src/getargs.c:169
 #, c-format
 msgid "bison (GNU Bison) %s"
 msgstr "bison (GNU Bison) %s"
 
-#: src/getargs.c:170
+#: src/getargs.c:171
 msgid "Written by Robert Corbett and Richard Stallman.\n"
 msgstr ""
 
-#: src/getargs.c:174
+#: src/getargs.c:175
 #, fuzzy, c-format
 msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
 msgstr ""
 "Autoriõigus 1984, 1986, 1989, 1992, 2000, 2001, 2002\n"
 "Free Software Foundation, Inc.\n"
 
-#: src/getargs.c:176
+#: src/getargs.c:177
 msgid ""
 "This is free software; see the source for copying conditions.  There is NO\n"
 "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
@@ -211,17 +211,17 @@ msgstr ""
 "See on vaba tarkvara; kopeerimistingimused leiate lähtetekstidest. Garantii\n"
 "PUUDUB; ka müügiks või mingil eesmärgil kasutamiseks.\n"
 
-#: src/getargs.c:333
+#: src/getargs.c:334
 #, c-format
 msgid "Try `%s --help' for more information.\n"
 msgstr "Lisainfo saamiseks proovige `%s --help'.\n"
 
-#: src/getargs.c:340
+#: src/getargs.c:341
 #, c-format
 msgid "%s: no grammar file given\n"
 msgstr "%s: puudub grammatikafail\n"
 
-#: src/getargs.c:344
+#: src/getargs.c:345
 #, c-format
 msgid "%s: extra arguments ignored after `%s'\n"
 msgstr "%s: ignoreerin lisaargumente peale `%s'\n"
@@ -309,34 +309,64 @@ msgstr " vasakul:"
 msgid " on right:"
 msgstr " paremal:"
 
-#: src/reader.c:52
+#: src/reader.c:53
 #, c-format
 msgid "multiple %s declarations"
 msgstr "korduvad %s deklaratsioonid"
 
-#: src/reader.c:202
+#: src/reader.c:139
+#, c-format
+msgid "result type clash on merge function %s: `%s' vs. `%s'"
+msgstr ""
+
+#: src/reader.c:257
 #, c-format
 msgid "rule given for %s, which is a token"
 msgstr "%s jaoks on antud reegel, aga see on märk"
 
-#: src/reader.c:227
+#: src/reader.c:282
 #, c-format
 msgid "type clash (`%s' `%s') on default action"
 msgstr "vaikimisi tegevuse tüübikonflikt (`%s' `%s')"
 
-#: src/reader.c:235
+#: src/reader.c:290
 msgid "empty rule for typed nonterminal, and no action"
 msgstr "tüübiga mitteterminalil on tühi reegel ja puudub tegevus"
 
-#: src/reader.c:306
+#: src/reader.c:361
 msgid "two @prec's in a row"
 msgstr "kaks @prec ühel real"
 
-#: src/reader.c:447
+#: src/reader.c:371
+#, c-format
+msgid "%%dprec affects only GLR parsers"
+msgstr ""
+
+#: src/reader.c:373
+#, c-format
+msgid "%%dprec must be followed by positive number"
+msgstr ""
+
+#: src/reader.c:375
+#, c-format
+msgid "only one %%dprec allowed per rule"
+msgstr ""
+
+#: src/reader.c:386
+#, c-format
+msgid "%%merge affects only GLR parsers"
+msgstr ""
+
+#: src/reader.c:388
+#, c-format
+msgid "only one %%merge allowed per rule"
+msgstr ""
+
+#: src/reader.c:531
 msgid "no rules in the input grammar"
 msgstr "sisendgrammatikas pole reegleid"
 
-#: src/reader.c:479
+#: src/reader.c:563
 #, c-format
 msgid "too many symbols (tokens plus nonterminals); maximum %d"
 msgstr "liiga palju sümboleid (märgid ja mitteterminalid); maksimaalne on %d"
@@ -399,22 +429,22 @@ msgstr[1] "%d kasutamata reeglit"
 msgid "Start symbol %s does not derive any sentence"
 msgstr "Stardisümbolist %s ei tuletata ühtegi lauset"
 
-#: scan-gram.l:556
+#: scan-gram.l:559
 #, c-format
 msgid "$$ of `%s' has no declared type"
 msgstr "`%s' $$ ei oma deklareeritud tüüpi"
 
-#: scan-gram.l:573 scan-gram.l:660
+#: scan-gram.l:576 scan-gram.l:663
 #, fuzzy, c-format
 msgid "invalid value: %s%d"
 msgstr "vigane @ väärtus"
 
-#: scan-gram.l:580
+#: scan-gram.l:583
 #, c-format
 msgid "$%d of `%s' has no declared type"
 msgstr "$%d `%s' ei oma deklareeritud tüüpi"
 
-#: scan-gram.l:591 scan-gram.l:608 scan-gram.l:667 scan-gram.l:684
+#: scan-gram.l:594 scan-gram.l:611 scan-gram.l:670 scan-gram.l:687
 #, c-format
 msgid "%s is invalid"
 msgstr "%s on vigane"
index a821eaa..54d85fb 100644 (file)
--- a/po/fr.po
+++ b/po/fr.po
@@ -6,7 +6,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: GNU bison 1.34a\n"
-"POT-Creation-Date: 2002-06-27 14:17+0200\n"
+"POT-Creation-Date: 2002-06-27 17:56-0700\n"
 "PO-Revision-Date: 2002-03-21 15:00-0500\n"
 "Last-Translator: Michel Robitaille <robitail@IRO.UMontreal.CA>\n"
 "Language-Team: French <traduc@traduc.org>\n"
@@ -50,49 +50,49 @@ msgid "    Conflict between rule %d and token %s resolved as an error"
 msgstr ""
 "Conflit à l'état %d entre la règle %d et le terminal %s résolu par %s.\n"
 
-#: src/conflicts.c:375
+#: src/conflicts.c:378
 #, c-format
 msgid "%d shift/reduce conflict"
 msgid_plural "%d shift/reduce conflicts"
 msgstr[0] "%d conflit par décalage/réduction"
 msgstr[1] "%d conflits par décalage/réduction"
 
-#: src/conflicts.c:382
+#: src/conflicts.c:385
 msgid "and"
 msgstr "et"
 
-#: src/conflicts.c:388
+#: src/conflicts.c:391
 #, c-format
 msgid "%d reduce/reduce conflict"
 msgid_plural "%d reduce/reduce conflicts"
 msgstr[0] "%d conflit par réduction/réduction"
 msgstr[1] "%d conflits par réduction/réduction"
 
-#: src/conflicts.c:413
+#: src/conflicts.c:416
 #, c-format
 msgid "State %d contains "
 msgstr "L'état %d contient "
 
-#: src/conflicts.c:460
+#: src/conflicts.c:487
 msgid "conflicts: "
 msgstr "conflits: "
 
-#: src/conflicts.c:462
+#: src/conflicts.c:489
 #, c-format
 msgid " %d shift/reduce"
 msgstr " %d décalage/réduction"
 
-#: src/conflicts.c:466
+#: src/conflicts.c:493
 #, c-format
 msgid " %d reduce/reduce"
 msgstr " %d réduction/réduction"
 
-#: src/conflicts.c:471
+#: src/conflicts.c:498
 #, c-format
 msgid "%s contains "
 msgstr "%s contient "
 
-#: src/conflicts.c:478
+#: src/conflicts.c:505
 #, c-format
 msgid "expected %d shift/reduce conflict\n"
 msgid_plural "expected %d shift/reduce conflicts\n"
@@ -108,16 +108,16 @@ msgstr "ne peut ouvrir le fichier 
 msgid "cannot close file"
 msgstr "ne peut fermer le fichier"
 
-#: src/getargs.c:99
+#: src/getargs.c:100
 msgid "GNU bison generates parsers for LALR(1) grammars.\n"
 msgstr "GNU bison génère des analyseurs pour les grammaires de type LALR(1).\n"
 
-#: src/getargs.c:103
+#: src/getargs.c:104
 #, c-format
 msgid "Usage: %s [OPTION]... FILE\n"
 msgstr "Usage: %s [OPTION]... FICHIER\n"
 
-#: src/getargs.c:107
+#: src/getargs.c:108
 msgid ""
 "If a long option shows an argument as mandatory, then it is mandatory\n"
 "for the equivalent short option also.  Similarly for optional arguments.\n"
@@ -126,7 +126,7 @@ msgstr ""
 "il est alors obligatoire également pour une option de forme courte.\n"
 "Il en est de même pour les arguments optionnels.\n"
 
-#: src/getargs.c:113
+#: src/getargs.c:114
 msgid ""
 "Operation modes:\n"
 "  -h, --help      display this help and exit\n"
@@ -138,7 +138,7 @@ msgstr ""
 "  -V, --version   afficher le nom et la version du logiciel\n"
 "  -y, --yacc      émuler yacc en mode POSIX\n"
 
-#: src/getargs.c:120
+#: src/getargs.c:121
 msgid ""
 "Parser:\n"
 "  -S, --skeleton=FILE        specify the skeleton to use\n"
@@ -160,7 +160,7 @@ msgstr ""
 "  -r, --raw                  compter les jetons à partir de 3\n"
 "  -k, --token-table          inclure la table des noms de jetons\n"
 
-#: src/getargs.c:132
+#: src/getargs.c:133
 #, fuzzy
 msgid ""
 "Output:\n"
@@ -180,7 +180,7 @@ msgstr ""
 "  -g, --graph                produire aussi la description du graphe VCG de "
 "l'automate\n"
 
-#: src/getargs.c:143
+#: src/getargs.c:144
 msgid ""
 "THINGS is a list of comma separated words that can include:\n"
 "  `state'        describe the states\n"
@@ -191,27 +191,27 @@ msgid ""
 "  `none'         disable the report\n"
 msgstr ""
 
-#: src/getargs.c:154
+#: src/getargs.c:155
 msgid "Report bugs to <bug-bison@gnu.org>.\n"
 msgstr "Rapporter toutes anomalies à <bug-bison@gnu.org>.\n"
 
-#: src/getargs.c:168
+#: src/getargs.c:169
 #, c-format
 msgid "bison (GNU Bison) %s"
 msgstr "bison (GNU Bison) %s"
 
-#: src/getargs.c:170
+#: src/getargs.c:171
 msgid "Written by Robert Corbett and Richard Stallman.\n"
 msgstr ""
 
-#: src/getargs.c:174
+#: src/getargs.c:175
 #, fuzzy, c-format
 msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
 msgstr ""
 "Copyright 1984, 1986, 1989, 1992, 2000, 2001, 2002 Free Software Foundation, "
 "Inc.\n"
 
-#: src/getargs.c:176
+#: src/getargs.c:177
 msgid ""
 "This is free software; see the source for copying conditions.  There is NO\n"
 "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
@@ -220,17 +220,17 @@ msgstr ""
 "reproduction. AUCUNE garantie n'est donnée; tant pour des raisons\n"
 "COMMERCIALES que pour RÉPONDRE À UN BESOIN PARTICULIER.\n"
 
-#: src/getargs.c:333
+#: src/getargs.c:334
 #, c-format
 msgid "Try `%s --help' for more information.\n"
 msgstr "Pour en savoir davantage, faites: « %s --help ».\n"
 
-#: src/getargs.c:340
+#: src/getargs.c:341
 #, c-format
 msgid "%s: no grammar file given\n"
 msgstr "%s: grammaire manquante\n"
 
-#: src/getargs.c:344
+#: src/getargs.c:345
 #, c-format
 msgid "%s: extra arguments ignored after `%s'\n"
 msgstr "%s: arguments supplémentaires ignorés après « %s »\n"
@@ -318,34 +318,64 @@ msgstr " 
 msgid " on right:"
 msgstr " à droite:"
 
-#: src/reader.c:52
+#: src/reader.c:53
 #, c-format
 msgid "multiple %s declarations"
 msgstr "multiples déclarations %s"
 
-#: src/reader.c:202
+#: src/reader.c:139
+#, c-format
+msgid "result type clash on merge function %s: `%s' vs. `%s'"
+msgstr ""
+
+#: src/reader.c:257
 #, c-format
 msgid "rule given for %s, which is a token"
 msgstr "la règle pour %s, qui est un terminal"
 
-#: src/reader.c:227
+#: src/reader.c:282
 #, c-format
 msgid "type clash (`%s' `%s') on default action"
 msgstr "conflit de type (« %s » « %s ») pour l'action par défaut"
 
-#: src/reader.c:235
+#: src/reader.c:290
 msgid "empty rule for typed nonterminal, and no action"
 msgstr "règle vide pour une catégorie typée et aucune action"
 
-#: src/reader.c:306
+#: src/reader.c:361
 msgid "two @prec's in a row"
 msgstr "deux @prec de suite"
 
-#: src/reader.c:447
+#: src/reader.c:371
+#, c-format
+msgid "%%dprec affects only GLR parsers"
+msgstr ""
+
+#: src/reader.c:373
+#, c-format
+msgid "%%dprec must be followed by positive number"
+msgstr ""
+
+#: src/reader.c:375
+#, c-format
+msgid "only one %%dprec allowed per rule"
+msgstr ""
+
+#: src/reader.c:386
+#, c-format
+msgid "%%merge affects only GLR parsers"
+msgstr ""
+
+#: src/reader.c:388
+#, c-format
+msgid "only one %%merge allowed per rule"
+msgstr ""
+
+#: src/reader.c:531
 msgid "no rules in the input grammar"
 msgstr "la grammaire n'a pas de règles"
 
-#: src/reader.c:479
+#: src/reader.c:563
 #, c-format
 msgid "too many symbols (tokens plus nonterminals); maximum %d"
 msgstr "trop de symboles (jeton plus non terminaux); maximum %d"
@@ -408,22 +438,22 @@ msgstr[1] "%d r
 msgid "Start symbol %s does not derive any sentence"
 msgstr "Aucune phrase ne peut être dérivée du symbole de départ %s"
 
-#: scan-gram.l:556
+#: scan-gram.l:559
 #, c-format
 msgid "$$ of `%s' has no declared type"
 msgstr "$$ de « %s » n'a pas son type déclaré"
 
-#: scan-gram.l:573 scan-gram.l:660
+#: scan-gram.l:576 scan-gram.l:663
 #, fuzzy, c-format
 msgid "invalid value: %s%d"
 msgstr "valeur @ invalide"
 
-#: scan-gram.l:580
+#: scan-gram.l:583
 #, c-format
 msgid "$%d of `%s' has no declared type"
 msgstr "$%d de « %s » n'a pas de type déclaré"
 
-#: scan-gram.l:591 scan-gram.l:608 scan-gram.l:667 scan-gram.l:684
+#: scan-gram.l:594 scan-gram.l:611 scan-gram.l:670 scan-gram.l:687
 #, c-format
 msgid "%s is invalid"
 msgstr "%s n'est pas valide"
index 78a156a..7a11c29 100644 (file)
--- a/po/hr.po
+++ b/po/hr.po
@@ -7,7 +7,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: bison 1.34a\n"
-"POT-Creation-Date: 2002-06-27 14:17+0200\n"
+"POT-Creation-Date: 2002-06-27 17:56-0700\n"
 "PO-Revision-Date: 2002-04-10 22:20+01\n"
 "Last-Translator: Denis Lackovic <delacko@fly.srk.fer.hr>\n"
 "Language-Team: Croatian <lokalizacija@linux.hr>\n"
@@ -48,49 +48,49 @@ msgstr "Konflikt u stanju %d izme
 msgid "    Conflict between rule %d and token %s resolved as an error"
 msgstr "Konflikt u stanju %d izmeðu pravila %d i znaka %s razrije¹en kao %s.\n"
 
-#: src/conflicts.c:375
+#: src/conflicts.c:378
 #, c-format
 msgid "%d shift/reduce conflict"
 msgid_plural "%d shift/reduce conflicts"
 msgstr[0] "%d pomakni/reduciraj konflikat"
 msgstr[1] "%d pomakni/reduciraj konflikata"
 
-#: src/conflicts.c:382
+#: src/conflicts.c:385
 msgid "and"
 msgstr "i"
 
-#: src/conflicts.c:388
+#: src/conflicts.c:391
 #, c-format
 msgid "%d reduce/reduce conflict"
 msgid_plural "%d reduce/reduce conflicts"
 msgstr[0] "%d reduciraj/reduciraj konflikt"
 msgstr[1] "%d reduciraj/reduciraj konflikata"
 
-#: src/conflicts.c:413
+#: src/conflicts.c:416
 #, c-format
 msgid "State %d contains "
 msgstr "Stanje %d sadr¾i"
 
-#: src/conflicts.c:460
+#: src/conflicts.c:487
 msgid "conflicts: "
 msgstr "konflikt:"
 
-#: src/conflicts.c:462
+#: src/conflicts.c:489
 #, c-format
 msgid " %d shift/reduce"
 msgstr " %d pomakni/reduciraj"
 
-#: src/conflicts.c:466
+#: src/conflicts.c:493
 #, c-format
 msgid " %d reduce/reduce"
 msgstr " %d reduviraj/reduciraj"
 
-#: src/conflicts.c:471
+#: src/conflicts.c:498
 #, c-format
 msgid "%s contains "
 msgstr "%s sadr¾i"
 
-#: src/conflicts.c:478
+#: src/conflicts.c:505
 #, c-format
 msgid "expected %d shift/reduce conflict\n"
 msgid_plural "expected %d shift/reduce conflicts\n"
@@ -106,16 +106,16 @@ msgstr "ne mogu otvoriti datoteku `%s'"
 msgid "cannot close file"
 msgstr "ne mogu zatvoriti datoteku"
 
-#: src/getargs.c:99
+#: src/getargs.c:100
 msgid "GNU bison generates parsers for LALR(1) grammars.\n"
 msgstr "GNU bison generira parsere za LALR(1) gramatike.\n"
 
-#: src/getargs.c:103
+#: src/getargs.c:104
 #, c-format
 msgid "Usage: %s [OPTION]... FILE\n"
 msgstr "Kori¹tenje: %s [OPCIJA]... DATOTEKA\n"
 
-#: src/getargs.c:107
+#: src/getargs.c:108
 msgid ""
 "If a long option shows an argument as mandatory, then it is mandatory\n"
 "for the equivalent short option also.  Similarly for optional arguments.\n"
@@ -123,7 +123,7 @@ msgstr ""
 "Ako duga opcija ka¾e da je argument obavezan, tada je on obavezan\n"
 "i za ekvivalentnu kratku opciju. Slièno je i za opcionalne argumente.\n"
 
-#: src/getargs.c:113
+#: src/getargs.c:114
 msgid ""
 "Operation modes:\n"
 "  -h, --help      display this help and exit\n"
@@ -135,7 +135,7 @@ msgstr ""
 "  -V, --version   prika¾i verziju i izaði\n"
 "  -y, --yacc      emuliraj POSIX yacc\n"
 
-#: src/getargs.c:120
+#: src/getargs.c:121
 msgid ""
 "Parser:\n"
 "  -S, --skeleton=FILE        specify the skeleton to use\n"
@@ -155,7 +155,7 @@ msgstr ""
 "  -n, --no-parser            generiraj samo tablice\n"
 "  -k, --token-table          ukljuèi tablicu imena znakova\n"
 
-#: src/getargs.c:132
+#: src/getargs.c:133
 #, fuzzy
 msgid ""
 "Output:\n"
@@ -174,7 +174,7 @@ msgstr ""
 "  -o, --output=DATOTEKA          ispi¹i izlaz u DATOTEKU\n"
 "  -g, --graph                takoðer proizvedi VCG opis automata\n"
 
-#: src/getargs.c:143
+#: src/getargs.c:144
 msgid ""
 "THINGS is a list of comma separated words that can include:\n"
 "  `state'        describe the states\n"
@@ -185,27 +185,27 @@ msgid ""
 "  `none'         disable the report\n"
 msgstr ""
 
-#: src/getargs.c:154
+#: src/getargs.c:155
 msgid "Report bugs to <bug-bison@gnu.org>.\n"
 msgstr "Izvjesti o bugovima na <bug-bison@gnu.org>.\n"
 
-#: src/getargs.c:168
+#: src/getargs.c:169
 #, c-format
 msgid "bison (GNU Bison) %s"
 msgstr "bison (GNU Bison) %s"
 
-#: src/getargs.c:170
+#: src/getargs.c:171
 msgid "Written by Robert Corbett and Richard Stallman.\n"
 msgstr ""
 
-#: src/getargs.c:174
+#: src/getargs.c:175
 #, fuzzy, c-format
 msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
 msgstr ""
 "Copyright 1984, 1986, 1989, 1992, 2000, 2001, 2002\n"
 "Free Software Foundation, Inc.\n"
 
-#: src/getargs.c:176
+#: src/getargs.c:177
 msgid ""
 "This is free software; see the source for copying conditions.  There is NO\n"
 "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
@@ -214,17 +214,17 @@ msgstr ""
 "kopiranja.  NEMA\n"
 "garancije; èak ni tvrdnje o ISPLATIVOSTI ili POGODNOSTI ZA NEKU SVRHU.\n"
 
-#: src/getargs.c:333
+#: src/getargs.c:334
 #, c-format
 msgid "Try `%s --help' for more information.\n"
 msgstr "Poku¹aj `%s --help' za vi¹e informacija.\n"
 
-#: src/getargs.c:340
+#: src/getargs.c:341
 #, c-format
 msgid "%s: no grammar file given\n"
 msgstr "%s: nije data datoteka sa gramatikom\n"
 
-#: src/getargs.c:344
+#: src/getargs.c:345
 #, c-format
 msgid "%s: extra arguments ignored after `%s'\n"
 msgstr "%s: dodatni argumenti se ignoriraju nakon `%s'\n"
@@ -312,34 +312,64 @@ msgstr "s lijeva:"
 msgid " on right:"
 msgstr "s desna:"
 
-#: src/reader.c:52
+#: src/reader.c:53
 #, c-format
 msgid "multiple %s declarations"
 msgstr "vi¹estruke %s deklaracije"
 
-#: src/reader.c:202
+#: src/reader.c:139
+#, c-format
+msgid "result type clash on merge function %s: `%s' vs. `%s'"
+msgstr ""
+
+#: src/reader.c:257
 #, c-format
 msgid "rule given for %s, which is a token"
 msgstr "pravilo dato za %s, a to je znak"
 
-#: src/reader.c:227
+#: src/reader.c:282
 #, c-format
 msgid "type clash (`%s' `%s') on default action"
 msgstr "sudar tipova (`%s' `%s') na deaultnoj akciji"
 
-#: src/reader.c:235
+#: src/reader.c:290
 msgid "empty rule for typed nonterminal, and no action"
 msgstr "prazno pravilo za nezavr¹ni znak, i nema akcije"
 
-#: src/reader.c:306
+#: src/reader.c:361
 msgid "two @prec's in a row"
 msgstr "dva @prec's u retku"
 
-#: src/reader.c:447
+#: src/reader.c:371
+#, c-format
+msgid "%%dprec affects only GLR parsers"
+msgstr ""
+
+#: src/reader.c:373
+#, c-format
+msgid "%%dprec must be followed by positive number"
+msgstr ""
+
+#: src/reader.c:375
+#, c-format
+msgid "only one %%dprec allowed per rule"
+msgstr ""
+
+#: src/reader.c:386
+#, c-format
+msgid "%%merge affects only GLR parsers"
+msgstr ""
+
+#: src/reader.c:388
+#, c-format
+msgid "only one %%merge allowed per rule"
+msgstr ""
+
+#: src/reader.c:531
 msgid "no rules in the input grammar"
 msgstr "nema pravila u ulaznoj gramatici"
 
-#: src/reader.c:479
+#: src/reader.c:563
 #, c-format
 msgid "too many symbols (tokens plus nonterminals); maximum %d"
 msgstr "previ¹e simbola (znakovi plus nezavr¹ni znakovi); maksimalno %d"
@@ -402,22 +432,22 @@ msgstr[1] "%d beskorisnih pravila"
 msgid "Start symbol %s does not derive any sentence"
 msgstr "Poèetni simbol %s ne daje niti jednu reèenicu"
 
-#: scan-gram.l:556
+#: scan-gram.l:559
 #, c-format
 msgid "$$ of `%s' has no declared type"
 msgstr "$$ od `%s' nema deklarirani tip"
 
-#: scan-gram.l:573 scan-gram.l:660
+#: scan-gram.l:576 scan-gram.l:663
 #, fuzzy, c-format
 msgid "invalid value: %s%d"
 msgstr "nedozvoljena  @ vrijednost"
 
-#: scan-gram.l:580
+#: scan-gram.l:583
 #, c-format
 msgid "$%d of `%s' has no declared type"
 msgstr "$%d od `%s' nema deklarirani tip"
 
-#: scan-gram.l:591 scan-gram.l:608 scan-gram.l:667 scan-gram.l:684
+#: scan-gram.l:594 scan-gram.l:611 scan-gram.l:670 scan-gram.l:687
 #, c-format
 msgid "%s is invalid"
 msgstr "%s je nedozvoljeno"
index 131aa26..3fc0636 100644 (file)
--- a/po/it.po
+++ b/po/it.po
@@ -5,7 +5,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: bison 1.31\n"
-"POT-Creation-Date: 2002-06-27 14:17+0200\n"
+"POT-Creation-Date: 2002-06-27 17:56-0700\n"
 "PO-Revision-Date: 2002-01-18 12:40 CET\n"
 "Last-Translator: Paolo Bonzini <bonzini@gnu.org>\n"
 "Language-Team: Italian <it@li.org>\n"
@@ -49,49 +49,49 @@ msgid "    Conflict between rule %d and token %s resolved as an error"
 msgstr ""
 "Conflitto nello stato %d tra la regola %d e il token %s risolto come %s.\n"
 
-#: src/conflicts.c:375
+#: src/conflicts.c:378
 #, c-format
 msgid "%d shift/reduce conflict"
 msgid_plural "%d shift/reduce conflicts"
 msgstr[0] "%d conflitto shift/riduzione"
 msgstr[1] "%d conflitti shift/riduzione"
 
-#: src/conflicts.c:382
+#: src/conflicts.c:385
 msgid "and"
 msgstr "e"
 
-#: src/conflicts.c:388
+#: src/conflicts.c:391
 #, c-format
 msgid "%d reduce/reduce conflict"
 msgid_plural "%d reduce/reduce conflicts"
 msgstr[0] "%d conflitto riduzione/riduzione"
 msgstr[1] "%d conflitti riduzione/riduzione"
 
-#: src/conflicts.c:413
+#: src/conflicts.c:416
 #, c-format
 msgid "State %d contains "
 msgstr "Lo stato %d contiene"
 
-#: src/conflicts.c:460
+#: src/conflicts.c:487
 msgid "conflicts: "
 msgstr "conflitti: "
 
-#: src/conflicts.c:462
+#: src/conflicts.c:489
 #, c-format
 msgid " %d shift/reduce"
 msgstr " %d shift/riduzione"
 
-#: src/conflicts.c:466
+#: src/conflicts.c:493
 #, c-format
 msgid " %d reduce/reduce"
 msgstr " %d riduzione/riduzione"
 
-#: src/conflicts.c:471
+#: src/conflicts.c:498
 #, c-format
 msgid "%s contains "
 msgstr "%s contiene "
 
-#: src/conflicts.c:478
+#: src/conflicts.c:505
 #, c-format
 msgid "expected %d shift/reduce conflict\n"
 msgid_plural "expected %d shift/reduce conflicts\n"
@@ -107,16 +107,16 @@ msgstr "impossibile aprire il file `%s'"
 msgid "cannot close file"
 msgstr "impossibile chiudere il file `%s'"
 
-#: src/getargs.c:99
+#: src/getargs.c:100
 msgid "GNU bison generates parsers for LALR(1) grammars.\n"
 msgstr "GNU bison genera parser per grammatiche LALR(1).\n"
 
-#: src/getargs.c:103
+#: src/getargs.c:104
 #, c-format
 msgid "Usage: %s [OPTION]... FILE\n"
 msgstr "Utilizzo: %s [OPZIONE]... FILE\n"
 
-#: src/getargs.c:107
+#: src/getargs.c:108
 msgid ""
 "If a long option shows an argument as mandatory, then it is mandatory\n"
 "for the equivalent short option also.  Similarly for optional arguments.\n"
@@ -125,7 +125,7 @@ msgstr ""
 "è obbligatorio anche per l'equivalente opzione corta.  Analogamente per\n"
 "gli argomenti opzionali.\n"
 
-#: src/getargs.c:113
+#: src/getargs.c:114
 msgid ""
 "Operation modes:\n"
 "  -h, --help      display this help and exit\n"
@@ -137,7 +137,7 @@ msgstr ""
 "  -V, --version   mostra informazioni sulla versione ed esce\n"
 "  -y, --yacc      emula il comportamento di POSIX yacc\n"
 
-#: src/getargs.c:120
+#: src/getargs.c:121
 msgid ""
 "Parser:\n"
 "  -S, --skeleton=FILE        specify the skeleton to use\n"
@@ -156,7 +156,7 @@ msgstr ""
 "  -n, --no-parser            genera le sole tabelle\n"
 "  -k, --token-table          include una tabella di nomi dei token\n"
 
-#: src/getargs.c:132
+#: src/getargs.c:133
 #, fuzzy
 msgid ""
 "Output:\n"
@@ -175,7 +175,7 @@ msgstr ""
 "  -o, --output=FILE          lascia l'output in FILE\n"
 "  -g, --graph                produce anche una descrizione VCG dell'automa\n"
 
-#: src/getargs.c:143
+#: src/getargs.c:144
 msgid ""
 "THINGS is a list of comma separated words that can include:\n"
 "  `state'        describe the states\n"
@@ -186,26 +186,26 @@ msgid ""
 "  `none'         disable the report\n"
 msgstr ""
 
-#: src/getargs.c:154
+#: src/getargs.c:155
 msgid "Report bugs to <bug-bison@gnu.org>.\n"
 msgstr "Segnalare eventuali bug a <bug-bison@gnu.org>.\n"
 
-#: src/getargs.c:168
+#: src/getargs.c:169
 #, c-format
 msgid "bison (GNU Bison) %s"
 msgstr "bison (GNU Bison) %s"
 
-#: src/getargs.c:170
+#: src/getargs.c:171
 msgid "Written by Robert Corbett and Richard Stallman.\n"
 msgstr ""
 
-#: src/getargs.c:174
+#: src/getargs.c:175
 #, fuzzy, c-format
 msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
 msgstr ""
 "Copyright 1984, 1986, 1989, 1992, 2000, 2001 Free Software Foundation, Inc.\n"
 
-#: src/getargs.c:176
+#: src/getargs.c:177
 msgid ""
 "This is free software; see the source for copying conditions.  There is NO\n"
 "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
@@ -214,17 +214,17 @@ msgstr ""
 "sottoposta la copia. NON c'è ALCUNA garanzia, neanche di\n"
 "COMMERCIABILITA` o di ADEGUATEZZA AD UN PARTICOLARE SCOPO.\n"
 
-#: src/getargs.c:333
+#: src/getargs.c:334
 #, c-format
 msgid "Try `%s --help' for more information.\n"
 msgstr "Provare `%s --help' per ulteriori informazioni.\n"
 
-#: src/getargs.c:340
+#: src/getargs.c:341
 #, c-format
 msgid "%s: no grammar file given\n"
 msgstr "%s: nessun file grammatica specificato\n"
 
-#: src/getargs.c:344
+#: src/getargs.c:345
 #, c-format
 msgid "%s: extra arguments ignored after `%s'\n"
 msgstr "%s: ignorati gli argomenti successivi a `%s'\n"
@@ -312,34 +312,64 @@ msgstr " nel primo membro:"
 msgid " on right:"
 msgstr " nel secondo membro:"
 
-#: src/reader.c:52
+#: src/reader.c:53
 #, c-format
 msgid "multiple %s declarations"
 msgstr "dichiarazioni multiple per %s"
 
-#: src/reader.c:202
+#: src/reader.c:139
+#, c-format
+msgid "result type clash on merge function %s: `%s' vs. `%s'"
+msgstr ""
+
+#: src/reader.c:257
 #, c-format
 msgid "rule given for %s, which is a token"
 msgstr "fornita una regola per il token %s"
 
-#: src/reader.c:227
+#: src/reader.c:282
 #, c-format
 msgid "type clash (`%s' `%s') on default action"
 msgstr "conflitto di tipo (`%s' e `%s') nell'azione di default"
 
-#: src/reader.c:235
+#: src/reader.c:290
 msgid "empty rule for typed nonterminal, and no action"
 msgstr "regola vuota e nessuna azione per un nonterminale con tipo"
 
-#: src/reader.c:306
+#: src/reader.c:361
 msgid "two @prec's in a row"
 msgstr "due @prec di seguito"
 
-#: src/reader.c:447
+#: src/reader.c:371
+#, c-format
+msgid "%%dprec affects only GLR parsers"
+msgstr ""
+
+#: src/reader.c:373
+#, c-format
+msgid "%%dprec must be followed by positive number"
+msgstr ""
+
+#: src/reader.c:375
+#, c-format
+msgid "only one %%dprec allowed per rule"
+msgstr ""
+
+#: src/reader.c:386
+#, c-format
+msgid "%%merge affects only GLR parsers"
+msgstr ""
+
+#: src/reader.c:388
+#, c-format
+msgid "only one %%merge allowed per rule"
+msgstr ""
+
+#: src/reader.c:531
 msgid "no rules in the input grammar"
 msgstr "nessuna regola nella grammatica di input"
 
-#: src/reader.c:479
+#: src/reader.c:563
 #, c-format
 msgid "too many symbols (tokens plus nonterminals); maximum %d"
 msgstr "troppi simboli (token e nonterminali); il massimo è %d"
@@ -402,22 +432,22 @@ msgstr[1] "%d regole inutili"
 msgid "Start symbol %s does not derive any sentence"
 msgstr "dal simbolo iniziale %s non deriva alcuna frase"
 
-#: scan-gram.l:556
+#: scan-gram.l:559
 #, c-format
 msgid "$$ of `%s' has no declared type"
 msgstr "Manca una dichiarazione di tipo per $$ di `%s'"
 
-#: scan-gram.l:573 scan-gram.l:660
+#: scan-gram.l:576 scan-gram.l:663
 #, c-format
 msgid "invalid value: %s%d"
 msgstr "valore non valido: %s%d"
 
-#: scan-gram.l:580
+#: scan-gram.l:583
 #, c-format
 msgid "$%d of `%s' has no declared type"
 msgstr "Manca una dichiarazione di tipo per $%d di `%s'"
 
-#: scan-gram.l:591 scan-gram.l:608 scan-gram.l:667 scan-gram.l:684
+#: scan-gram.l:594 scan-gram.l:611 scan-gram.l:670 scan-gram.l:687
 #, c-format
 msgid "%s is invalid"
 msgstr "%s non è valido"
index 51906dd..c6d486d 100644 (file)
--- a/po/ja.po
+++ b/po/ja.po
@@ -5,7 +5,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: GNU bison 1.30f\n"
-"POT-Creation-Date: 2002-06-27 14:17+0200\n"
+"POT-Creation-Date: 2002-06-27 17:56-0700\n"
 "PO-Revision-Date: 2001-12-10 15:59+0900\n"
 "Last-Translator: Daisuke Yamashita <yamad@mb.infoweb.ne.jp>\n"
 "Language-Team: Japanese <ja@li.org>\n"
@@ -46,47 +46,47 @@ msgstr "
 msgid "    Conflict between rule %d and token %s resolved as an error"
 msgstr "¾õÂÖ %d ¤Îµ¬Â§ %d ¤È¥È¡¼¥¯¥ó %s ¤Î¶¥¹ç¤ò%s¤È¤·¤Æ²ò·è¡£\n"
 
-#: src/conflicts.c:375
+#: src/conflicts.c:378
 #, c-format
 msgid "%d shift/reduce conflict"
 msgid_plural "%d shift/reduce conflicts"
 msgstr[0] "%d ¥·¥Õ¥È/´Ô¸µ¾×ÆÍ"
 
-#: src/conflicts.c:382
+#: src/conflicts.c:385
 msgid "and"
 msgstr "¤ª¤è¤Ó"
 
-#: src/conflicts.c:388
+#: src/conflicts.c:391
 #, c-format
 msgid "%d reduce/reduce conflict"
 msgid_plural "%d reduce/reduce conflicts"
 msgstr[0] "%d ´Ô¸µ/´Ô¸µ¾×ÆÍ"
 
-#: src/conflicts.c:413
+#: src/conflicts.c:416
 #, c-format
 msgid "State %d contains "
 msgstr "¾õÂÖ %d ¤¬´Þ¤à¤Î¤Ï "
 
-#: src/conflicts.c:460
+#: src/conflicts.c:487
 msgid "conflicts: "
 msgstr "¾×ÆÍ: "
 
-#: src/conflicts.c:462
+#: src/conflicts.c:489
 #, c-format
 msgid " %d shift/reduce"
 msgstr " %d ¥·¥Õ¥È/´Ô¸µ"
 
-#: src/conflicts.c:466
+#: src/conflicts.c:493
 #, c-format
 msgid " %d reduce/reduce"
 msgstr " %d ´Ô¸µ/´Ô¸µ"
 
-#: src/conflicts.c:471
+#: src/conflicts.c:498
 #, c-format
 msgid "%s contains "
 msgstr "%s ¤ÎÃæ¿È¤Ï"
 
-#: src/conflicts.c:478
+#: src/conflicts.c:505
 #, c-format
 msgid "expected %d shift/reduce conflict\n"
 msgid_plural "expected %d shift/reduce conflicts\n"
@@ -101,16 +101,16 @@ msgstr "
 msgid "cannot close file"
 msgstr "¥Õ¥¡¥¤¥ë¤òÊĤ¸¤ë¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó"
 
-#: src/getargs.c:99
+#: src/getargs.c:100
 msgid "GNU bison generates parsers for LALR(1) grammars.\n"
 msgstr "GNU bison ¤Ï LALR(1) Ê¸Ë¡¤Î¹½Ê¸²òÀÏ´ï¤òÀ¸À®¤·¤Þ¤¹¡£\n"
 
-#: src/getargs.c:103
+#: src/getargs.c:104
 #, c-format
 msgid "Usage: %s [OPTION]... FILE\n"
 msgstr "»È¤¤Êý: %s [¥ª¥×¥·¥ç¥ó]... ¥Õ¥¡¥¤¥ë\n"
 
-#: src/getargs.c:107
+#: src/getargs.c:108
 msgid ""
 "If a long option shows an argument as mandatory, then it is mandatory\n"
 "for the equivalent short option also.  Similarly for optional arguments.\n"
@@ -118,7 +118,7 @@ msgstr ""
 "¥í¥ó¥°¥ª¥×¥·¥ç¥ó¤Çɬ¿Ü¤Î°ú¿ô¤¬¼¨¤µ¤ì¤Æ¤¤¤ì¤Ð¡¢Æ±¤¸°ÕÌ£¤Î¥·¥ç¡¼¥È¥ª¥×¥·¥ç¥ó\n"
 "¤Ç¤âƱÍͤËɬ¿Ü¤Î°ú¿ô¤È¤Ê¤ê¤Þ¤¹¡£É¬¿Ü¤Ç¤Ê¤¤ÁªÂòŪ°ú¿ô¤Ç¤âƱÍͤǤ¹¡£\n"
 
-#: src/getargs.c:113
+#: src/getargs.c:114
 msgid ""
 "Operation modes:\n"
 "  -h, --help      display this help and exit\n"
@@ -130,7 +130,7 @@ msgstr ""
 "  -V, --version   ¥Ð¡¼¥¸¥ç¥ó¾ðÊó¤òɽ¼¨¤·¤Æ½ªÎ»¤¹¤ë\n"
 "  -y, --yacc      POSIX yacc ¤ò¥¨¥ß¥å¥ì¥¤¥È¤¹¤ë\n"
 
-#: src/getargs.c:120
+#: src/getargs.c:121
 msgid ""
 "Parser:\n"
 "  -S, --skeleton=FILE        specify the skeleton to use\n"
@@ -150,7 +150,7 @@ msgstr ""
 "  -n, --no-parser            ¥Æ¡¼¥Ö¥ë¤Î¤ß¤òÀ¸À®¤¹¤ë\n"
 "  -k, --token-table          ¥È¡¼¥¯¥ó̾¤Î¥Æ¡¼¥Ö¥ë¤ò´Þ¤á¤ë\n"
 
-#: src/getargs.c:132
+#: src/getargs.c:133
 #, fuzzy
 msgid ""
 "Output:\n"
@@ -169,7 +169,7 @@ msgstr ""
 "  -o, --output=FILE          ½ÐÎÏÀè¤ò FILE ¤È¤¹¤ë\n"
 "  -g, --graph                ¥ª¡¼¥È¥Þ¥È¥ó¤Î VCG µ­½Ò»Ò¤âºîÀ®¤¹¤ë\n"
 
-#: src/getargs.c:143
+#: src/getargs.c:144
 msgid ""
 "THINGS is a list of comma separated words that can include:\n"
 "  `state'        describe the states\n"
@@ -180,26 +180,26 @@ msgid ""
 "  `none'         disable the report\n"
 msgstr ""
 
-#: src/getargs.c:154
+#: src/getargs.c:155
 msgid "Report bugs to <bug-bison@gnu.org>.\n"
 msgstr "¥Ð¥°¥ì¥Ý¡¼¥È¤Ï <bug-bison@gnu.org> ¤Þ¤Ç¡£\n"
 
-#: src/getargs.c:168
+#: src/getargs.c:169
 #, c-format
 msgid "bison (GNU Bison) %s"
 msgstr "bison (GNU Bison) %s"
 
-#: src/getargs.c:170
+#: src/getargs.c:171
 msgid "Written by Robert Corbett and Richard Stallman.\n"
 msgstr ""
 
-#: src/getargs.c:174
+#: src/getargs.c:175
 #, fuzzy, c-format
 msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
 msgstr ""
 "Copyright 1984, 1986, 1989, 1992, 2000, 2001 Free Software Foundation, Inc.\n"
 
-#: src/getargs.c:176
+#: src/getargs.c:177
 msgid ""
 "This is free software; see the source for copying conditions.  There is NO\n"
 "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
@@ -210,17 +210,17 @@ msgstr ""
 "¤³¤ì¤Ï¥Õ¥ê¡¼¥½¥Õ¥È¥¦¥§¥¢¤Ç¤¹ -- Ê£À½¤Ë¤Ä¤¤¤Æ¤Î¾ò·ï¤Ï¥½¡¼¥¹¤ò¸«¤Þ¤·¤ç¤¦¡£\n"
 "°ìÀÚ¤ÎÊݾڤϤ¢¤ê¤Þ¤»¤ó -- ¾¦¶ÈÀ­¤äÌÜŪŬ¹çÀ­¤Ë¤Ä¤¤¤Æ¤ÎÊݾڤ¹¤é¤¢¤ê¤Þ¤»¤ó¡£\n"
 
-#: src/getargs.c:333
+#: src/getargs.c:334
 #, c-format
 msgid "Try `%s --help' for more information.\n"
 msgstr "`%s --help' ¤Ç¾ÜºÙ¾ðÊó¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤\n"
 
-#: src/getargs.c:340
+#: src/getargs.c:341
 #, c-format
 msgid "%s: no grammar file given\n"
 msgstr "%s: Ê¸Ë¡¥Õ¥¡¥¤¥ë¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó\n"
 
-#: src/getargs.c:344
+#: src/getargs.c:345
 #, c-format
 msgid "%s: extra arguments ignored after `%s'\n"
 msgstr "%s: `%s' ¤Î¸å¤í¤Î;ʬ¤Ê°ú¿ô¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿\n"
@@ -308,34 +308,64 @@ msgstr " 
 msgid " on right:"
 msgstr " ±¦ÊÕ:"
 
-#: src/reader.c:52
+#: src/reader.c:53
 #, c-format
 msgid "multiple %s declarations"
 msgstr "%s ¤¬Ê£¿ô¸ÄÀë¸À¤µ¤ì¤Þ¤·¤¿"
 
-#: src/reader.c:202
+#: src/reader.c:139
+#, c-format
+msgid "result type clash on merge function %s: `%s' vs. `%s'"
+msgstr ""
+
+#: src/reader.c:257
 #, c-format
 msgid "rule given for %s, which is a token"
 msgstr "%s ¤Ëµ¬Â§¤¬Í¿¤¨¤é¤ì¡¢¤½¤ì¤Ï¥È¡¼¥¯¥ó¤È¤Ê¤ê¤Þ¤¹"
 
-#: src/reader.c:227
+#: src/reader.c:282
 #, c-format
 msgid "type clash (`%s' `%s') on default action"
 msgstr "½é´ü¾õÂÖ¤ÎÆ°ºî¤Ç¤Ï·¿ (`%s' `%s') ¤¬¾×Æͤ·¤Þ¤¹"
 
-#: src/reader.c:235
+#: src/reader.c:290
 msgid "empty rule for typed nonterminal, and no action"
 msgstr "¶õ¤Î·¿ÉÕ¤­Èó½ªÃ¼¥¢¥¤¥Æ¥àÍѵ¬Â§¤Ç¤¢¤ê¡¢Æ°ºî¤¬µ¯¤ê¤Þ¤»¤ó"
 
-#: src/reader.c:306
+#: src/reader.c:361
 msgid "two @prec's in a row"
 msgstr "@prec ¤Î¤â¤ÎÆó¤Ä¤¬Æ±Îó¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹"
 
-#: src/reader.c:447
+#: src/reader.c:371
+#, c-format
+msgid "%%dprec affects only GLR parsers"
+msgstr ""
+
+#: src/reader.c:373
+#, c-format
+msgid "%%dprec must be followed by positive number"
+msgstr ""
+
+#: src/reader.c:375
+#, c-format
+msgid "only one %%dprec allowed per rule"
+msgstr ""
+
+#: src/reader.c:386
+#, c-format
+msgid "%%merge affects only GLR parsers"
+msgstr ""
+
+#: src/reader.c:388
+#, c-format
+msgid "only one %%merge allowed per rule"
+msgstr ""
+
+#: src/reader.c:531
 msgid "no rules in the input grammar"
 msgstr "ÆþÎϤ·¤¿Ê¸Ë¡¤Ëµ¬Â§¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
 
-#: src/reader.c:479
+#: src/reader.c:563
 #, c-format
 msgid "too many symbols (tokens plus nonterminals); maximum %d"
 msgstr "¥·¥ó¥Ü¥ë¤¬Â¿¤¹¤®¤Þ¤¹ (¥È¡¼¥¯¥ó + Èó½ªÃ¼¥¢¥¤¥Æ¥à) -- ºÇÂç %d"
@@ -395,22 +425,22 @@ msgstr[0] "%d 
 msgid "Start symbol %s does not derive any sentence"
 msgstr "³«»Ï¥·¥ó¥Ü¥ë %s ¤Ï¤É¤Îʸ¤Ë¤âͳÍ褷¤Þ¤»¤ó"
 
-#: scan-gram.l:556
+#: scan-gram.l:559
 #, c-format
 msgid "$$ of `%s' has no declared type"
 msgstr "`%s' ¤Î $$ ¤ËÀë¸À¤Î¤Ê¤¤·¿¤¬¤¢¤ê¤Þ¤¹"
 
-#: scan-gram.l:573 scan-gram.l:660
+#: scan-gram.l:576 scan-gram.l:663
 #, fuzzy, c-format
 msgid "invalid value: %s%d"
 msgstr "ÉÔŬÀڤʠ$ ¤ÎÃÍ"
 
-#: scan-gram.l:580
+#: scan-gram.l:583
 #, c-format
 msgid "$%d of `%s' has no declared type"
 msgstr "$%d ¸Ä¤Î `%s' ¤¬Àë¸À¤µ¤ì¤¿·¿¤ò»ý¤Ã¤Æ¤¤¤Þ¤»¤ó"
 
-#: scan-gram.l:591 scan-gram.l:608 scan-gram.l:667 scan-gram.l:684
+#: scan-gram.l:594 scan-gram.l:611 scan-gram.l:670 scan-gram.l:687
 #, c-format
 msgid "%s is invalid"
 msgstr "%s ¤ÏÉÔŬÀڤǤ¹"
index d5f4007..2a19b06 100644 (file)
--- a/po/nl.po
+++ b/po/nl.po
@@ -6,7 +6,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: bison 1.34a\n"
-"POT-Creation-Date: 2002-06-27 14:17+0200\n"
+"POT-Creation-Date: 2002-06-27 17:56-0700\n"
 "PO-Revision-Date: 2002-03-20 12:54+0100\n"
 "Last-Translator: Tim Van Holder <tim.van.holder@pandora.be>\n"
 "Language-Team: Dutch <vertaling@nl.linux.org>\n"
@@ -50,49 +50,49 @@ msgid "    Conflict between rule %d and token %s resolved as an error"
 msgstr ""
 "Conflict in staat %d tussen regel %d en token %s opgelost als \"%s\".\n"
 
-#: src/conflicts.c:375
+#: src/conflicts.c:378
 #, c-format
 msgid "%d shift/reduce conflict"
 msgid_plural "%d shift/reduce conflicts"
 msgstr[0] "%d shift/reductie conflict"
 msgstr[1] "%d shift/reductie conflicten"
 
-#: src/conflicts.c:382
+#: src/conflicts.c:385
 msgid "and"
 msgstr "en"
 
-#: src/conflicts.c:388
+#: src/conflicts.c:391
 #, c-format
 msgid "%d reduce/reduce conflict"
 msgid_plural "%d reduce/reduce conflicts"
 msgstr[0] "%d reductie/reductie conflict"
 msgstr[1] "%d reductie/reductie conflicten"
 
-#: src/conflicts.c:413
+#: src/conflicts.c:416
 #, c-format
 msgid "State %d contains "
 msgstr "Staat %d bevat"
 
-#: src/conflicts.c:460
+#: src/conflicts.c:487
 msgid "conflicts: "
 msgstr "conflicten: "
 
-#: src/conflicts.c:462
+#: src/conflicts.c:489
 #, c-format
 msgid " %d shift/reduce"
 msgstr " %d vershuif/reductie"
 
-#: src/conflicts.c:466
+#: src/conflicts.c:493
 #, c-format
 msgid " %d reduce/reduce"
 msgstr " %d reductie/reductie"
 
-#: src/conflicts.c:471
+#: src/conflicts.c:498
 #, c-format
 msgid "%s contains "
 msgstr "%s bevat"
 
-#: src/conflicts.c:478
+#: src/conflicts.c:505
 #, c-format
 msgid "expected %d shift/reduce conflict\n"
 msgid_plural "expected %d shift/reduce conflicts\n"
@@ -109,16 +109,16 @@ msgid "cannot close file"
 msgstr "kan bestand niet sluiten"
 
 # Dank U, Akim :-)
-#: src/getargs.c:99
+#: src/getargs.c:100
 msgid "GNU bison generates parsers for LALR(1) grammars.\n"
 msgstr "GNU bison genereert parsers voor LALR(1) grammatica's.\n"
 
-#: src/getargs.c:103
+#: src/getargs.c:104
 #, c-format
 msgid "Usage: %s [OPTION]... FILE\n"
 msgstr "Gebruik: %s [OPTIE]... BESTAND\n"
 
-#: src/getargs.c:107
+#: src/getargs.c:108
 msgid ""
 "If a long option shows an argument as mandatory, then it is mandatory\n"
 "for the equivalent short option also.  Similarly for optional arguments.\n"
@@ -128,7 +128,7 @@ msgstr ""
 "optionele argumenten geldt dezelfde regel.\n"
 
 # Misschien beter 'een POSIX-compatibele yacc'?
-#: src/getargs.c:113
+#: src/getargs.c:114
 msgid ""
 "Operation modes:\n"
 "  -h, --help      display this help and exit\n"
@@ -142,7 +142,7 @@ msgstr ""
 
 # Correcte vervoeging van 'voorvoegen'?
 # Betere vertaling voor 'directives'?
-#: src/getargs.c:120
+#: src/getargs.c:121
 msgid ""
 "Parser:\n"
 "  -S, --skeleton=FILE        specify the skeleton to use\n"
@@ -162,7 +162,7 @@ msgstr ""
 "  -n, --no-parser            genereer alleen de tabellen\n"
 "  -k, --token-table          genereer ook een tabel van tokennamen\n"
 
-#: src/getargs.c:132
+#: src/getargs.c:133
 #, fuzzy
 msgid ""
 "Output:\n"
@@ -182,7 +182,7 @@ msgstr ""
 "  -g, --graph                genereer ook een VCG beschrijving van de "
 "automaat\n"
 
-#: src/getargs.c:143
+#: src/getargs.c:144
 msgid ""
 "THINGS is a list of comma separated words that can include:\n"
 "  `state'        describe the states\n"
@@ -193,29 +193,29 @@ msgid ""
 "  `none'         disable the report\n"
 msgstr ""
 
-#: src/getargs.c:154
+#: src/getargs.c:155
 msgid "Report bugs to <bug-bison@gnu.org>.\n"
 msgstr ""
 "Meld bugs aan <bug-bison@gnu.org>.\n"
 "Meld fouten in de vertaling aan <vertaling@nl.linux.org>.\n"
 
-#: src/getargs.c:168
+#: src/getargs.c:169
 #, c-format
 msgid "bison (GNU Bison) %s"
 msgstr "bison (GNU Bison) %s"
 
-#: src/getargs.c:170
+#: src/getargs.c:171
 msgid "Written by Robert Corbett and Richard Stallman.\n"
 msgstr ""
 
-#: src/getargs.c:174
+#: src/getargs.c:175
 #, fuzzy, c-format
 msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
 msgstr ""
 "Copyright 1984, 1986, 1989, 1992, 2000, 2001, 2002\n"
 "Free Software Foundation, Inc.\n"
 
-#: src/getargs.c:176
+#: src/getargs.c:177
 msgid ""
 "This is free software; see the source for copying conditions.  There is NO\n"
 "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
@@ -224,17 +224,17 @@ msgstr ""
 "garantie; zelfs niet voor VERKOOPBAARHEID of GESCHIKTHEID VOOR EEN BEPAALD\n"
 "DOEL.\n"
 
-#: src/getargs.c:333
+#: src/getargs.c:334
 #, c-format
 msgid "Try `%s --help' for more information.\n"
 msgstr "Probeer `%s --help' voor meer informatie.\n"
 
-#: src/getargs.c:340
+#: src/getargs.c:341
 #, c-format
 msgid "%s: no grammar file given\n"
 msgstr "%s: geen grammaticabestand opgegeven\n"
 
-#: src/getargs.c:344
+#: src/getargs.c:345
 #, c-format
 msgid "%s: extra arguments ignored after `%s'\n"
 msgstr "%s: extra argumenten na `%s' worden genegeerd\n"
@@ -323,34 +323,64 @@ msgstr " links:"
 msgid " on right:"
 msgstr " rechts:"
 
-#: src/reader.c:52
+#: src/reader.c:53
 #, c-format
 msgid "multiple %s declarations"
 msgstr "meerdere %s declaraties"
 
-#: src/reader.c:202
+#: src/reader.c:139
+#, c-format
+msgid "result type clash on merge function %s: `%s' vs. `%s'"
+msgstr ""
+
+#: src/reader.c:257
 #, c-format
 msgid "rule given for %s, which is a token"
 msgstr "regel opgegeven voor token (%s)"
 
-#: src/reader.c:227
+#: src/reader.c:282
 #, c-format
 msgid "type clash (`%s' `%s') on default action"
 msgstr "type-conflict (`%s' `%s') bij standaardaktie"
 
-#: src/reader.c:235
+#: src/reader.c:290
 msgid "empty rule for typed nonterminal, and no action"
 msgstr "lege regel voor niet-eindsymbool met type, en geen actie"
 
-#: src/reader.c:306
+#: src/reader.c:361
 msgid "two @prec's in a row"
 msgstr "twee @prec's na elkaar"
 
-#: src/reader.c:447
+#: src/reader.c:371
+#, c-format
+msgid "%%dprec affects only GLR parsers"
+msgstr ""
+
+#: src/reader.c:373
+#, c-format
+msgid "%%dprec must be followed by positive number"
+msgstr ""
+
+#: src/reader.c:375
+#, c-format
+msgid "only one %%dprec allowed per rule"
+msgstr ""
+
+#: src/reader.c:386
+#, c-format
+msgid "%%merge affects only GLR parsers"
+msgstr ""
+
+#: src/reader.c:388
+#, c-format
+msgid "only one %%merge allowed per rule"
+msgstr ""
+
+#: src/reader.c:531
 msgid "no rules in the input grammar"
 msgstr "invoergrammatica bevat geen regels"
 
-#: src/reader.c:479
+#: src/reader.c:563
 #, c-format
 msgid "too many symbols (tokens plus nonterminals); maximum %d"
 msgstr "teveel symbolen (tokens plus niet-eindsymbolen); het maximum is %d"
@@ -414,22 +444,22 @@ msgstr[1] "%d nutteloze regels"
 msgid "Start symbol %s does not derive any sentence"
 msgstr "Startsymbool %s wordt vanuit geen enkele zin bereikt"
 
-#: scan-gram.l:556
+#: scan-gram.l:559
 #, c-format
 msgid "$$ of `%s' has no declared type"
 msgstr "$$ van `%s' heeft geen gedeclareerd type"
 
-#: scan-gram.l:573 scan-gram.l:660
+#: scan-gram.l:576 scan-gram.l:663
 #, fuzzy, c-format
 msgid "invalid value: %s%d"
 msgstr "ongeldige @-waarde"
 
-#: scan-gram.l:580
+#: scan-gram.l:583
 #, c-format
 msgid "$%d of `%s' has no declared type"
 msgstr "$%d van `%s' heeft geen gedeclareerd type"
 
-#: scan-gram.l:591 scan-gram.l:608 scan-gram.l:667 scan-gram.l:684
+#: scan-gram.l:594 scan-gram.l:611 scan-gram.l:670 scan-gram.l:687
 #, c-format
 msgid "%s is invalid"
 msgstr "%s is ongeldig"
index 6a5518e..3bafdab 100644 (file)
--- a/po/ru.po
+++ b/po/ru.po
@@ -5,7 +5,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: bison 1.32\n"
-"POT-Creation-Date: 2002-06-27 14:17+0200\n"
+"POT-Creation-Date: 2002-06-27 17:56-0700\n"
 "PO-Revision-Date: 2002-01-25 12:19+0300\n"
 "Last-Translator: Dmitry S. Sivachenko <dima@Chg.RU>\n"
 "Language-Team: Russian <ru@li.org>\n"
@@ -50,7 +50,7 @@ msgid "    Conflict between rule %d and token %s resolved as an error"
 msgstr ""
 "ëÏÎÆÌÉËÔ × ÓÏÓÔÏÑÎÉÉ %d ÍÅÖÄÕ ÐÒÁ×ÉÌÏÍ %d É ÌÅËÓÅÍÏÊ %s ÒÁÚÒÅÛÅΠËÁË %s.\n"
 
-#: src/conflicts.c:375
+#: src/conflicts.c:378
 #, c-format
 msgid "%d shift/reduce conflict"
 msgid_plural "%d shift/reduce conflicts"
@@ -58,11 +58,11 @@ msgstr[0] "%d 
 msgstr[1] "%d ËÏÎÆÌÉËÔÁ ÓÄ×ÉÇÁ/×Ù×ÏÄÁ"
 msgstr[2] "%d ËÏÎÆÌÉËÔÏ× ÓÄ×ÉÇÁ/×Ù×ÏÄÁ"
 
-#: src/conflicts.c:382
+#: src/conflicts.c:385
 msgid "and"
 msgstr "É"
 
-#: src/conflicts.c:388
+#: src/conflicts.c:391
 #, c-format
 msgid "%d reduce/reduce conflict"
 msgid_plural "%d reduce/reduce conflicts"
@@ -70,31 +70,31 @@ msgstr[0] "%d 
 msgstr[1] "%d ËÏÎÆÌÉËÔÁ ×Ù×ÏÄÁ/×Ù×ÏÄÁ"
 msgstr[2] "%d ËÏÎÆÌÉËÔÏ× ×Ù×ÏÄÁ/×Ù×ÏÄÁ"
 
-#: src/conflicts.c:413
+#: src/conflicts.c:416
 #, c-format
 msgid "State %d contains "
 msgstr "óÏÓÔÏÑÎÉÅ %d ÓÏÄÅÒÖÉÔ "
 
-#: src/conflicts.c:460
+#: src/conflicts.c:487
 msgid "conflicts: "
 msgstr "ËÏÎÆÌÉËÔÙ: "
 
-#: src/conflicts.c:462
+#: src/conflicts.c:489
 #, c-format
 msgid " %d shift/reduce"
 msgstr " %d ÓÄ×ÉÇ/×Ù×ÏÄ"
 
-#: src/conflicts.c:466
+#: src/conflicts.c:493
 #, c-format
 msgid " %d reduce/reduce"
 msgstr " %d ×Ù×ÏÄ/×Ù×ÏÄ"
 
-#: src/conflicts.c:471
+#: src/conflicts.c:498
 #, c-format
 msgid "%s contains "
 msgstr "%s ÓÏÄÅÒÖÉÔ "
 
-#: src/conflicts.c:478
+#: src/conflicts.c:505
 #, c-format
 msgid "expected %d shift/reduce conflict\n"
 msgid_plural "expected %d shift/reduce conflicts\n"
@@ -111,16 +111,16 @@ msgstr "
 msgid "cannot close file"
 msgstr "ÎÅ ÕÄÁÅÔÓÑ ÚÁËÒÙÔØ ÆÁÊÌ"
 
-#: src/getargs.c:99
+#: src/getargs.c:100
 msgid "GNU bison generates parsers for LALR(1) grammars.\n"
 msgstr "GNU bison ÇÅÎÅÒÉÒÕÅÔ ÁÎÁÌÉÚÁÔÏÒÙ ÄÌÑ ÇÒÁÍÍÁÔÉË LALR(1).\n"
 
-#: src/getargs.c:103
+#: src/getargs.c:104
 #, c-format
 msgid "Usage: %s [OPTION]... FILE\n"
 msgstr "éÓÐÏÌØÚÏ×ÁÎÉÅ: %s [ëìàþé]... æáêì\n"
 
-#: src/getargs.c:107
+#: src/getargs.c:108
 msgid ""
 "If a long option shows an argument as mandatory, then it is mandatory\n"
 "for the equivalent short option also.  Similarly for optional arguments.\n"
@@ -129,7 +129,7 @@ msgstr ""
 "Ñ×ÌÑÅÔÓÑ ÏÂÑÚÁÔÅÌØÎÙÍ ÄÌÑ ËÏÒÏÔËÏÊ ÆÏÒÍÙ.  ôÏ ÖÅ ËÁÓÁÅÔÓÑ ÎÅÏÂÑÚÁÔÅÌØÎÙÈ\n"
 "ÁÒÇÕÍÅÎÔÏ×.\n"
 
-#: src/getargs.c:113
+#: src/getargs.c:114
 msgid ""
 "Operation modes:\n"
 "  -h, --help      display this help and exit\n"
@@ -141,7 +141,7 @@ msgstr ""
 "  -V, --version   ×Ù×ÅÓÔÉ ÉÎÆÏÒÍÁÃÉÀ Ï ×ÅÒÓÉÉ É ×ÙÊÔÉ\n"
 "  -y, --yacc      ÜÍÕÌÉÒÏ×ÁÔØ POSIX yacc\n"
 
-#: src/getargs.c:120
+#: src/getargs.c:121
 msgid ""
 "Parser:\n"
 "  -S, --skeleton=FILE        specify the skeleton to use\n"
@@ -161,7 +161,7 @@ msgstr ""
 "  -n, --no-parser            ÇÅÎÅÒÉÒÏ×ÁÔØ ÔÏÌØËÏ ÔÁÂÌÉÃÙ\n"
 "  -k, --token-table          ×ËÌÀÞÉÔØ ÔÁÂÌÉÃÕ ÉÍÅΠÌÅËÓÅÍ\n"
 
-#: src/getargs.c:132
+#: src/getargs.c:133
 #, fuzzy
 msgid ""
 "Output:\n"
@@ -181,7 +181,7 @@ msgstr ""
 "  -g, --graph                ÓÏÚÄÁÔØ ÔÁËÖÅ ÐÏÑÓÎÅÎÉÑ Ë Á×ÔÏÍÁÔÕ × ×ÉÄÅ \n"
 "VCG-ÇÒÁÆÁ\n"
 
-#: src/getargs.c:143
+#: src/getargs.c:144
 msgid ""
 "THINGS is a list of comma separated words that can include:\n"
 "  `state'        describe the states\n"
@@ -192,27 +192,27 @@ msgid ""
 "  `none'         disable the report\n"
 msgstr ""
 
-#: src/getargs.c:154
+#: src/getargs.c:155
 msgid "Report bugs to <bug-bison@gnu.org>.\n"
 msgstr "ïÛÉÂËÉ ÓÏÏÂÝÁÊÔÅ ÐÏ ÁÄÒÅÓÕ <bug-bison@gnu.org>.\n"
 
-#: src/getargs.c:168
+#: src/getargs.c:169
 #, c-format
 msgid "bison (GNU Bison) %s"
 msgstr "bison (GNU Bison) %s"
 
-#: src/getargs.c:170
+#: src/getargs.c:171
 msgid "Written by Robert Corbett and Richard Stallman.\n"
 msgstr ""
 
-#: src/getargs.c:174
+#: src/getargs.c:175
 #, fuzzy, c-format
 msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
 msgstr ""
 "Copyright 1984, 1986, 1989, 1992, 2000, 2001, 2002\n"
 "Free Software Foundation, Inc.\n"
 
-#: src/getargs.c:176
+#: src/getargs.c:177
 msgid ""
 "This is free software; see the source for copying conditions.  There is NO\n"
 "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
@@ -223,17 +223,17 @@ msgstr ""
 "ðòéçïäîïóôé\n"
 "äìñ ïðòåäåìåîîïê ãåìé.\n"
 
-#: src/getargs.c:333
+#: src/getargs.c:334
 #, c-format
 msgid "Try `%s --help' for more information.\n"
 msgstr "éÓÐÏÌØÚÕÊÔÅ `%s --help' ÄÌÑ ÄÏÐÏÌÎÉÔÅÌØÎÏÊ ÉÎÆÏÒÍÁÃÉÉ.\n"
 
-#: src/getargs.c:340
+#: src/getargs.c:341
 #, c-format
 msgid "%s: no grammar file given\n"
 msgstr "%s: ÎÅ ÚÁÄÁΠÆÁÊÌ Ó ÇÒÁÍÍÁÔÉËÏÊ\n"
 
-#: src/getargs.c:344
+#: src/getargs.c:345
 #, c-format
 msgid "%s: extra arguments ignored after `%s'\n"
 msgstr "%s: ÌÉÛÎÉÅ ÁÒÇÕÍÅÎÔÙ ÐÏÓÌÅ `%s' ÉÇÎÏÒÉÒÏ×ÁÎÙ\n"
@@ -321,35 +321,65 @@ msgstr " 
 msgid " on right:"
 msgstr " ÎÁÐÒÁ×Ï:"
 
-#: src/reader.c:52
+#: src/reader.c:53
 #, c-format
 msgid "multiple %s declarations"
 msgstr "ÍÎÏÖÅÓÔ×ÅÎÎÏÅ ÏÐÉÓÁÎÉÅ %s"
 
-#: src/reader.c:202
+#: src/reader.c:139
+#, c-format
+msgid "result type clash on merge function %s: `%s' vs. `%s'"
+msgstr ""
+
+#: src/reader.c:257
 #, c-format
 msgid "rule given for %s, which is a token"
 msgstr "ÐÒÁ×ÉÌÏ ÚÁÄÁÎÏ ÄÌÑ %s, ËÏÔÏÒÙÊ Ñ×ÌÑÅÔÓÑ ÌÅËÓÅÍÏÊ"
 
-#: src/reader.c:227
+#: src/reader.c:282
 #, c-format
 msgid "type clash (`%s' `%s') on default action"
 msgstr "ËÏÎÆÌÉËÔ ÔÉÐÏ× (`%s' `%s') ÎÁ ÄÅÊÓÔ×ÉÉ ÐÏ ÕÍÏÌÞÁÎÉÀ"
 
-#: src/reader.c:235
+#: src/reader.c:290
 msgid "empty rule for typed nonterminal, and no action"
 msgstr ""
 "ÐÕÓÔÏÅ ÐÒÁ×ÉÌÏ ÄÌÑ ÔÉÐÉÚÉÒÏ×ÁÎÎÏÇÏ ÎÅÔÅÒÍÉÎÁÌØÎÏÇÏ ÓÉÍ×ÏÌÁ, É ÎÅÔ ÄÅÊÓÔ×ÉÑ"
 
-#: src/reader.c:306
+#: src/reader.c:361
 msgid "two @prec's in a row"
 msgstr "Ä×Á @prec ÐÏÄÒÑÄ"
 
-#: src/reader.c:447
+#: src/reader.c:371
+#, c-format
+msgid "%%dprec affects only GLR parsers"
+msgstr ""
+
+#: src/reader.c:373
+#, c-format
+msgid "%%dprec must be followed by positive number"
+msgstr ""
+
+#: src/reader.c:375
+#, c-format
+msgid "only one %%dprec allowed per rule"
+msgstr ""
+
+#: src/reader.c:386
+#, c-format
+msgid "%%merge affects only GLR parsers"
+msgstr ""
+
+#: src/reader.c:388
+#, c-format
+msgid "only one %%merge allowed per rule"
+msgstr ""
+
+#: src/reader.c:531
 msgid "no rules in the input grammar"
 msgstr "ÏÔÓÕÔÓÔ×ÕÀÔ ÐÒÁ×ÉÌÁ ×Ï ×ÈÏÄÎÏÊ ÇÒÁÍÍÁÔÉËÅ"
 
-#: src/reader.c:479
+#: src/reader.c:563
 #, c-format
 msgid "too many symbols (tokens plus nonterminals); maximum %d"
 msgstr "ÓÌÉÛËÏÍ ÍÎÏÇÏ ÓÉÍ×ÏÌÏ× (ÌÅËÓÅÍÙ ÐÌÀÓ ÎÅÔÅÒÍÉÎÁÌÙ); ÍÁËÓÉÍÁÌØÎÏ %d"
@@ -415,22 +445,22 @@ msgstr[2] "%d 
 msgid "Start symbol %s does not derive any sentence"
 msgstr "îÁÞÁÌØÎÙÊ ÓÉÍ×ÏÌ %s ÎÅ ×Ù×ÏÄÉÔ ÎÉ ÏÄÎÏÇÏ ÐÒÅÄÌÏÖÅÎÉÑ"
 
-#: scan-gram.l:556
+#: scan-gram.l:559
 #, c-format
 msgid "$$ of `%s' has no declared type"
 msgstr "$$ × `%s' ÎÅ ÉÍÅÅÔ ÏÐÉÓÁÎÎÏÇÏ ÔÉÐÁ"
 
-#: scan-gram.l:573 scan-gram.l:660
+#: scan-gram.l:576 scan-gram.l:663
 #, fuzzy, c-format
 msgid "invalid value: %s%d"
 msgstr "ÎÅ×ÅÒÎÏÅ $ ÚÎÁÞÅÎÉÅ"
 
-#: scan-gram.l:580
+#: scan-gram.l:583
 #, c-format
 msgid "$%d of `%s' has no declared type"
 msgstr "$%d ÉÚ `%s' ÎÅ ÉÍÅÅÔ ÏÐÉÓÁÎÎÏÇÏ ÔÉÐÁ"
 
-#: scan-gram.l:591 scan-gram.l:608 scan-gram.l:667 scan-gram.l:684
+#: scan-gram.l:594 scan-gram.l:611 scan-gram.l:670 scan-gram.l:687
 #, c-format
 msgid "%s is invalid"
 msgstr "ÎÅ×ÅÒÎÙÊ ÚÎÁË %s"
index b7b479e..87ebe11 100644 (file)
--- a/po/sv.po
+++ b/po/sv.po
@@ -5,7 +5,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: bison 1.33b\n"
-"POT-Creation-Date: 2002-06-27 14:17+0200\n"
+"POT-Creation-Date: 2002-06-27 17:56-0700\n"
 "PO-Revision-Date: 2002-03-05 10:18+0100\n"
 "Last-Translator: Göran Uddeborg <goeran@uddeborg.pp.se>\n"
 "Language-Team: Swedish <sv@li.org>\n"
@@ -49,49 +49,49 @@ msgid "    Conflict between rule %d and token %s resolved as an error"
 msgstr ""
 "Konflikt i tillstånd %d mellan regel %d och element %s, löstes med %s.\n"
 
-#: src/conflicts.c:375
+#: src/conflicts.c:378
 #, c-format
 msgid "%d shift/reduce conflict"
 msgid_plural "%d shift/reduce conflicts"
 msgstr[0] "%d skifta/reducerakonflikt"
 msgstr[1] "%d skifta/reducerakonflikter"
 
-#: src/conflicts.c:382
+#: src/conflicts.c:385
 msgid "and"
 msgstr "och"
 
-#: src/conflicts.c:388
+#: src/conflicts.c:391
 #, c-format
 msgid "%d reduce/reduce conflict"
 msgid_plural "%d reduce/reduce conflicts"
 msgstr[0] "%d reducera/reducerakonflikt"
 msgstr[1] "%d reducera/reducerakonflikter"
 
-#: src/conflicts.c:413
+#: src/conflicts.c:416
 #, c-format
 msgid "State %d contains "
 msgstr "Tillstånd %d innehåller "
 
-#: src/conflicts.c:460
+#: src/conflicts.c:487
 msgid "conflicts: "
 msgstr "konflikter: "
 
-#: src/conflicts.c:462
+#: src/conflicts.c:489
 #, c-format
 msgid " %d shift/reduce"
 msgstr " %d skifta/reducera"
 
-#: src/conflicts.c:466
+#: src/conflicts.c:493
 #, c-format
 msgid " %d reduce/reduce"
 msgstr " %d reducera/reducera"
 
-#: src/conflicts.c:471
+#: src/conflicts.c:498
 #, c-format
 msgid "%s contains "
 msgstr "%s innehåller "
 
-#: src/conflicts.c:478
+#: src/conflicts.c:505
 #, c-format
 msgid "expected %d shift/reduce conflict\n"
 msgid_plural "expected %d shift/reduce conflicts\n"
@@ -107,16 +107,16 @@ msgstr "kan inte 
 msgid "cannot close file"
 msgstr "kan inte stänga fil"
 
-#: src/getargs.c:99
+#: src/getargs.c:100
 msgid "GNU bison generates parsers for LALR(1) grammars.\n"
 msgstr "GNU bison genererar parsrar för LALR(1)-grammatiker.\n"
 
-#: src/getargs.c:103
+#: src/getargs.c:104
 #, c-format
 msgid "Usage: %s [OPTION]... FILE\n"
 msgstr "Användning: %s [FLAGGA]... FIL\n"
 
-#: src/getargs.c:107
+#: src/getargs.c:108
 msgid ""
 "If a long option shows an argument as mandatory, then it is mandatory\n"
 "for the equivalent short option also.  Similarly for optional arguments.\n"
@@ -125,7 +125,7 @@ msgstr ""
 "obligatoriskt för den motsvarande korta flaggan också.  Motsvarande\n"
 "för valfria argument.\n"
 
-#: src/getargs.c:113
+#: src/getargs.c:114
 msgid ""
 "Operation modes:\n"
 "  -h, --help      display this help and exit\n"
@@ -137,7 +137,7 @@ msgstr ""
 "  -V, --version   visa versionsinformation och avsluta\n"
 "  -y, --yacc      emulera POSIX-yacc\n"
 
-#: src/getargs.c:120
+#: src/getargs.c:121
 msgid ""
 "Parser:\n"
 "  -S, --skeleton=FILE        specify the skeleton to use\n"
@@ -157,7 +157,7 @@ msgstr ""
 "  -n, --no-parser            generera endast tabellerna\n"
 "  -k, --token-table          inkludera en tabell över elementnamn\n"
 
-#: src/getargs.c:132
+#: src/getargs.c:133
 #, fuzzy
 msgid ""
 "Output:\n"
@@ -176,7 +176,7 @@ msgstr ""
 "  -o, --output=FIL           lägg utdata i FIL\n"
 "  -g, --graph                skapa också en VCG-beskrivning av automaten\n"
 
-#: src/getargs.c:143
+#: src/getargs.c:144
 msgid ""
 "THINGS is a list of comma separated words that can include:\n"
 "  `state'        describe the states\n"
@@ -187,29 +187,29 @@ msgid ""
 "  `none'         disable the report\n"
 msgstr ""
 
-#: src/getargs.c:154
+#: src/getargs.c:155
 msgid "Report bugs to <bug-bison@gnu.org>.\n"
 msgstr ""
 "Rapportera fel till <bug-bison@gnu.org>.\n"
 "Rapportera synpunkter på översättningen till <sv@li.org>.\n"
 
-#: src/getargs.c:168
+#: src/getargs.c:169
 #, c-format
 msgid "bison (GNU Bison) %s"
 msgstr "bison (GNU Bison) %s"
 
-#: src/getargs.c:170
+#: src/getargs.c:171
 msgid "Written by Robert Corbett and Richard Stallman.\n"
 msgstr ""
 
-#: src/getargs.c:174
+#: src/getargs.c:175
 #, fuzzy, c-format
 msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
 msgstr ""
 "Copyright 1984, 1986, 1989, 1992, 2000, 2001, 2002\n"
 "Free Software Foundation, Inc.\n"
 
-#: src/getargs.c:176
+#: src/getargs.c:177
 msgid ""
 "This is free software; see the source for copying conditions.  There is NO\n"
 "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
@@ -218,17 +218,17 @@ msgstr ""
 "finns INGEN garanti, inte ens för SÄLJBARHET eller LÄMPLIGHET FÖR ETT\n"
 "SPECIELLT ÄNDAMÅL.\n"
 
-#: src/getargs.c:333
+#: src/getargs.c:334
 #, c-format
 msgid "Try `%s --help' for more information.\n"
 msgstr "Försök med \"%s --help\" för mer information.\n"
 
-#: src/getargs.c:340
+#: src/getargs.c:341
 #, c-format
 msgid "%s: no grammar file given\n"
 msgstr "%s: ingen grammatikfil angiven\n"
 
-#: src/getargs.c:344
+#: src/getargs.c:345
 #, c-format
 msgid "%s: extra arguments ignored after `%s'\n"
 msgstr "%s: extra argument ignorerade efter \"%s\"\n"
@@ -316,34 +316,64 @@ msgstr " till v
 msgid " on right:"
 msgstr " till höger:"
 
-#: src/reader.c:52
+#: src/reader.c:53
 #, c-format
 msgid "multiple %s declarations"
 msgstr "flera %s-deklarationer"
 
-#: src/reader.c:202
+#: src/reader.c:139
+#, c-format
+msgid "result type clash on merge function %s: `%s' vs. `%s'"
+msgstr ""
+
+#: src/reader.c:257
 #, c-format
 msgid "rule given for %s, which is a token"
 msgstr "regel given för %s, som är ett element"
 
-#: src/reader.c:227
+#: src/reader.c:282
 #, c-format
 msgid "type clash (`%s' `%s') on default action"
 msgstr "typkonflikt (\"%s\" \"%s\") för standardåtgärd"
 
-#: src/reader.c:235
+#: src/reader.c:290
 msgid "empty rule for typed nonterminal, and no action"
 msgstr "tom regel för typad icketerminal, och ingen åtgärd"
 
-#: src/reader.c:306
+#: src/reader.c:361
 msgid "two @prec's in a row"
 msgstr "två @prec i rad"
 
-#: src/reader.c:447
+#: src/reader.c:371
+#, c-format
+msgid "%%dprec affects only GLR parsers"
+msgstr ""
+
+#: src/reader.c:373
+#, c-format
+msgid "%%dprec must be followed by positive number"
+msgstr ""
+
+#: src/reader.c:375
+#, c-format
+msgid "only one %%dprec allowed per rule"
+msgstr ""
+
+#: src/reader.c:386
+#, c-format
+msgid "%%merge affects only GLR parsers"
+msgstr ""
+
+#: src/reader.c:388
+#, c-format
+msgid "only one %%merge allowed per rule"
+msgstr ""
+
+#: src/reader.c:531
 msgid "no rules in the input grammar"
 msgstr "inga regler i ingrammatiken"
 
-#: src/reader.c:479
+#: src/reader.c:563
 #, c-format
 msgid "too many symbols (tokens plus nonterminals); maximum %d"
 msgstr "för många symboler (element plus icketerminaler); max %d"
@@ -406,22 +436,22 @@ msgstr[1] "%d oanv
 msgid "Start symbol %s does not derive any sentence"
 msgstr "Startsymbolen %s genererar inga meningar"
 
-#: scan-gram.l:556
+#: scan-gram.l:559
 #, c-format
 msgid "$$ of `%s' has no declared type"
 msgstr "$$ för \"%s\" har ingen deklarerad typ"
 
-#: scan-gram.l:573 scan-gram.l:660
+#: scan-gram.l:576 scan-gram.l:663
 #, fuzzy, c-format
 msgid "invalid value: %s%d"
 msgstr "felaktigt @-värde"
 
-#: scan-gram.l:580
+#: scan-gram.l:583
 #, c-format
 msgid "$%d of `%s' has no declared type"
 msgstr "$%d för \"%s\" har ingen deklarerad typ"
 
-#: scan-gram.l:591 scan-gram.l:608 scan-gram.l:667 scan-gram.l:684
+#: scan-gram.l:594 scan-gram.l:611 scan-gram.l:670 scan-gram.l:687
 #, c-format
 msgid "%s is invalid"
 msgstr "%s är felaktigt"
index c13b8ac..8960589 100644 (file)
--- a/po/tr.po
+++ b/po/tr.po
@@ -5,7 +5,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: bison 1.34\n"
-"POT-Creation-Date: 2002-06-27 14:17+0200\n"
+"POT-Creation-Date: 2002-06-27 17:56-0700\n"
 "PO-Revision-Date: 2002-03-14 11:03GMT +02:00\n"
 "Last-Translator: Altuð Bayram <altugbayram_2000@yahoo.com>\n"
 "Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n"
@@ -53,49 +53,49 @@ msgstr ""
 "%d durumu içinde %d kuralý ve %s andaçý arasýndaki çeliþki %s olarak\n"
 "çözümlendi.\n"
 
-#: src/conflicts.c:375
+#: src/conflicts.c:378
 #, c-format
 msgid "%d shift/reduce conflict"
 msgid_plural "%d shift/reduce conflicts"
 msgstr[0] "%d öteleme/indirgeme çeliþkisi"
 msgstr[1] "%d öteleme/indirgeme çeliþkisi"
 
-#: src/conflicts.c:382
+#: src/conflicts.c:385
 msgid "and"
 msgstr "ve"
 
-#: src/conflicts.c:388
+#: src/conflicts.c:391
 #, c-format
 msgid "%d reduce/reduce conflict"
 msgid_plural "%d reduce/reduce conflicts"
 msgstr[0] "%d indirgeme/indirgeme çeliþkisi"
 msgstr[1] "%d indirgeme/indirgeme çeliþkisi"
 
-#: src/conflicts.c:413
+#: src/conflicts.c:416
 #, c-format
 msgid "State %d contains "
 msgstr "%d durumu içerir"
 
-#: src/conflicts.c:460
+#: src/conflicts.c:487
 msgid "conflicts: "
 msgstr "çeliþkiler: "
 
-#: src/conflicts.c:462
+#: src/conflicts.c:489
 #, c-format
 msgid " %d shift/reduce"
 msgstr " %d öteleme/indirgeme"
 
-#: src/conflicts.c:466
+#: src/conflicts.c:493
 #, c-format
 msgid " %d reduce/reduce"
 msgstr " %d indirgeme/indirgeme"
 
-#: src/conflicts.c:471
+#: src/conflicts.c:498
 #, c-format
 msgid "%s contains "
 msgstr "%s içerir"
 
-#: src/conflicts.c:478
+#: src/conflicts.c:505
 #, c-format
 msgid "expected %d shift/reduce conflict\n"
 msgid_plural "expected %d shift/reduce conflicts\n"
@@ -111,16 +111,16 @@ msgstr "`%s' dosyas
 msgid "cannot close file"
 msgstr "dosya kapatýlamýyor"
 
-#: src/getargs.c:99
+#: src/getargs.c:100
 msgid "GNU bison generates parsers for LALR(1) grammars.\n"
 msgstr "GNU bison LALR(1) gramerler için ayrýþtýrýcýlar üretir.\n"
 
-#: src/getargs.c:103
+#: src/getargs.c:104
 #, c-format
 msgid "Usage: %s [OPTION]... FILE\n"
 msgstr "Kullaným: %s [SEÇENEK]... DOSYA\n"
 
-#: src/getargs.c:107
+#: src/getargs.c:108
 msgid ""
 "If a long option shows an argument as mandatory, then it is mandatory\n"
 "for the equivalent short option also.  Similarly for optional arguments.\n"
@@ -130,7 +130,7 @@ msgstr ""
 "seçenek için de geçerlidir.  Bu durum, seçimli argümanlar için de "
 "geçerlidir.\n"
 
-#: src/getargs.c:113
+#: src/getargs.c:114
 msgid ""
 "Operation modes:\n"
 "  -h, --help      display this help and exit\n"
@@ -142,7 +142,7 @@ msgstr ""
 "  -V, --version   sürüm bilgisini ver ve çýk\n"
 "  -y, --yacc      POSIX yacc öykünmesi\n"
 
-#: src/getargs.c:120
+#: src/getargs.c:121
 msgid ""
 "Parser:\n"
 "  -S, --skeleton=FILE        specify the skeleton to use\n"
@@ -162,7 +162,7 @@ msgstr ""
 "  -n, --no-parser            sadece tablolarý üret\n"
 "  -k, --token-table          andaç isimlerinin bir tablosunu içer\n"
 
-#: src/getargs.c:132
+#: src/getargs.c:133
 #, fuzzy
 msgid ""
 "Output:\n"
@@ -181,7 +181,7 @@ msgstr ""
 "  -o, --output=DOSYA        çýktýyý dosyaya býrakýr\n"
 "  -g, --graph                otomatýn bir VCG grafik açýklamasýný da üretir\n"
 
-#: src/getargs.c:143
+#: src/getargs.c:144
 msgid ""
 "THINGS is a list of comma separated words that can include:\n"
 "  `state'        describe the states\n"
@@ -192,29 +192,29 @@ msgid ""
 "  `none'         disable the report\n"
 msgstr ""
 
-#: src/getargs.c:154
+#: src/getargs.c:155
 msgid "Report bugs to <bug-bison@gnu.org>.\n"
 msgstr ""
 "Hatalarý <bug-bison@gnu.org>'a,\n"
 "çeviri hatalarýný <gnu-tr-u12a@lists.sourceforge.net>'e bildir.\n"
 
-#: src/getargs.c:168
+#: src/getargs.c:169
 #, c-format
 msgid "bison (GNU Bison) %s"
 msgstr "bison (GNU Bison) %s"
 
-#: src/getargs.c:170
+#: src/getargs.c:171
 msgid "Written by Robert Corbett and Richard Stallman.\n"
 msgstr ""
 
-#: src/getargs.c:174
+#: src/getargs.c:175
 #, fuzzy, c-format
 msgid "Copyright (C) %d Free Software Foundation, Inc.\n"
 msgstr ""
 "Kopyahakký 1984, 1986, 1989, 1992, 2000, 2001, 2002\n"
 "Free Software Foundation, Inc.\n"
 
-#: src/getargs.c:176
+#: src/getargs.c:177
 msgid ""
 "This is free software; see the source for copying conditions.  There is NO\n"
 "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
@@ -223,17 +223,17 @@ msgstr ""
 "Hiçbir garantisi yoktur; hatta SATILABÝLÝRLÝÐÝ veya ÞAHSÝ KULLANIMINIZA\n"
 "UYGUNLUÐU için bile garanti verilmez.\n"
 
-#: src/getargs.c:333
+#: src/getargs.c:334
 #, c-format
 msgid "Try `%s --help' for more information.\n"
 msgstr "Daha fazla bilgi için `%s --help' yazýn.\n"
 
-#: src/getargs.c:340
+#: src/getargs.c:341
 #, c-format
 msgid "%s: no grammar file given\n"
 msgstr "%s: gramer dosyasý verilmemiþ\n"
 
-#: src/getargs.c:344
+#: src/getargs.c:345
 #, c-format
 msgid "%s: extra arguments ignored after `%s'\n"
 msgstr "%s: '%s' den sonraki argümanlar yoksayýldý\n"
@@ -321,35 +321,65 @@ msgstr " solda:"
 msgid " on right:"
 msgstr " saðda:"
 
-#: src/reader.c:52
+#: src/reader.c:53
 #, c-format
 msgid "multiple %s declarations"
 msgstr "çoklu %s bildirimleri"
 
-#: src/reader.c:202
+#: src/reader.c:139
+#, c-format
+msgid "result type clash on merge function %s: `%s' vs. `%s'"
+msgstr ""
+
+#: src/reader.c:257
 #, c-format
 msgid "rule given for %s, which is a token"
 msgstr "bir andaç olan %s için verilen kural"
 
-#: src/reader.c:227
+#: src/reader.c:282
 #, c-format
 msgid "type clash (`%s' `%s') on default action"
 msgstr "öntanýmlý eylem üzerinde (`%s' `%s') tip çatýþmasý"
 
-#: src/reader.c:235
+#: src/reader.c:290
 msgid "empty rule for typed nonterminal, and no action"
 msgstr ""
 "Tipli deðiþken simge için boþ kural tanýmlanmýþ, ve eylem belirtilmemiþ"
 
-#: src/reader.c:306
+#: src/reader.c:361
 msgid "two @prec's in a row"
 msgstr "bir satýrda iki @prec"
 
-#: src/reader.c:447
+#: src/reader.c:371
+#, c-format
+msgid "%%dprec affects only GLR parsers"
+msgstr ""
+
+#: src/reader.c:373
+#, c-format
+msgid "%%dprec must be followed by positive number"
+msgstr ""
+
+#: src/reader.c:375
+#, c-format
+msgid "only one %%dprec allowed per rule"
+msgstr ""
+
+#: src/reader.c:386
+#, c-format
+msgid "%%merge affects only GLR parsers"
+msgstr ""
+
+#: src/reader.c:388
+#, c-format
+msgid "only one %%merge allowed per rule"
+msgstr ""
+
+#: src/reader.c:531
 msgid "no rules in the input grammar"
 msgstr "girdi grameri içinde kurallar yok"
 
-#: src/reader.c:479
+#: src/reader.c:563
 #, c-format
 msgid "too many symbols (tokens plus nonterminals); maximum %d"
 msgstr "çok fazla simge var (andaçlar ve deðiþken simgeler); en fazla %d"
@@ -412,22 +442,22 @@ msgstr[1] "%d yarars
 msgid "Start symbol %s does not derive any sentence"
 msgstr "Baþlangýç simgesi %s herhangi bir cümleden türemez"
 
-#: scan-gram.l:556
+#: scan-gram.l:559
 #, c-format
 msgid "$$ of `%s' has no declared type"
 msgstr "`%s''in $$'ý bildirilmiþ tip deðil"
 
-#: scan-gram.l:573 scan-gram.l:660
+#: scan-gram.l:576 scan-gram.l:663
 #, fuzzy, c-format
 msgid "invalid value: %s%d"
 msgstr "geçersiz @ deðeri"
 
-#: scan-gram.l:580
+#: scan-gram.l:583
 #, c-format
 msgid "$%d of `%s' has no declared type"
 msgstr "`%2$s''in %1$d'i bildirilmiþ tip deðil"
 
-#: scan-gram.l:591 scan-gram.l:608 scan-gram.l:667 scan-gram.l:684
+#: scan-gram.l:594 scan-gram.l:611 scan-gram.l:670 scan-gram.l:687
 #, c-format
 msgid "%s is invalid"
 msgstr "%s geçersizdir"
index e09b6d8..4b57689 100644 (file)
@@ -331,12 +331,15 @@ count_sr_conflicts (state_t *state)
 }
 
 
-/*----------------------------------------------.
-| Count the number of reduce/reduce conflicts.  |
-`----------------------------------------------*/
+/*----------------------------------------------------------------.
+| Count the number of reduce/reduce conflicts.  If ONE_PER_TOKEN, |
+| count one conflict for each token that has any reduce/reduce    |
+| conflicts.  Otherwise, count one conflict for each pair of      |
+| conflicting reductions.                                         |
++`----------------------------------------------------------------*/
 
 static int
-count_rr_conflicts (state_t *state)
+count_rr_conflicts (state_t *state, int one_per_token)
 {
   int i;
   int rrc_count = 0;
@@ -353,7 +356,7 @@ count_rr_conflicts (state_t *state)
          count++;
 
       if (count >= 2)
-       rrc_count++;
+       rrc_count += one_per_token ? 1 : count-1;
     }
 
   return rrc_count;
@@ -412,13 +415,37 @@ conflicts_output (FILE *out)
       {
        fprintf (out, _("State %d contains "), i);
        fputs (conflict_report (count_sr_conflicts (states[i]),
-                               count_rr_conflicts (states[i])), out);
+                               count_rr_conflicts (states[i], TRUE)), out);
        printed_sth = TRUE;
       }
   if (printed_sth)
     fputs ("\n\n", out);
 }
 
+/*--------------------------------------------------------.
+| Total the number of S/R and R/R conflicts.  Unlike the  |
+| code in conflicts_output, however, count EACH pair of   |
+| reductions for the same state and lookahead as one      |
+| conflict.                                              |
+`--------------------------------------------------------*/
+
+int
+conflicts_total_count (void)
+{
+  int i;
+  int count;
+
+  /* Conflicts by state.  */
+  count = 0;
+  for (i = 0; i < nstates; i++)
+    if (conflicts[i])
+      {
+       count += count_sr_conflicts (states[i]);
+       count += count_rr_conflicts (states[i], FALSE);
+      }
+  return count;
+}
 
 /*------------------------------------------.
 | Reporting the total number of conflicts.  |
@@ -442,7 +469,7 @@ conflicts_print (void)
     if (conflicts[i])
       {
        src_total += count_sr_conflicts (states[i]);
-       rrc_total += count_rr_conflicts (states[i]);
+       rrc_total += count_rr_conflicts (states[i], TRUE);
       }
 
   src_ok = src_total == (expected_conflicts == -1 ? 0 : expected_conflicts);
index bd21253..2d814d7 100644 (file)
@@ -24,6 +24,7 @@
 
 void conflicts_solve PARAMS ((void));
 void conflicts_print PARAMS ((void));
+int conflicts_total_count PARAMS ((void));
 void conflicts_output PARAMS ((FILE *out));
 void conflicts_free PARAMS ((void));
 
index c127928..4d88b39 100644 (file)
@@ -43,6 +43,7 @@ symbol_number_t *token_translations = NULL;
 
 int max_user_token_number = 256;
 
+int glr_parser = 0;
 int pure_parser = 0;
 
 
@@ -249,4 +250,5 @@ grammar_free (void)
   XFREE (token_translations);
   /* Free the symbol table data structure.  */
   symbols_free ();
+  free_merger_functions ();
 }
index b0f9dae..3254678 100644 (file)
 
    RULES[R].assoc -- the associativity of R.
 
+   RULES[R].dprec -- the dynamic precedence level of R (for GLR parsing).
+
+   RULES[R].merger -- index of merging function for R (for GLR parsing).
+
    RULES[R].line -- the line where R was defined.
 
    RULES[R].useful -- TRUE iff the rule is used (i.e., FALSE if thrown
@@ -141,6 +145,9 @@ typedef struct rule_s
   /* This symbol provides both the associativity, and the precedence. */
   symbol_t *prec;
 
+  short dprec;
+  short merger;
+
   /* This symbol was attached to the rule via %prec. */
   symbol_t *precsym;
 
@@ -163,6 +170,12 @@ extern symbol_number_t *token_translations;
 extern int max_user_token_number;
 
 
+/* GLR_PARSER is nonzero if the input file says to use the GLR
+   (Generalized LR) parser, and to output some additional
+   information used by the GLR algorithm. */
+
+extern int glr_parser;
+
 /* PURE_PARSER is nonzero if should generate a parser that is all pure
    and reentrant.  */
 
index afe1132..5175fb3 100644 (file)
@@ -115,14 +115,21 @@ static int nvectors;
 static int nentries;
 static short **froms = NULL;
 static short **tos = NULL;
+static unsigned int **conflict_tos = NULL;
 static short *tally = NULL;
 static short *width = NULL;
 static short *actrow = NULL;
+static short *conflrow = NULL;
 static short *state_count = NULL;
 static short *order = NULL;
 static short *base = NULL;
 static short *pos = NULL;
 
+static unsigned int *conflict_table = NULL;
+static unsigned int *conflict_list = NULL;
+static int conflict_list_cnt;
+static int conflict_list_free;
+
 /* TABLE_SIZE is the allocated size of both TABLE and CHECK.
    We start with the original hard-coded value: SHRT_MAX
    (yes, not USHRT_MAX). */
@@ -157,6 +164,8 @@ table_grow (size_t desired)
 
   table = XREALLOC (table, short, table_size);
   check = XREALLOC (check, short, table_size);
+  if (glr_parser)
+    conflict_table = XREALLOC (conflict_table, unsigned int, table_size);
 
   for (/* Nothing. */; old_size < table_size; ++old_size)
     {
@@ -278,7 +287,7 @@ prepare_tokens (void)
 
 /*-------------------------------------------------------------.
 | Prepare the muscles related to the rules: rhs, prhs, r1, r2, |
-| rline.                                                       |
+| rline, dprec, merger                                         |
 `-------------------------------------------------------------*/
 
 static void
@@ -291,6 +300,8 @@ prepare_rules (void)
   unsigned int *rline = XMALLOC (unsigned int, nrules + 1);
   symbol_number_t *r1 = XMALLOC (symbol_number_t, nrules + 1);
   unsigned int *r2 = XMALLOC (unsigned int, nrules + 1);
+  short *dprec = XMALLOC (short, nrules + 1);
+  short *merger = XMALLOC (short, nrules + 1);
 
   for (r = 1; r < nrules + 1; ++r)
     {
@@ -308,6 +319,10 @@ prepare_rules (void)
       rhs[i++] = -1;
       /* Line where rule was defined. */
       rline[r] = rules[r].location.first_line;
+      /* Dynamic precedence (GLR) */
+      dprec[r] = rules[r].dprec;
+      /* Merger-function index (GLR) */
+      merger[r] = rules[r].merger;
     }
   assert (i == nritems);
 
@@ -316,12 +331,16 @@ prepare_rules (void)
   muscle_insert_unsigned_int_table ("rline", rline, 0, 1, nrules + 1);
   muscle_insert_symbol_number_table ("r1", r1, 0, 1, nrules + 1);
   muscle_insert_unsigned_int_table ("r2", r2, 0, 1, nrules + 1);
+  muscle_insert_short_table ("dprec", dprec, 0, 1, nrules + 1);
+  muscle_insert_short_table ("merger", merger, 0, 1, nrules + 1);
 
   free (rhs);
   free (prhs);
   free (rline);
   free (r1);
   free (r2);
+  free (dprec);
+  free (merger);
 }
 
 /*--------------------------------------------.
@@ -341,6 +360,50 @@ prepare_states (void)
 }
 
 
+/*-------------------------------------------------------------------.
+| For GLR parsers, for each conflicted token in STATE, as indicated  |
+| by non-zero entries in conflrow, create a list of possible        |
+| reductions that are alternatives to the shift or reduction        |
+| currently recorded for that token in STATE.  Store the alternative |
+| reductions followed by a 0 in conflict_list, updating                     |
+| conflict_list_cnt, and storing an index to the start of the list   |
+| back into conflrow.                                               |
+`-------------------------------------------------------------------*/
+
+static void
+conflict_row (state_t *state)
+{
+  int i, j;
+
+  if (! glr_parser)
+    return;
+
+  for (j = 0; j < ntokens; j += 1) 
+    if (conflrow[j]) 
+      {
+       conflrow[j] = conflict_list_cnt;
+
+       /* find all reductions for token j, and record all that do
+        * not match actrow[j] */
+       for (i = 0; i < state->nlookaheads; i += 1)
+         if (bitset_test (state->lookaheads[i], j)
+             && actrow[j] != -state->lookaheads_rule[i]->number)
+           {       
+             assert (conflict_list_free > 0);
+             conflict_list[conflict_list_cnt] 
+               = state->lookaheads_rule[i]->number;
+             conflict_list_cnt += 1;
+             conflict_list_free -= 1;
+           }
+       
+       /* Leave a 0 at the end */
+       assert (conflict_list_free > 0);
+       conflict_list_cnt += 1;
+       conflict_list_free -= 1;
+      }
+}
+
+
 /*------------------------------------------------------------------.
 | Decide what to do for each type of token if seen as the lookahead |
 | token in specified state.  The value returned is used as the      |
@@ -353,6 +416,11 @@ prepare_states (void)
 | This is where conflicts are resolved.  The loop over lookahead    |
 | rules considered lower-numbered rules last, and the last rule     |
 | considered that likes a token gets to handle it.                  |
+|                                                                  |
+| For GLR parsers, also sets conflrow[SYM] to an index into         |
+| conflict_list iff there is an unresolved conflict (s/r or r/r)    |
+| with symbol SYM. The default reduction is not used for a symbol   |
+| that has any such conflicts.                                     |
 `------------------------------------------------------------------*/
 
 static int
@@ -365,9 +433,10 @@ action_row (state_t *state)
   errs *errp = state->errs;
   /* set nonzero to inhibit having any default reduction */
   int nodefault = 0;
+  int conflicted = 0;
 
   for (i = 0; i < ntokens; i++)
-    actrow[i] = 0;
+    actrow[i] = conflrow[i] = 0;
 
   if (redp->nreds >= 1)
     {
@@ -381,7 +450,11 @@ action_row (state_t *state)
          /* and record this rule as the rule to use if that
             token follows.  */
          if (bitset_test (state->lookaheads[i], j))
-           actrow[j] = -state->lookaheads_rule[i]->number;
+           {
+             if (actrow[j] != 0)
+               conflicted = conflrow[j] = 1;
+             actrow[j] = -state->lookaheads_rule[i]->number;
+           }
     }
 
   /* Now see which tokens are allowed for shifts in this state.  For
@@ -399,6 +472,8 @@ action_row (state_t *state)
       if (ISVAR (symbol))
        break;
 
+      if (actrow[symbol] != 0)
+       conflicted = conflrow[symbol] = 1;
       actrow[symbol] = shift_state;
 
       /* Do not use any default reduction if there is a shift for
@@ -442,18 +517,20 @@ action_row (state_t *state)
                }
            }
 
-         /* actions which match the default are replaced with zero,
-            which means "use the default" */
+         /* GLR parsers need space for conflict lists, so we can't
+            default conflicted entries.  For non-conflicted entries
+            or as long as we are not building a GLR parser, 
+            actions that match the default are replaced with zero,
+            which means "use the default". */
 
          if (max > 0)
            {
              int j;
              for (j = 0; j < ntokens; j++)
-               if (actrow[j] == default_rule)
+               if (actrow[j] == default_rule && ! (glr_parser && conflrow[j]))
                  actrow[j] = 0;
-
-             default_rule = -default_rule;
            }
+         default_rule = -default_rule;
        }
     }
 
@@ -465,6 +542,9 @@ action_row (state_t *state)
       if (actrow[i] == SHRT_MIN)
        actrow[i] = 0;
 
+  if (conflicted)
+    conflict_row (state);
+
   return default_rule;
 }
 
@@ -477,6 +557,7 @@ save_row (int state)
   short *sp;
   short *sp1;
   short *sp2;
+  unsigned int *sp3;
 
   count = 0;
   for (i = 0; i < ntokens; i++)
@@ -488,12 +569,18 @@ save_row (int state)
 
   froms[state] = sp1 = sp = XCALLOC (short, count);
   tos[state] = sp2 = XCALLOC (short, count);
+  if (glr_parser)
+    conflict_tos[state] = sp3 = XCALLOC (unsigned int, count);  
+  else 
+    conflict_tos[state] = NULL;
 
   for (i = 0; i < ntokens; i++)
     if (actrow[i] != 0)
       {
        *sp1++ = i;
        *sp2++ = actrow[i];
+       if (glr_parser)
+         *sp3++ = conflrow[i];
       }
 
   tally[state] = count;
@@ -513,9 +600,22 @@ static void
 token_actions (void)
 {
   size_t i;
+  int nconflict = conflicts_total_count ();
+
   short *yydefact = XCALLOC (short, nstates);
 
   actrow = XCALLOC (short, ntokens);
+
+  conflrow = XCALLOC (short, ntokens);
+  if (glr_parser)
+    {
+      conflict_list = XCALLOC (unsigned int, 1 + 2 * nconflict);
+      conflict_list_free = 2 * nconflict;
+      conflict_list_cnt = 1;
+    } 
+  else 
+    conflict_list_free = conflict_list_cnt = 0;
+
   for (i = 0; i < nstates; ++i)
     {
       yydefact[i] = action_row (states[i]);
@@ -525,6 +625,7 @@ token_actions (void)
   muscle_insert_short_table ("defact", yydefact,
                             yydefact[0], 1, nstates);
   XFREE (actrow);
+  XFREE (conflrow);
   XFREE (yydefact);
 }
 
@@ -555,6 +656,28 @@ actions_output (FILE *out)
   fputs ("]])\n\n", out);
 }
 
+/*--------------------------------------.
+| Output the merge functions to OUT.   |
+`--------------------------------------*/
+
+void
+merger_output (FILE *out)
+{
+  int n;
+  merger_list* p;
+
+  fputs ("m4_define([b4_mergers], \n[[", out);
+  for (n = 1, p = merge_functions; p != NULL; n += 1, p = p->next) 
+    {
+      if (p->type[0] == '\0') 
+       fprintf (out, "  case %d: yyval = %s (*yy0, *yy1); break;\n",
+                n, p->name);
+      else
+       fprintf (out, "  case %d: yyval.%s = %s (*yy0, *yy1); break;\n",
+                n, p->type, p->name);
+    }
+  fputs ("]])\n\n", out);
+}
 
 /*---------------------------------------.
 | Output the tokens definition to OOUT.  |
@@ -844,6 +967,7 @@ pack_vector (int vector)
   int loc = 0;
   short *from = froms[i];
   short *to = tos[i];
+  unsigned int *conflict_to = conflict_tos[i];
 
   assert (t);
 
@@ -872,6 +996,8 @@ pack_vector (int vector)
            {
              loc = j + from[k];
              table[loc] = to[k];
+             if (glr_parser && conflict_to != NULL)
+               conflict_table[loc] = conflict_to[k];
              check[loc] = from[k];
            }
 
@@ -900,6 +1026,8 @@ pack_table (void)
   base = XCALLOC (short, nvectors);
   pos = XCALLOC (short, nentries);
   table = XCALLOC (short, table_size);
+  if (glr_parser)
+    conflict_table = XCALLOC (unsigned int, table_size);
   check = XCALLOC (short, table_size);
 
   lowzero = 0;
@@ -928,14 +1056,16 @@ pack_table (void)
     {
       XFREE (froms[i]);
       XFREE (tos[i]);
+      XFREE (conflict_tos[i]);
     }
 
   XFREE (froms);
   XFREE (tos);
+  XFREE (conflict_tos);
   XFREE (pos);
 }
 
-/* the following functions output yytable, yycheck
+/* the following functions output yytable, yycheck, yyconflp, yyconfl,
    and the vectors whose elements index the portion starts */
 
 static void
@@ -962,6 +1092,28 @@ output_table (void)
 
 
 static void
+output_conflicts (void)
+{
+  /* GLR parsing slightly modifies yytable and yycheck
+     (and thus yypact) so that in states with unresolved conflicts,
+     the default reduction is not used in the conflicted entries, so
+     that there is a place to put a conflict pointer.  This means that
+     yyconflp and yyconfl are nonsense for a non-GLR parser, so we
+     avoid accidents by not writing them out in that case. */
+  if (! glr_parser)
+    return;
+
+  muscle_insert_unsigned_int_table ("conflict_list_heads", conflict_table, 
+                                   conflict_table[0], 1, high+1);
+  muscle_insert_unsigned_int_table ("conflicting_rules", conflict_list, 
+                            conflict_list[0], 1, conflict_list_cnt);
+
+  XFREE (conflict_table);
+  XFREE (conflict_list);
+}
+
+
+static void
 output_check (void)
 {
   muscle_insert_short_table ("check", check,
@@ -982,6 +1134,7 @@ output_actions (void)
 
   froms = XCALLOC (short *, nvectors);
   tos = XCALLOC (short *, nvectors);
+  conflict_tos = XCALLOC (unsigned int *, nvectors);
   tally = XCALLOC (short, nvectors);
   width = XCALLOC (short, nvectors);
 
@@ -999,6 +1152,7 @@ output_actions (void)
 
   output_base ();
   output_table ();
+  output_conflicts ();
 
   output_check ();
 
@@ -1084,6 +1238,7 @@ output_skeleton (void)
   fputs ("m4_init()\n", out);
 
   actions_output (out);
+  merger_output (out);
   token_definitions_output (out);
   symbol_destructors_output (out);
   symbol_printers_output (out);
@@ -1140,7 +1295,12 @@ prepare (void)
 
   /* Find the right skeleton file.  */
   if (!skeleton)
-    skeleton = "yacc.c";
+    {
+      if (glr_parser)
+       skeleton = "glr.c";
+      else
+       skeleton = "yacc.c";
+    }
 
   /* Parse the skeleton file and output the needed parsers.  */
   muscle_insert ("skeleton", skeleton);
index e61e3aa..ed1685b 100644 (file)
@@ -135,30 +135,33 @@ braced_code_t current_braced_code = action_braced_code;
      PERCENT_EXPECT = 270,
      PERCENT_START = 271,
      PERCENT_PREC = 272,
-     PERCENT_VERBOSE = 273,
-     PERCENT_ERROR_VERBOSE = 274,
-     PERCENT_OUTPUT = 275,
-     PERCENT_FILE_PREFIX = 276,
-     PERCENT_NAME_PREFIX = 277,
-     PERCENT_DEFINE = 278,
-     PERCENT_PURE_PARSER = 279,
-     PERCENT_DEFINES = 280,
-     PERCENT_YACC = 281,
-     PERCENT_DEBUG = 282,
-     PERCENT_LOCATIONS = 283,
-     PERCENT_NO_LINES = 284,
-     PERCENT_SKELETON = 285,
-     PERCENT_TOKEN_TABLE = 286,
-     TYPE = 287,
-     EQUAL = 288,
-     SEMICOLON = 289,
-     COLON = 290,
-     PIPE = 291,
-     ID = 292,
-     PERCENT_PERCENT = 293,
-     PROLOGUE = 294,
-     EPILOGUE = 295,
-     BRACED_CODE = 296
+     PERCENT_DPREC = 273,
+     PERCENT_MERGE = 274,
+     PERCENT_VERBOSE = 275,
+     PERCENT_ERROR_VERBOSE = 276,
+     PERCENT_OUTPUT = 277,
+     PERCENT_FILE_PREFIX = 278,
+     PERCENT_NAME_PREFIX = 279,
+     PERCENT_DEFINE = 280,
+     PERCENT_PURE_PARSER = 281,
+     PERCENT_GLR_PARSER = 282,
+     PERCENT_DEFINES = 283,
+     PERCENT_YACC = 284,
+     PERCENT_DEBUG = 285,
+     PERCENT_LOCATIONS = 286,
+     PERCENT_NO_LINES = 287,
+     PERCENT_SKELETON = 288,
+     PERCENT_TOKEN_TABLE = 289,
+     TYPE = 290,
+     EQUAL = 291,
+     SEMICOLON = 292,
+     COLON = 293,
+     PIPE = 294,
+     ID = 295,
+     PERCENT_PERCENT = 296,
+     PROLOGUE = 297,
+     EPILOGUE = 298,
+     BRACED_CODE = 299
    };
 # endif
   /* POSIX requires `int' for tokens in interfaces.  */
@@ -180,30 +183,33 @@ braced_code_t current_braced_code = action_braced_code;
 #define PERCENT_EXPECT 270
 #define PERCENT_START 271
 #define PERCENT_PREC 272
-#define PERCENT_VERBOSE 273
-#define PERCENT_ERROR_VERBOSE 274
-#define PERCENT_OUTPUT 275
-#define PERCENT_FILE_PREFIX 276
-#define PERCENT_NAME_PREFIX 277
-#define PERCENT_DEFINE 278
-#define PERCENT_PURE_PARSER 279
-#define PERCENT_DEFINES 280
-#define PERCENT_YACC 281
-#define PERCENT_DEBUG 282
-#define PERCENT_LOCATIONS 283
-#define PERCENT_NO_LINES 284
-#define PERCENT_SKELETON 285
-#define PERCENT_TOKEN_TABLE 286
-#define TYPE 287
-#define EQUAL 288
-#define SEMICOLON 289
-#define COLON 290
-#define PIPE 291
-#define ID 292
-#define PERCENT_PERCENT 293
-#define PROLOGUE 294
-#define EPILOGUE 295
-#define BRACED_CODE 296
+#define PERCENT_DPREC 273
+#define PERCENT_MERGE 274
+#define PERCENT_VERBOSE 275
+#define PERCENT_ERROR_VERBOSE 276
+#define PERCENT_OUTPUT 277
+#define PERCENT_FILE_PREFIX 278
+#define PERCENT_NAME_PREFIX 279
+#define PERCENT_DEFINE 280
+#define PERCENT_PURE_PARSER 281
+#define PERCENT_GLR_PARSER 282
+#define PERCENT_DEFINES 283
+#define PERCENT_YACC 284
+#define PERCENT_DEBUG 285
+#define PERCENT_LOCATIONS 286
+#define PERCENT_NO_LINES 287
+#define PERCENT_SKELETON 288
+#define PERCENT_TOKEN_TABLE 289
+#define TYPE 290
+#define EQUAL 291
+#define SEMICOLON 292
+#define COLON 293
+#define PIPE 294
+#define ID 295
+#define PERCENT_PERCENT 296
+#define PROLOGUE 297
+#define EPILOGUE 298
+#define BRACED_CODE 299
 
 
 
@@ -230,8 +236,8 @@ typedef union {
   char *string;
   associativity assoc;
 } yystype;
-/* Line 232 of /usr/local/share/bison/bison.simple.  */
-#line 235 "parse-gram.c"
+/* Line 272 of /home/cs/hilfingr/work/grammars/glr2/install/share/bison/yacc.c.  */
+#line 241 "parse-gram.c"
 # define YYSTYPE yystype
 # define YYSTYPE_IS_TRIVIAL 1
 #endif
@@ -251,8 +257,8 @@ typedef struct yyltype
 /* Copy the second part of user declarations.  */
 
 
-/* Line 252 of /usr/local/share/bison/bison.simple.  */
-#line 256 "parse-gram.c"
+/* Line 292 of /home/cs/hilfingr/work/grammars/glr2/install/share/bison/yacc.c.  */
+#line 262 "parse-gram.c"
 
 #if ! defined (yyoverflow) || YYERROR_VERBOSE
 
@@ -346,20 +352,20 @@ union yyalloc
 /* YYFINAL -- State number of the termination state. */
 #define YYFINAL  3
 #define YYFLAG  -32768
-#define YYLAST   151
+#define YYLAST   125
 
 /* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS  42
+#define YYNTOKENS  45
 /* YYNNTS -- Number of nonterminals. */
 #define YYNNTS  28
 /* YYNRULES -- Number of rules. */
-#define YYNRULES  71
+#define YYNRULES  74
 /* YYNRULES -- Number of states. */
-#define YYNSTATES  101
+#define YYNSTATES  106
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   296
+#define YYMAXUTOK   299
 
 #define YYTRANSLATE(X) \
   ((unsigned)(X) <= YYMAXUTOK ? yytranslate[X] : YYUNDEFTOK)
@@ -396,7 +402,7 @@ static const unsigned char yytranslate[] =
        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44
 };
 
 #if YYDEBUG
@@ -405,50 +411,51 @@ static const unsigned char yytranslate[] =
 static const unsigned char yyprhs[] =
 {
        0,     0,     3,     8,     9,    13,    15,    17,    19,    23,
-      25,    27,    30,    34,    36,    40,    42,    46,    48,    51,
-      53,    55,    57,    59,    61,    64,    67,    68,    73,    74,
-      79,    80,    84,    85,    89,    93,    97,    99,   101,   103,
-     104,   106,   108,   111,   113,   115,   118,   121,   125,   127,
-     130,   132,   135,   137,   140,   141,   147,   149,   153,   154,
-     157,   160,   164,   166,   168,   170,   172,   174,   176,   177,
-     180,   181
+      25,    27,    30,    34,    36,    40,    42,    46,    48,    50,
+      53,    55,    57,    59,    61,    63,    66,    69,    70,    75,
+      76,    81,    82,    86,    87,    91,    95,    99,   101,   103,
+     105,   106,   108,   110,   113,   115,   117,   120,   123,   127,
+     129,   132,   134,   137,   139,   142,   143,   149,   151,   155,
+     156,   159,   162,   166,   170,   174,   176,   178,   180,   182,
+     184,   186,   187,   190,   191
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS. */
 static const signed char yyrhs[] =
 {
-      43,     0,    -1,    44,    38,    58,    68,    -1,    -1,    44,
-      45,    69,    -1,    46,    -1,    39,    -1,    27,    -1,    23,
-      67,    67,    -1,    25,    -1,    19,    -1,    15,     5,    -1,
-      21,    33,    67,    -1,    28,    -1,    22,    33,    67,    -1,
-      29,    -1,    20,    33,    67,    -1,    24,    -1,    30,    67,
-      -1,    31,    -1,    18,    -1,    26,    -1,    52,    -1,    49,
-      -1,    16,    64,    -1,    11,    41,    -1,    -1,     9,    47,
-      41,    55,    -1,    -1,    10,    48,    41,    55,    -1,    -1,
-       7,    50,    57,    -1,    -1,     6,    51,    57,    -1,     8,
-      32,    55,    -1,    53,    54,    55,    -1,    12,    -1,    13,
-      -1,    14,    -1,    -1,    32,    -1,    64,    -1,    55,    64,
-      -1,    32,    -1,    37,    -1,    37,     5,    -1,    37,    66,
-      -1,    37,     5,    66,    -1,    56,    -1,    57,    56,    -1,
-      59,    -1,    58,    59,    -1,    60,    -1,    46,    34,    -1,
-      -1,    37,    35,    61,    62,    34,    -1,    63,    -1,    62,
-      36,    63,    -1,    -1,    63,    64,    -1,    63,    65,    -1,
-      63,    17,    64,    -1,    37,    -1,    66,    -1,     4,    -1,
-      41,    -1,     3,    -1,     3,    -1,    -1,    38,    40,    -1,
-      -1,    34,    -1
+      46,     0,    -1,    47,    41,    61,    71,    -1,    -1,    47,
+      48,    72,    -1,    49,    -1,    42,    -1,    30,    -1,    25,
+      70,    70,    -1,    28,    -1,    21,    -1,    15,     5,    -1,
+      23,    36,    70,    -1,    31,    -1,    24,    36,    70,    -1,
+      32,    -1,    22,    36,    70,    -1,    26,    -1,    27,    -1,
+      33,    70,    -1,    34,    -1,    20,    -1,    29,    -1,    55,
+      -1,    52,    -1,    16,    67,    -1,    11,    44,    -1,    -1,
+       9,    50,    44,    58,    -1,    -1,    10,    51,    44,    58,
+      -1,    -1,     7,    53,    60,    -1,    -1,     6,    54,    60,
+      -1,     8,    35,    58,    -1,    56,    57,    58,    -1,    12,
+      -1,    13,    -1,    14,    -1,    -1,    35,    -1,    67,    -1,
+      58,    67,    -1,    35,    -1,    40,    -1,    40,     5,    -1,
+      40,    69,    -1,    40,     5,    69,    -1,    59,    -1,    60,
+      59,    -1,    62,    -1,    61,    62,    -1,    63,    -1,    49,
+      37,    -1,    -1,    40,    38,    64,    65,    37,    -1,    66,
+      -1,    65,    39,    66,    -1,    -1,    66,    67,    -1,    66,
+      68,    -1,    66,    17,    67,    -1,    66,    18,     5,    -1,
+      66,    19,    35,    -1,    40,    -1,    69,    -1,     4,    -1,
+      44,    -1,     3,    -1,     3,    -1,    -1,    41,    43,    -1,
+      -1,    37,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const unsigned short yyrline[] =
 {
-       0,   155,   155,   168,   170,   173,   175,   176,   177,   178,
-     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
-     189,   190,   193,   195,   196,   200,   207,   206,   217,   216,
-     229,   228,   234,   234,   239,   248,   263,   265,   266,   269,
-     271,   276,   278,   282,   287,   292,   298,   304,   314,   317,
-     326,   328,   334,   336,   340,   339,   344,   346,   349,   352,
-     354,   356,   360,   362,   363,   366,   372,   381,   389,   394,
-     400,   402
+       0,   158,   158,   171,   173,   176,   178,   179,   180,   181,
+     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
+     192,   193,   194,   197,   199,   200,   204,   211,   210,   221,
+     220,   233,   232,   238,   238,   243,   252,   267,   269,   270,
+     273,   275,   280,   282,   286,   291,   296,   302,   308,   318,
+     321,   330,   332,   338,   340,   344,   343,   348,   350,   353,
+     356,   358,   360,   362,   364,   368,   370,   371,   374,   380,
+     389,   397,   402,   408,   410
 };
 #endif
 
@@ -460,19 +467,19 @@ static const char *const yytname[] =
   "\"end of string\"", "error", "$undefined.", "STRING", "CHARACTER", "INT", 
   "\"%token\"", "\"%nterm\"", "\"%type\"", "\"%destructor\"", 
   "\"%printer\"", "\"%union\"", "\"%left\"", "\"%right\"", 
-  "\"%nonassoc\"", "\"%expect\"", "\"%start\"", "\"%prec\"", 
-  "\"%verbose\"", "\"%error-verbose\"", "\"%output\"", "\"%file-prefix\"", 
-  "\"%name-prefix\"", "\"%define\"", "\"%pure-parser\"", "\"%defines\"", 
-  "\"%yacc\"", "\"%debug\"", "\"%locations\"", "\"%no-lines\"", 
-  "\"%skeleton\"", "\"%token-table\"", "TYPE", "\"=\"", "\";\"", "\":\"", 
-  "\"|\"", "\"identifier\"", "\"%%\"", "PROLOGUE", "EPILOGUE", 
-  "BRACED_CODE", "$axiom", "input", "declarations", "declaration", 
-  "grammar_declaration", "@1", "@2", "symbol_declaration", "@3", "@4", 
-  "precedence_declaration", "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
+  "\"%nonassoc\"", "\"%expect\"", "\"%start\"", "\"%prec\"", "\"%dprec\"", 
+  "\"%merge\"", "\"%verbose\"", "\"%error-verbose\"", "\"%output\"", 
+  "\"%file-prefix\"", "\"%name-prefix\"", "\"%define\"", 
+  "\"%pure-parser\"", "\"%glr-parser\"", "\"%defines\"", "\"%yacc\"", 
+  "\"%debug\"", "\"%locations\"", "\"%no-lines\"", "\"%skeleton\"", 
+  "\"%token-table\"", "TYPE", "\"=\"", "\";\"", "\":\"", "\"|\"", 
+  "\"identifier\"", "\"%%\"", "PROLOGUE", "EPILOGUE", "BRACED_CODE", 
+  "$axiom", "input", "declarations", "declaration", "grammar_declaration", 
+  "@1", "@2", "symbol_declaration", "@3", "@4", "precedence_declaration", 
+  "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
 };
 #endif
 
@@ -484,33 +491,33 @@ static const short yytoknum[] =
      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
      275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
      285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
-     295,   296,    -1
+     295,   296,   297,   298,   299,    -1
 };
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const unsigned char yyr1[] =
 {
-       0,    42,    43,    44,    44,    45,    45,    45,    45,    45,
-      45,    45,    45,    45,    45,    45,    45,    45,    45,    45,
-      45,    45,    46,    46,    46,    46,    47,    46,    48,    46,
-      50,    49,    51,    49,    49,    52,    53,    53,    53,    54,
-      54,    55,    55,    56,    56,    56,    56,    56,    57,    57,
-      58,    58,    59,    59,    61,    60,    62,    62,    63,    63,
-      63,    63,    64,    64,    64,    65,    66,    67,    68,    68,
-      69,    69
+       0,    45,    46,    47,    47,    48,    48,    48,    48,    48,
+      48,    48,    48,    48,    48,    48,    48,    48,    48,    48,
+      48,    48,    48,    49,    49,    49,    49,    50,    49,    51,
+      49,    53,    52,    54,    52,    52,    55,    56,    56,    56,
+      57,    57,    58,    58,    59,    59,    59,    59,    59,    60,
+      60,    61,    61,    62,    62,    64,    63,    65,    65,    66,
+      66,    66,    66,    66,    66,    67,    67,    67,    68,    69,
+      70,    71,    71,    72,    72
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
 static const unsigned char yyr2[] =
 {
        0,     2,     4,     0,     3,     1,     1,     1,     3,     1,
-       1,     2,     3,     1,     3,     1,     3,     1,     2,     1,
-       1,     1,     1,     1,     2,     2,     0,     4,     0,     4,
-       0,     3,     0,     3,     3,     3,     1,     1,     1,     0,
-       1,     1,     2,     1,     1,     2,     2,     3,     1,     2,
-       1,     2,     1,     2,     0,     5,     1,     3,     0,     2,
-       2,     3,     1,     1,     1,     1,     1,     1,     0,     2,
-       0,     1
+       1,     2,     3,     1,     3,     1,     3,     1,     1,     2,
+       1,     1,     1,     1,     1,     2,     2,     0,     4,     0,
+       4,     0,     3,     0,     3,     3,     3,     1,     1,     1,
+       0,     1,     1,     2,     1,     1,     2,     2,     3,     1,
+       2,     1,     2,     1,     2,     0,     5,     1,     3,     0,
+       2,     2,     3,     3,     3,     1,     1,     1,     1,     1,
+       1,     0,     2,     0,     1
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -518,50 +525,50 @@ static const unsigned char yyr2[] =
    means the default is an error.  */
 static const short yydefact[] =
 {
-       3,     0,     0,     0,    32,    30,     0,    26,    28,     0,
-      36,    37,    38,     0,     0,    20,    10,     0,     0,     0,
-       0,    17,     9,    21,     7,    13,    15,     0,    19,     0,
-       6,    70,     5,    23,    22,    39,     0,     0,     0,     0,
-       0,    25,    11,    66,    64,    62,    24,    63,     0,     0,
-       0,    67,     0,    18,     0,     0,    68,    50,    52,    71,
-       4,    40,     0,    43,    44,    48,    33,    31,    34,    41,
-       0,     0,    16,    12,    14,     8,    54,    53,     0,    51,
-       2,    35,    45,    46,    49,    42,    27,    29,    58,    69,
-      47,     0,    56,    55,    58,     0,    65,    59,    60,    57,
-      61
+       3,     0,     0,     0,    33,    31,     0,    27,    29,     0,
+      37,    38,    39,     0,     0,    21,    10,     0,     0,     0,
+       0,    17,    18,     9,    22,     7,    13,    15,     0,    20,
+       0,     6,    73,     5,    24,    23,    40,     0,     0,     0,
+       0,     0,    26,    11,    69,    67,    65,    25,    66,     0,
+       0,     0,    70,     0,    19,     0,     0,    71,    51,    53,
+      74,     4,    41,     0,    44,    45,    49,    34,    32,    35,
+      42,     0,     0,    16,    12,    14,     8,    55,    54,     0,
+      52,     2,    36,    46,    47,    50,    43,    28,    30,    59,
+      72,    48,     0,    57,    56,    59,     0,     0,     0,    68,
+      60,    61,    58,    62,    63,    64
 };
 
 /* YYPGOTO[NTERM-NUM]. */
 static const short yydefgoto[] =
 {
-      -1,     1,     2,    31,    55,    39,    40,    33,    37,    36,
-      34,    35,    62,    68,    65,    66,    56,    57,    58,    88,
-      91,    92,    69,    98,    47,    52,    80,    60
+      -1,     1,     2,    32,    56,    40,    41,    34,    38,    37,
+      35,    36,    63,    69,    66,    67,    57,    58,    59,    89,
+      92,    93,    70,   101,    48,    53,    81,    61
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
 static const short yypact[] =
 {
-  -32768,     8,    80,-32768,-32768,-32768,   -19,-32768,-32768,   -11,
-  -32768,-32768,-32768,    31,     0,-32768,-32768,     5,     9,    11,
-      40,-32768,-32768,-32768,-32768,-32768,-32768,    40,-32768,   114,
-  -32768,    12,-32768,-32768,-32768,    13,   -27,   -27,     0,    14,
-      15,-32768,-32768,-32768,-32768,-32768,-32768,-32768,    40,    40,
-      40,-32768,    40,-32768,    16,    18,    10,-32768,-32768,-32768,
-  -32768,-32768,     0,-32768,     6,-32768,   -27,   -27,     0,-32768,
-       0,     0,-32768,-32768,-32768,-32768,-32768,-32768,    17,-32768,
-  -32768,     0,    46,-32768,-32768,-32768,     0,     0,-32768,-32768,
-  -32768,   -22,    -2,-32768,-32768,     0,-32768,-32768,-32768,    -2,
-  -32768
+  -32768,     7,    83,-32768,-32768,-32768,   -23,-32768,-32768,     3,
+  -32768,-32768,-32768,    43,     0,-32768,-32768,    13,    14,    15,
+      51,-32768,-32768,-32768,-32768,-32768,-32768,-32768,    51,-32768,
+      23,-32768,    19,-32768,-32768,-32768,    22,   -29,   -29,     0,
+      17,    18,-32768,-32768,-32768,-32768,-32768,-32768,-32768,    51,
+      51,    51,-32768,    51,-32768,    20,    27,    12,-32768,-32768,
+  -32768,-32768,-32768,     0,-32768,     5,-32768,   -29,   -29,     0,
+  -32768,     0,     0,-32768,-32768,-32768,-32768,-32768,-32768,    28,
+  -32768,-32768,     0,    56,-32768,-32768,-32768,     0,     0,-32768,
+  -32768,-32768,     4,    -2,-32768,-32768,     0,    55,    35,-32768,
+  -32768,-32768,    -2,-32768,-32768,-32768
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const short yypgoto[] =
 {
-  -32768,-32768,-32768,-32768,    48,-32768,-32768,-32768,-32768,-32768,
-  -32768,-32768,-32768,   -30,   -33,    21,-32768,    -3,-32768,-32768,
-  -32768,   -35,   -14,-32768,   -57,   -21,-32768,-32768
+  -32768,-32768,-32768,-32768,    70,-32768,-32768,-32768,-32768,-32768,
+  -32768,-32768,-32768,   -58,   -22,    37,-32768,    21,-32768,-32768,
+  -32768,   -19,   -14,-32768,   -56,    16,-32768,-32768
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
@@ -569,59 +576,53 @@ static const short yypgoto[] =
    number is the opposite.  If zero, do what YYDEFACT says.  */
 static const short yytable[] =
 {
-      46,    43,    44,    43,    44,    63,    53,    83,     3,    43,
-      64,    82,    93,    38,    94,    95,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    90,    14,    72,    73,    74,
-      41,    75,    81,    84,    84,    45,    42,    45,    48,    96,
-      86,    87,    49,    51,    50,    61,    59,    54,    78,    43,
-      32,    76,    77,    79,    85,    70,    71,    89,    67,    99,
-       0,     0,     0,     0,     0,     0,     0,    85,     0,     0,
-       0,     0,    85,    85,     0,     0,     0,     0,    97,     0,
-       0,   100,     0,     0,     0,    97,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,     0,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,     0,     0,     0,     0,     0,     0,    29,    30,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,     0,
-      14,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    54
+      47,    44,    45,    44,    45,    82,    64,     3,    44,    84,
+      83,    65,    39,    87,    88,    96,    97,    98,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    91,    14,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    46,    14,
+      46,    94,    99,    95,    54,    85,    85,    42,    43,    49,
+      50,    51,    55,    79,    52,    86,    60,    62,    77,    44,
+     104,    71,    72,    55,    78,    73,    74,    75,    86,    76,
+     105,    90,    33,    86,    86,    68,   102,     0,    80,   100,
+       0,     0,   103,     0,     0,     0,     0,     0,   100,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+       0,     0,     0,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,     0,     0,
+       0,     0,     0,     0,    30,    31
 };
 
 static const short yycheck[] =
 {
-      14,     3,     4,     3,     4,    32,    27,    64,     0,     3,
-      37,     5,    34,    32,    36,    17,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    82,    16,    48,    49,    50,
-      41,    52,    62,    66,    67,    37,     5,    37,    33,    41,
-      70,    71,    33,     3,    33,    32,    34,    37,    38,     3,
-       2,    35,    34,    56,    68,    41,    41,    40,    37,    94,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    81,    -1,    -1,
-      -1,    -1,    86,    87,    -1,    -1,    -1,    -1,    92,    -1,
-      -1,    95,    -1,    -1,    -1,    99,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    -1,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    -1,    -1,    -1,    -1,    -1,    -1,    38,    39,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    -1,
-      16,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    37
+      14,     3,     4,     3,     4,    63,    35,     0,     3,    65,
+       5,    40,    35,    71,    72,    17,    18,    19,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    83,    16,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    40,    16,
+      40,    37,    44,    39,    28,    67,    68,    44,     5,    36,
+      36,    36,    40,    41,     3,    69,    37,    35,    38,     3,
+       5,    44,    44,    40,    37,    49,    50,    51,    82,    53,
+      35,    43,     2,    87,    88,    38,    95,    -1,    57,    93,
+      -1,    -1,    96,    -1,    -1,    -1,    -1,    -1,   102,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      -1,    -1,    -1,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    30,    31,    32,    33,    34,    -1,    -1,
+      -1,    -1,    -1,    -1,    41,    42
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
    symbol of state STATE-NUM.  */
 static const unsigned char yystos[] =
 {
-       0,    43,    44,     0,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    29,    30,    31,    38,
-      39,    45,    46,    49,    52,    53,    51,    50,    32,    47,
-      48,    41,     5,     3,     4,    37,    64,    66,    33,    33,
-      33,     3,    67,    67,    37,    46,    58,    59,    60,    34,
-      69,    32,    54,    32,    37,    56,    57,    57,    55,    64,
-      41,    41,    67,    67,    67,    67,    35,    34,    38,    59,
-      68,    55,     5,    66,    56,    64,    55,    55,    61,    40,
-      66,    62,    63,    34,    36,    17,    41,    64,    65,    63,
-      64
+       0,    46,    47,     0,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      41,    42,    48,    49,    52,    55,    56,    54,    53,    35,
+      50,    51,    44,     5,     3,     4,    40,    67,    69,    36,
+      36,    36,     3,    70,    70,    40,    49,    61,    62,    63,
+      37,    72,    35,    57,    35,    40,    59,    60,    60,    58,
+      67,    44,    44,    70,    70,    70,    70,    38,    37,    41,
+      62,    71,    58,     5,    69,    59,    67,    58,    58,    64,
+      43,    69,    65,    66,    37,    39,    17,    18,    19,    44,
+      67,    68,    66,    67,     5,    35
 };
 
 #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
@@ -828,8 +829,8 @@ int yyparse (void);
 #endif
 
 #if defined (__STDC__) || defined (__cplusplus)
-static void yydestructor (int yytype,
-                         YYSTYPE yyvalue, YYLTYPE yylocation);
+static void yydestruct (int yytype,
+                       YYSTYPE yyvalue, YYLTYPE yylocation);
 # if YYDEBUG
 static void yysymprint (FILE* out, int yytype,
                        YYSTYPE yyvalue, YYLTYPE yylocation);
@@ -1137,7 +1138,7 @@ yyreduce:
   switch (yyn)
     {
         case 2:
-#line 157 "parse-gram.y"
+#line 160 "parse-gram.y"
     {
       yycontrol->errcode = 0;
       epilogue_set (yyvsp[0].string, yylsp[0]);
@@ -1145,94 +1146,99 @@ yyreduce:
     break;
 
   case 6:
-#line 175 "parse-gram.y"
+#line 178 "parse-gram.y"
     { prologue_augment (yyvsp[0].string, yylsp[0]); }
     break;
 
   case 7:
-#line 176 "parse-gram.y"
+#line 179 "parse-gram.y"
     { debug_flag = 1; }
     break;
 
   case 8:
-#line 177 "parse-gram.y"
+#line 180 "parse-gram.y"
     { muscle_insert (yyvsp[-1].string, yyvsp[0].string); }
     break;
 
   case 9:
-#line 178 "parse-gram.y"
+#line 181 "parse-gram.y"
     { defines_flag = 1; }
     break;
 
   case 10:
-#line 179 "parse-gram.y"
+#line 182 "parse-gram.y"
     { error_verbose = 1; }
     break;
 
   case 11:
-#line 180 "parse-gram.y"
+#line 183 "parse-gram.y"
     { expected_conflicts = yyvsp[0].integer; }
     break;
 
   case 12:
-#line 181 "parse-gram.y"
+#line 184 "parse-gram.y"
     { spec_file_prefix = yyvsp[0].string; }
     break;
 
   case 13:
-#line 182 "parse-gram.y"
+#line 185 "parse-gram.y"
     { locations_flag = 1; }
     break;
 
   case 14:
-#line 183 "parse-gram.y"
+#line 186 "parse-gram.y"
     { spec_name_prefix = yyvsp[0].string; }
     break;
 
   case 15:
-#line 184 "parse-gram.y"
+#line 187 "parse-gram.y"
     { no_lines_flag = 1; }
     break;
 
   case 16:
-#line 185 "parse-gram.y"
+#line 188 "parse-gram.y"
     { spec_outfile = yyvsp[0].string; }
     break;
 
   case 17:
-#line 186 "parse-gram.y"
+#line 189 "parse-gram.y"
     { pure_parser = 1; }
     break;
 
   case 18:
-#line 187 "parse-gram.y"
-    { skeleton = yyvsp[0].string; }
+#line 190 "parse-gram.y"
+    { glr_parser = 1; }
     break;
 
   case 19:
-#line 188 "parse-gram.y"
-    { token_table_flag = 1; }
+#line 191 "parse-gram.y"
+    { skeleton = yyvsp[0].string; }
     break;
 
   case 20:
-#line 189 "parse-gram.y"
-    { report_flag = 1; }
+#line 192 "parse-gram.y"
+    { token_table_flag = 1; }
     break;
 
   case 21:
-#line 190 "parse-gram.y"
+#line 193 "parse-gram.y"
+    { report_flag = 1; }
+    break;
+
+  case 22:
+#line 194 "parse-gram.y"
     { yacc_flag = 1; }
     break;
 
-  case 24:
-#line 197 "parse-gram.y"
+  case 25:
+#line 201 "parse-gram.y"
     {
       grammar_start_symbol_set (yyvsp[0].symbol, yylsp[0]);
     }
     break;
 
-  case 25:
-#line 201 "parse-gram.y"
+  case 26:
+#line 205 "parse-gram.y"
     {
       typed = 1;
       MUSCLE_INSERT_INT ("stype_line", yylsp[0].first_line);
@@ -1240,13 +1246,13 @@ yyreduce:
     }
     break;
 
-  case 26:
-#line 207 "parse-gram.y"
+  case 27:
+#line 211 "parse-gram.y"
     { current_braced_code = destructor_braced_code; }
     break;
 
-  case 27:
-#line 209 "parse-gram.y"
+  case 28:
+#line 213 "parse-gram.y"
     {
       symbol_list_t *list;
       for (list = yyvsp[0].list; list; list = list->next)
@@ -1256,13 +1262,13 @@ yyreduce:
     }
     break;
 
-  case 28:
-#line 217 "parse-gram.y"
+  case 29:
+#line 221 "parse-gram.y"
     { current_braced_code = printer_braced_code; }
     break;
 
-  case 29:
-#line 219 "parse-gram.y"
+  case 30:
+#line 223 "parse-gram.y"
     {
       symbol_list_t *list;
       for (list = yyvsp[0].list; list; list = list->next)
@@ -1272,34 +1278,34 @@ yyreduce:
     }
     break;
 
-  case 30:
-#line 229 "parse-gram.y"
+  case 31:
+#line 233 "parse-gram.y"
     { current_class = nterm_sym; }
     break;
 
-  case 31:
-#line 230 "parse-gram.y"
+  case 32:
+#line 234 "parse-gram.y"
     {
       current_class = unknown_sym;
       current_type = NULL;
     }
     break;
 
-  case 32:
-#line 234 "parse-gram.y"
+  case 33:
+#line 238 "parse-gram.y"
     { current_class = token_sym; }
     break;
 
-  case 33:
-#line 235 "parse-gram.y"
+  case 34:
+#line 239 "parse-gram.y"
     {
       current_class = unknown_sym;
       current_type = NULL;
     }
     break;
 
-  case 34:
-#line 240 "parse-gram.y"
+  case 35:
+#line 244 "parse-gram.y"
     {
       symbol_list_t *list;
       for (list = yyvsp[0].list; list; list = list->next)
@@ -1308,8 +1314,8 @@ yyreduce:
     }
     break;
 
-  case 35:
-#line 250 "parse-gram.y"
+  case 36:
+#line 254 "parse-gram.y"
     {
       symbol_list_t *list;
       ++current_prec;
@@ -1323,58 +1329,58 @@ yyreduce:
     }
     break;
 
-  case 36:
-#line 264 "parse-gram.y"
+  case 37:
+#line 268 "parse-gram.y"
     { yyval.assoc = left_assoc; }
     break;
 
-  case 37:
-#line 265 "parse-gram.y"
+  case 38:
+#line 269 "parse-gram.y"
     { yyval.assoc = right_assoc; }
     break;
 
-  case 38:
-#line 266 "parse-gram.y"
+  case 39:
+#line 270 "parse-gram.y"
     { yyval.assoc = non_assoc; }
     break;
 
-  case 39:
-#line 270 "parse-gram.y"
+  case 40:
+#line 274 "parse-gram.y"
     { current_type = NULL;}
     break;
 
-  case 40:
-#line 271 "parse-gram.y"
+  case 41:
+#line 275 "parse-gram.y"
     { current_type = yyvsp[0].string; }
     break;
 
-  case 41:
-#line 277 "parse-gram.y"
+  case 42:
+#line 281 "parse-gram.y"
     { yyval.list = symbol_list_new (yyvsp[0].symbol, yylsp[0]); }
     break;
 
-  case 42:
-#line 278 "parse-gram.y"
+  case 43:
+#line 282 "parse-gram.y"
     { yyval.list = symbol_list_prepend (yyvsp[-1].list, yyvsp[0].symbol, yylsp[0]); }
     break;
 
-  case 43:
-#line 284 "parse-gram.y"
+  case 44:
+#line 288 "parse-gram.y"
     {
        current_type = yyvsp[0].string;
      }
     break;
 
-  case 44:
-#line 288 "parse-gram.y"
+  case 45:
+#line 292 "parse-gram.y"
     {
        symbol_class_set (yyvsp[0].symbol, current_class, yylsp[0]);
        symbol_type_set (yyvsp[0].symbol, current_type, yylsp[0]);
      }
     break;
 
-  case 45:
-#line 293 "parse-gram.y"
+  case 46:
+#line 297 "parse-gram.y"
     {
       symbol_class_set (yyvsp[-1].symbol, current_class, yylsp[-1]);
       symbol_type_set (yyvsp[-1].symbol, current_type, yylsp[-1]);
@@ -1382,8 +1388,8 @@ yyreduce:
     }
     break;
 
-  case 46:
-#line 299 "parse-gram.y"
+  case 47:
+#line 303 "parse-gram.y"
     {
       symbol_class_set (yyvsp[-1].symbol, current_class, yylsp[-1]);
       symbol_type_set (yyvsp[-1].symbol, current_type, yylsp[-1]);
@@ -1391,8 +1397,8 @@ yyreduce:
     }
     break;
 
-  case 47:
-#line 305 "parse-gram.y"
+  case 48:
+#line 309 "parse-gram.y"
     {
       symbol_class_set (yyvsp[-2].symbol, current_class, yylsp[-2]);
       symbol_type_set (yyvsp[-2].symbol, current_type, yylsp[-2]);
@@ -1401,101 +1407,111 @@ yyreduce:
     }
     break;
 
-  case 48:
-#line 316 "parse-gram.y"
-    {;}
-    break;
-
   case 49:
-#line 318 "parse-gram.y"
+#line 320 "parse-gram.y"
     {;}
     break;
 
-  case 54:
-#line 340 "parse-gram.y"
-    { current_lhs = yyvsp[-1].symbol; current_lhs_location = yylsp[-1]; }
+  case 50:
+#line 322 "parse-gram.y"
+    {;}
     break;
 
   case 55:
-#line 341 "parse-gram.y"
-    {;}
+#line 344 "parse-gram.y"
+    { current_lhs = yyvsp[-1].symbol; current_lhs_location = yylsp[-1]; }
     break;
 
   case 56:
 #line 345 "parse-gram.y"
-    { grammar_rule_end (yylsp[0]); }
+    {;}
     break;
 
   case 57:
-#line 346 "parse-gram.y"
+#line 349 "parse-gram.y"
     { grammar_rule_end (yylsp[0]); }
     break;
 
   case 58:
-#line 351 "parse-gram.y"
-    { grammar_rule_begin (current_lhs, current_lhs_location); }
+#line 350 "parse-gram.y"
+    { grammar_rule_end (yylsp[0]); }
     break;
 
   case 59:
-#line 353 "parse-gram.y"
-    { grammar_current_rule_symbol_append (yyvsp[0].symbol, yylsp[0]); }
+#line 355 "parse-gram.y"
+    { grammar_rule_begin (current_lhs, current_lhs_location); }
     break;
 
   case 60:
-#line 355 "parse-gram.y"
-    { grammar_current_rule_action_append (yyvsp[0].string, yylsp[0]); }
+#line 357 "parse-gram.y"
+    { grammar_current_rule_symbol_append (yyvsp[0].symbol, yylsp[0]); }
     break;
 
   case 61:
-#line 357 "parse-gram.y"
-    { grammar_current_rule_prec_set (yyvsp[0].symbol, yylsp[0]); }
+#line 359 "parse-gram.y"
+    { grammar_current_rule_action_append (yyvsp[0].string, yylsp[0]); }
     break;
 
   case 62:
 #line 361 "parse-gram.y"
-    { yyval.symbol = yyvsp[0].symbol; }
+    { grammar_current_rule_prec_set (yyvsp[0].symbol, yylsp[0]); }
     break;
 
   case 63:
-#line 362 "parse-gram.y"
-    { yyval.symbol = yyvsp[0].symbol; }
+#line 363 "parse-gram.y"
+    { grammar_current_rule_dprec_set (yyvsp[0].integer, yylsp[0]); }
     break;
 
   case 64:
-#line 363 "parse-gram.y"
-    { yyval.symbol = getsym (yyvsp[0].string, yylsp[0]); }
+#line 365 "parse-gram.y"
+    { grammar_current_rule_merge_set (yyvsp[0].string, yylsp[0]); }
     break;
 
   case 65:
-#line 368 "parse-gram.y"
-    { yyval.string = yyvsp[0].string; }
+#line 369 "parse-gram.y"
+    { yyval.symbol = yyvsp[0].symbol; }
     break;
 
   case 66:
-#line 374 "parse-gram.y"
+#line 370 "parse-gram.y"
+    { yyval.symbol = yyvsp[0].symbol; }
+    break;
+
+  case 67:
+#line 371 "parse-gram.y"
+    { yyval.symbol = getsym (yyvsp[0].string, yylsp[0]); }
+    break;
+
+  case 68:
+#line 376 "parse-gram.y"
+    { yyval.string = yyvsp[0].string; }
+    break;
+
+  case 69:
+#line 382 "parse-gram.y"
     {
       yyval.symbol = getsym (yyvsp[0].string, yylsp[0]);
       symbol_class_set (yyval.symbol, token_sym, yylsp[0]);
     }
     break;
 
-  case 67:
-#line 383 "parse-gram.y"
+  case 70:
+#line 391 "parse-gram.y"
     {
       yyval.string = yyvsp[0].string + 1;
       yyval.string[strlen (yyval.string) - 1] = '\0';
     }
     break;
 
-  case 68:
-#line 391 "parse-gram.y"
+  case 71:
+#line 399 "parse-gram.y"
     {
       yyval.string = xstrdup ("");
     }
     break;
 
-  case 69:
-#line 395 "parse-gram.y"
+  case 72:
+#line 403 "parse-gram.y"
     {
       yyval.string = yyvsp[0].string;
     }
@@ -1504,8 +1520,8 @@ yyreduce:
 
     }
 
-/* Line 1000 of /usr/local/share/bison/bison.simple.  */
-#line 1509 "parse-gram.c"
+/* Line 1040 of /home/cs/hilfingr/work/grammars/glr2/install/share/bison/yacc.c.  */
+#line 1525 "parse-gram.c"
 \f
   yyvsp -= yylen;
   yyssp -= yylen;
@@ -1622,7 +1638,7 @@ yyerrlab1:
                            yystos[*yyssp],
                            *yyvsp, *yylsp));
              YYDPRINTF ((stderr, "\n"));
-             yydestructor (yystos[*yyssp], *yyvsp, *yylsp);
+             yydestruct (yystos[*yyssp], *yyvsp, *yylsp);
              YYPOPSTACK;
            }
          YYABORT;
@@ -1630,7 +1646,7 @@ yyerrlab1:
 
       YYDPRINTF ((stderr, "Discarding token %d (%s).\n",
                  yychar, yytname[yychar1]));
-      yydestructor (yychar1, yylval, yylloc);
+      yydestruct (yychar1, yylval, yylloc);
       yychar = YYEMPTY;
     }
 
@@ -1662,7 +1678,7 @@ yyerrlab1:
                    yystos[*yyssp], *yyvsp, *yylsp));
       YYDPRINTF ((stderr, "\n"));
 
-      yydestructor (yystos[yystate], *yyvsp, *yylsp);
+      yydestruct (yystos[yystate], *yyvsp, *yylsp);
       yyvsp--;
       yystate = *--yyssp;
       yylsp--;
@@ -1729,8 +1745,8 @@ yyreturn:
 `-----------------------------------------------*/
 
 static void
-yydestructor (int yytype,
-             YYSTYPE yyvalue, YYLTYPE yylocation)
+yydestruct (int yytype,
+           YYSTYPE yyvalue, YYLTYPE yylocation)
 {
   switch (yytype)
     {
@@ -1750,23 +1766,25 @@ yysymprint (FILE* yyout, int yytype,
            YYSTYPE yyvalue, YYLTYPE yylocation)
 {
   if (yytype < YYNTOKENS)
-    YYFPRINTF (yyout, "token %s (", yytname[yytype]);
+    {
+      YYFPRINTF (yyout, "token %s (", yytname[yytype]);
+# ifdef YYPRINT
+      YYPRINT (yyout, yytoknum[yytype], yyvalue);
+# endif
+    }
   else
     YYFPRINTF (yyout, "nterm %s (", yytname[yytype]);
-# ifdef YYPRINT
-  YYPRINT (yyout, yytype, yyvalue);
-# else
+
   switch (yytype)
     {
       default:
         break;
     }
-# endif /* !defined YYPRINT. */
   YYFPRINTF (yyout, ")");
 }
 #endif /* YYDEBUG. */
 
-#line 404 "parse-gram.y"
+#line 412 "parse-gram.y"
 
 /*------------------------------------------------------------------.
 | When debugging the parser, display tokens' locations and values.  |
index 9de99f1..54b27f8 100644 (file)
      PERCENT_EXPECT = 270,
      PERCENT_START = 271,
      PERCENT_PREC = 272,
-     PERCENT_VERBOSE = 273,
-     PERCENT_ERROR_VERBOSE = 274,
-     PERCENT_OUTPUT = 275,
-     PERCENT_FILE_PREFIX = 276,
-     PERCENT_NAME_PREFIX = 277,
-     PERCENT_DEFINE = 278,
-     PERCENT_PURE_PARSER = 279,
-     PERCENT_DEFINES = 280,
-     PERCENT_YACC = 281,
-     PERCENT_DEBUG = 282,
-     PERCENT_LOCATIONS = 283,
-     PERCENT_NO_LINES = 284,
-     PERCENT_SKELETON = 285,
-     PERCENT_TOKEN_TABLE = 286,
-     TYPE = 287,
-     EQUAL = 288,
-     SEMICOLON = 289,
-     COLON = 290,
-     PIPE = 291,
-     ID = 292,
-     PERCENT_PERCENT = 293,
-     PROLOGUE = 294,
-     EPILOGUE = 295,
-     BRACED_CODE = 296
+     PERCENT_DPREC = 273,
+     PERCENT_MERGE = 274,
+     PERCENT_VERBOSE = 275,
+     PERCENT_ERROR_VERBOSE = 276,
+     PERCENT_OUTPUT = 277,
+     PERCENT_FILE_PREFIX = 278,
+     PERCENT_NAME_PREFIX = 279,
+     PERCENT_DEFINE = 280,
+     PERCENT_PURE_PARSER = 281,
+     PERCENT_GLR_PARSER = 282,
+     PERCENT_DEFINES = 283,
+     PERCENT_YACC = 284,
+     PERCENT_DEBUG = 285,
+     PERCENT_LOCATIONS = 286,
+     PERCENT_NO_LINES = 287,
+     PERCENT_SKELETON = 288,
+     PERCENT_TOKEN_TABLE = 289,
+     TYPE = 290,
+     EQUAL = 291,
+     SEMICOLON = 292,
+     COLON = 293,
+     PIPE = 294,
+     ID = 295,
+     PERCENT_PERCENT = 296,
+     PROLOGUE = 297,
+     EPILOGUE = 298,
+     BRACED_CODE = 299
    };
 # endif
   /* POSIX requires `int' for tokens in interfaces.  */
 #define PERCENT_EXPECT 270
 #define PERCENT_START 271
 #define PERCENT_PREC 272
-#define PERCENT_VERBOSE 273
-#define PERCENT_ERROR_VERBOSE 274
-#define PERCENT_OUTPUT 275
-#define PERCENT_FILE_PREFIX 276
-#define PERCENT_NAME_PREFIX 277
-#define PERCENT_DEFINE 278
-#define PERCENT_PURE_PARSER 279
-#define PERCENT_DEFINES 280
-#define PERCENT_YACC 281
-#define PERCENT_DEBUG 282
-#define PERCENT_LOCATIONS 283
-#define PERCENT_NO_LINES 284
-#define PERCENT_SKELETON 285
-#define PERCENT_TOKEN_TABLE 286
-#define TYPE 287
-#define EQUAL 288
-#define SEMICOLON 289
-#define COLON 290
-#define PIPE 291
-#define ID 292
-#define PERCENT_PERCENT 293
-#define PROLOGUE 294
-#define EPILOGUE 295
-#define BRACED_CODE 296
+#define PERCENT_DPREC 273
+#define PERCENT_MERGE 274
+#define PERCENT_VERBOSE 275
+#define PERCENT_ERROR_VERBOSE 276
+#define PERCENT_OUTPUT 277
+#define PERCENT_FILE_PREFIX 278
+#define PERCENT_NAME_PREFIX 279
+#define PERCENT_DEFINE 280
+#define PERCENT_PURE_PARSER 281
+#define PERCENT_GLR_PARSER 282
+#define PERCENT_DEFINES 283
+#define PERCENT_YACC 284
+#define PERCENT_DEBUG 285
+#define PERCENT_LOCATIONS 286
+#define PERCENT_NO_LINES 287
+#define PERCENT_SKELETON 288
+#define PERCENT_TOKEN_TABLE 289
+#define TYPE 290
+#define EQUAL 291
+#define SEMICOLON 292
+#define COLON 293
+#define PIPE 294
+#define ID 295
+#define PERCENT_PERCENT 296
+#define PROLOGUE 297
+#define EPILOGUE 298
+#define BRACED_CODE 299
 
 
 
@@ -105,8 +111,8 @@ typedef union {
   char *string;
   associativity assoc;
 } yystype;
-/* Line 1331 of /usr/local/share/bison/bison.simple.  */
-#line 110 "y.tab.h"
+/* Line 1343 of /home/cs/hilfingr/work/grammars/glr2/install/share/bison/yacc.c.  */
+#line 116 "y.tab.h"
 # define YYSTYPE yystype
 #endif
 
index 9686475..2d00e03 100644 (file)
@@ -114,6 +114,8 @@ braced_code_t current_braced_code = action_braced_code;
 %token PERCENT_EXPECT "%expect"
 %token PERCENT_START "%start"
 %token PERCENT_PREC     "%prec"
+%token PERCENT_DPREC    "%dprec"
+%token PERCENT_MERGE    "%merge"
 %token PERCENT_VERBOSE  "%verbose"
 %token PERCENT_ERROR_VERBOSE "%error-verbose"
 
@@ -123,6 +125,7 @@ braced_code_t current_braced_code = action_braced_code;
 
 %token PERCENT_DEFINE "%define"
 %token PERCENT_PURE_PARSER "%pure-parser"
+%token PERCENT_GLR_PARSER "%glr-parser"
 
 %token PERCENT_DEFINES "%defines"
 
@@ -184,6 +187,7 @@ declaration:
 | "%no-lines"                              { no_lines_flag = 1; }
 | "%output" "=" string_content             { spec_outfile = $3; }
 | "%pure-parser"                           { pure_parser = 1; }
+| "%glr-parser"                           { glr_parser = 1; }
 | "%skeleton" string_content               { skeleton = $2; }
 | "%token-table"                           { token_table_flag = 1; }
 | "%verbose"                               { report_flag = 1; }
@@ -355,6 +359,10 @@ rhs:
     { grammar_current_rule_action_append ($2, @2); }
 | rhs "%prec" symbol
     { grammar_current_rule_prec_set ($3, @3); }
+| rhs "%dprec" INT
+    { grammar_current_rule_dprec_set ($3, @3); }
+| rhs "%merge" TYPE
+    { grammar_current_rule_merge_set ($3, @3); }
 ;
 
 symbol:
index c0702eb..088875e 100644 (file)
@@ -37,6 +37,7 @@
 int lineno;
 static symbol_list_t *grammar = NULL;
 static int start_flag = 0;
+merger_list *merge_functions;
 
 /* Nonzero if %union has been seen.  */
 int typed = 0;
@@ -105,6 +106,60 @@ epilogue_set (const char *epilogue, location_t location)
 
 \f
 
+ /*-------------------------------------------------------------------.
+| Return the merger index for a merging function named NAME, whose   |
+| arguments have type TYPE.  Records the function, if new, in        |
+| merger_list.                                                      |
+`-------------------------------------------------------------------*/
+
+static int
+get_merge_function (const char* name, const char* type)
+{
+  merger_list *syms;
+  merger_list head;
+  int n;
+
+  if (! glr_parser)
+    return 0;
+
+  if (type == NULL)
+    type = "";
+
+  head.next = merge_functions;
+  for (syms = &head, n = 1; syms->next != NULL; syms = syms->next, n += 1) 
+    if (strcmp (name, syms->next->name) == 0)
+      break;
+  if (syms->next == NULL) {
+    syms->next = XMALLOC (merger_list, 1);
+    syms->next->name = strdup (name);
+    syms->next->type = strdup (type);
+    syms->next->next = NULL;
+    merge_functions = head.next;
+  } else if (strcmp (type, syms->next->type) != 0)
+    warn (_("result type clash on merge function %s: `%s' vs. `%s'"), 
+         name, type, syms->next->type);
+  return n;
+}
+
+/*--------------------------------------.
+| Free all merge-function definitions. |
+`--------------------------------------*/
+
+void
+free_merger_functions (void)
+{
+  merger_list *L0;
+  if (! glr_parser)
+    return;
+  L0 = merge_functions;
+  while (L0 != NULL)
+    {
+      merger_list *L1 = L0->next;
+      free (L0);
+      L0 = L1;
+    }
+}
+
 /*-------------------------------------------------------------------.
 | Generate a dummy symbol, a nonterminal, whose name cannot conflict |
 | with the user's names.                                             |
@@ -307,6 +362,34 @@ grammar_current_rule_prec_set (symbol_t *precsym, location_t location)
   current_rule->ruleprec = precsym;
 }
 
+/* Attach dynamic precedence DPREC to the current rule. */
+
+void
+grammar_current_rule_dprec_set (int dprec, location_t location)
+{
+  if (! glr_parser)
+    warn_at (location, _("%%dprec affects only GLR parsers"));
+  if (dprec <= 0)
+    complain_at (location, _("%%dprec must be followed by positive number"));
+  else if (current_rule->dprec != 0) 
+    complain_at (location, _("only one %%dprec allowed per rule"));
+  current_rule->dprec = dprec;
+}
+
+/* Attach a merge function NAME with argument type TYPE to current
+   rule. */
+
+void
+grammar_current_rule_merge_set (const char* name, location_t location)
+{
+  if (! glr_parser)
+    warn_at (location, _("%%merge affects only GLR parsers"));
+  if (current_rule->merger != 0) 
+    complain_at (location, _("only one %%merge allowed per rule"));
+  current_rule->merger = 
+    get_merge_function (name, current_rule->sym->type_name);
+}
+
 /* Attach a SYMBOL to the current rule.  If needed, move the previous
    action as a mid-rule action.  */
 
@@ -319,7 +402,6 @@ grammar_current_rule_symbol_append (symbol_t *symbol, location_t location)
   grammar_symbol_append (symbol, location);
 }
 
-
 /* Attach an ACTION to the current rule.  If needed, move the previous
    action as a mid-rule action.  */
 
@@ -363,6 +445,8 @@ packgram (void)
       rules[ruleno].useful = TRUE;
       rules[ruleno].action = p->action;
       rules[ruleno].action_location = p->action_location;
+      rules[ruleno].dprec = p->dprec;
+      rules[ruleno].merger = p->merger;
 
       p = p->next;
       while (p && p->sym)
index 38e9882..956fec1 100644 (file)
 # include "symlist.h"
 # include "parse-gram.h"
 
+typedef struct merger_list
+{
+  struct merger_list* next;
+  const char* name;
+  const char* type;
+} 
+merger_list;
+
 typedef struct gram_control_s
 {
   int errcode;
@@ -70,12 +78,21 @@ void grammar_rule_end PARAMS ((location_t l));
 void grammar_midrule_action PARAMS ((void));
 void grammar_current_rule_prec_set PARAMS ((symbol_t *precsym,
                                            location_t l));
+void grammar_current_rule_dprec_set PARAMS ((int dprec,
+                                           location_t l));
+void grammer_current_rule_merge_set PARAMS ((const char* name,
+                                           location_t l));
+
 void grammar_current_rule_symbol_append PARAMS ((symbol_t *symbol,
                                                 location_t l));
 void grammar_current_rule_action_append PARAMS ((const char *action,
                                                 location_t l));
 extern symbol_list_t *current_rule;
 void reader PARAMS ((void));
+void free_merger_functions PARAMS ((void));
+
+extern merger_list *merge_functions;
+
 extern int typed;
 
 #endif /* !READER_H_ */
index f8875c3..cb71d62 100644 (file)
@@ -15,7 +15,7 @@
 #define yyrestart gram_restart
 #define yytext gram_text
 
-#line 19 "lex.yy.c"
+#line 19 "scan-gram.c"
 /* A lexical scanner generated by flex */
 
 /* Scanner skeleton version:
@@ -27,7 +27,7 @@
 #define YY_FLEX_MINOR_VERSION 5
 
 #include <stdio.h>
-#include <errno.h>
+
 
 /* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
 #ifdef c_plusplus
@@ -40,9 +40,7 @@
 #ifdef __cplusplus
 
 #include <stdlib.h>
-#ifndef _WIN32
 #include <unistd.h>
-#endif
 
 /* Use prototypes in function declarations. */
 #define YY_USE_PROTOS
@@ -309,49 +307,51 @@ static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
        *yy_cp = '\0'; \
        yy_c_buf_p = yy_cp;
 
-#define YY_NUM_RULES 98
-#define YY_END_OF_BUFFER 99
-static yyconst short int yy_accept[361] =
+#define YY_NUM_RULES 101
+#define YY_END_OF_BUFFER 102
+static yyconst short int yy_accept[380] =
     {   0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,   99,   46,
-       35,   34,   34,   39,   46,   38,   36,   46,   37,   31,
-       33,   46,   30,   43,   32,   50,   51,   51,   52,   47,
-       48,   77,   80,   80,   76,   47,   79,   48,   72,   75,
-       75,   71,   74,   54,   55,   55,   53,   70,   57,   58,
-       58,   56,   90,   91,   91,   82,   92,   81,   85,   92,
-       47,   48,   87,   86,   94,   96,   96,   82,   95,   81,
-       85,   97,   97,   97,   82,   81,   85,   35,   34,   34,
-       34,   34,   45,    0,    0,    0,    0,    0,    0,    0,
-
-        0,    0,    0,    0,    0,    0,    0,   42,   36,   40,
-       41,   37,    0,   50,   51,   51,   51,   51,   49,   77,
-       80,   80,   80,   80,   78,   72,   75,   75,   75,   75,
-       73,   54,   55,   55,   55,   55,   69,   68,   69,   61,
-       62,   63,   64,   65,   66,   67,   69,   58,   58,   58,
-       58,   90,   91,   91,   91,   91,   88,    0,   88,    0,
-       83,   84,   89,    0,   89,   94,   96,   96,   96,   96,
-       93,   97,   97,   97,   97,   97,   83,   84,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  102,   49,
+       38,   37,   37,   42,   49,   41,   39,   49,   40,   34,
+       36,   49,   33,   46,   35,   53,   54,   54,   55,   50,
+       51,   80,   83,   83,   79,   50,   82,   51,   75,   78,
+       78,   74,   77,   57,   58,   58,   56,   73,   60,   61,
+       61,   59,   93,   94,   94,   85,   95,   84,   88,   95,
+       50,   51,   90,   89,   97,   99,   99,   85,   98,   84,
+       88,  100,  100,  100,   85,   84,   88,   38,   37,   37,
+       37,   37,   48,    0,    0,    0,    0,    0,    0,    0,
+
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   45,
+       39,   43,   44,   40,    0,   53,   54,   54,   54,   54,
+       52,   80,   83,   83,   83,   83,   81,   75,   78,   78,
+       78,   78,   76,   57,   58,   58,   58,   58,   72,   71,
+       72,   64,   65,   66,   67,   68,   69,   70,   72,   61,
+       61,   61,   61,   93,   94,   94,   94,   94,   91,    0,
+       91,    0,   86,   87,   92,    0,   92,   97,   99,   99,
+       99,   99,   96,  100,  100,  100,  100,  100,   86,   87,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
-       41,   44,    0,    0,    0,   84,   84,   84,    0,    0,
+        0,    0,    0,    0,    0,   44,   47,    0,    0,    0,
+       87,   87,   87,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,   59,   60,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,   10,    0,    0,    0,
-        0,    0,    0,   17,    0,    0,    0,    0,    0,   23,
-        0,   26,    0,    0,   29,    0,    2,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   15,    0,    0,
-        0,   20,    0,   22,   24,   27,    0,    1,    3,    0,
-        0,    7,    0,    0,    0,    0,    0,    0,   16,    0,
-
-        0,    0,    0,    0,    4,    0,    0,    0,    0,    0,
-        0,    0,    0,   18,    0,    0,    0,   28,    0,    0,
-        0,    0,    0,    0,   13,   14,    0,   21,    0,    0,
-        0,    0,    0,   11,    0,    0,    0,    5,    0,    0,
-        0,    0,    0,    0,    0,    8,    0,   12,   19,   25,
-        0,    0,    6,    0,    0,    0,    0,    0,    9,    0
+        0,    0,    0,   62,   63,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,   12,    0,    0,    0,
+        0,    0,    0,    0,   20,    0,    0,    0,    0,    0,
+       26,    0,   29,    0,    0,   32,    0,    2,    0,    0,
+        6,    0,    0,    0,    0,    0,    0,   14,    0,    0,
+        0,   18,    0,    0,    0,   23,    0,   25,   27,   30,
+
+        0,    1,    3,    0,    0,    8,    0,    0,    0,    0,
+        0,    0,    0,   19,    0,    0,    0,    0,    0,    4,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   21,
+        0,    0,    0,   31,    0,    0,    0,    0,    0,    0,
+        0,   16,   17,    0,   24,    0,    0,    0,    0,    0,
+        0,   13,    0,    0,    0,    5,    0,    0,    0,   11,
+        0,    0,    0,    0,    9,    0,   15,   22,   28,    0,
+        0,    7,    0,    0,    0,    0,    0,   10,    0
     } ;
 
 static yyconst int yy_ec[256] =
@@ -395,198 +395,206 @@ static yyconst int yy_meta[51] =
         9,    9,    9,    9,    9,    9,    9,    5,    1,    5
     } ;
 
-static yyconst short int yy_base[387] =
+static yyconst short int yy_base[406] =
     {   0,
         0,    0,   48,   51,   58,   61,   83,   86,   73,   94,
-      108,  110,  131,  179,  227,  249,  116,  142,  819,  820,
-      816,   55,   64,  820,  267,  820,    0,   44,   79,  820,
-      820,    0,  820,  820,  820,    0,   97,   99,  805,  820,
-      820,    0,  119,  122,  820,  820,    0,  820,    0,  126,
-      138,  820,    0,    0,  145,  153,  820,  311,  820,  155,
-      157,  820,    0,  159,  164,  820,  159,  820,   62,  164,
-      820,  820,  820,  820,    0,  185,  189,  820,  766,  820,
-      185,  192,  201,  203,  205,  207,  209,  813,  211,  213,
-      216,  219,  820,  780,  783,   86,  778,   49,  198,  767,
-
-      184,  776,  109,  203,  771,  778,  781,  820,    0,  820,
-        0,  230,  787,    0,  242,  244,  255,  259,  820,    0,
-      261,  263,  265,  272,  820,    0,  274,  276,  278,  280,
-      820,    0,  282,  284,  286,  288,  820,  820,  792,  820,
-      820,  820,  820,  820,  820,  820,    0,  296,  298,  314,
-      316,    0,  318,  322,  324,  326,  820,  318,  322,    0,
-      820,    0,  820,  326,  330,    0,  342,  344,  347,  355,
-      820,  357,  359,  361,  363,  365,  367,  369,  766,  144,
-      762,  762,  144,  770,  772,  762,  364,  768,  754,  168,
-      755,  763,  764,  767,  751,  756,  750,  755,  747,  759,
-
-        0,  820,  773,    0,  766,    0,  372,  375,  758,  739,
-      748,  738,  741,  749,  748,  747,  733,  749,  744,  737,
-      746,  730,  730,  741,  730,  737,  733,  729,  723,  726,
-      732,  731,  721,  732,  730,  820,  820,  371,  716,  724,
-      717,  713,  712,  724,  741,  721,  820,  706,  230,  714,
-      705,  709,  701,  820,  701,  370,  700,  712,  698,  820,
-      702,  820,  701,  699,  820,  690,  820,  706,  691,  373,
-      691,  693,  376,  698,  691,  692,  687,  820,  685,  697,
-      686,  820,  682,  820,  378,  820,  682,  820,  681,  668,
-      647,  820,  627,  626,  612,  607,  615,  605,  820,  601,
-
-      615,  601,  594,  604,  820,  588,  599,  598,  583,  588,
-      571,  558,  571,  820,  537,  536,  547,  820,  510,  507,
-      516,  501,  497,  503,  820,  820,  491,  820,  502,  363,
-      373,  358,  347,  820,  348,  325,  317,  820,  302,  287,
-      279,  267,  263,  265,  251,  820,  229,  820,  820,  820,
-      240,  380,  820,  229,  192,  164,   85,   62,  820,  820,
-      405,  419,  433,  447,  461,  475,  489,  503,  227,  517,
-      531,  545,  557,  571,  583,  597,  610,  624,  638,  652,
-      666,   84,  680,  694,  708,   58
+      108,  110,  131,  179,  227,  249,  116,  142,  839,  840,
+      836,   55,   64,  840,  267,  840,    0,   44,   79,  840,
+      840,    0,  840,  840,  840,    0,   97,   99,  825,  840,
+      840,    0,  119,  122,  840,  840,    0,  840,    0,  126,
+      138,  840,    0,    0,  145,  153,  840,  311,  840,  155,
+      157,  840,    0,  159,  164,  840,  159,  840,   62,  164,
+      840,  840,  840,  840,    0,  185,  189,  840,  786,  840,
+      185,  192,  201,  203,  205,  207,  209,  833,  211,  213,
+      216,  219,  840,  800,   39,   86,  799,  796,   65,  801,
+
+      198,  786,  184,  795,  109,  203,  790,  797,  800,  840,
+        0,  840,    0,  230,  806,    0,  242,  244,  255,  259,
+      840,    0,  261,  263,  265,  272,  840,    0,  274,  276,
+      278,  280,  840,    0,  282,  284,  286,  288,  840,  840,
+      811,  840,  840,  840,  840,  840,  840,  840,    0,  297,
+      314,  316,  318,    0,  322,  324,  326,  328,  840,  322,
+      326,    0,  840,    0,  840,  330,  332,    0,  344,  347,
+      355,  357,  840,  359,  361,  363,  365,  367,  369,  371,
+      785,  144,  781,  780,  780,  144,  778,  787,  789,  775,
+      778,  366,  784,  770,  168,  771,  779,  780,  783,  767,
+
+      772,  766,  771,  763,  775,    0,  840,  789,    0,  782,
+        0,  374,  377,  774,  755,  764,  754,  766,  756,  764,
+      763,  762,  230,  748,  764,  757,  758,  751,  760,  744,
+      744,  755,  744,  751,  747,  743,  737,  740,  746,  745,
+      735,  746,  744,  840,  840,  373,  730,  738,  731,  727,
+      739,  725,  737,  754,  734,  722,  840,  718,  730,  372,
+      725,  716,  720,  712,  840,  712,  375,  711,  723,  709,
+      840,  713,  840,  712,  710,  840,  701,  840,  717,  702,
+      840,  378,  702,  704,  380,  717,  708,  840,  701,  702,
+      697,  840,  695,  707,  696,  840,  692,  840,  382,  840,
+
+      692,  840,  691,  704,  686,  840,  689,  690,  687,  688,
+      659,  666,  633,  840,  628,  629,  613,  606,  618,  840,
+      603,  615,  614,  597,  596,  597,  603,  590,  603,  840,
+      589,  567,  578,  840,  564,  541,  547,  534,  523,  510,
+      520,  840,  840,  506,  840,  516,  497,  510,  499,  368,
+      365,  840,  368,  359,  348,  840,  316,  307,  297,  840,
+      287,  282,  283,  260,  840,  252,  840,  840,  840,  263,
+      384,  840,  241,  236,  224,  196,  158,  840,  840,  409,
+      423,  437,  451,  465,  479,  493,  507,  227,  521,  535,
+      549,  561,  575,  587,  601,  614,  628,  642,  656,  670,
+
+      104,  684,  698,  712,   77
     } ;
 
-static yyconst short int yy_def[387] =
+static yyconst short int yy_def[406] =
     {   0,
-      360,    1,  361,  361,  362,  362,  363,  363,  364,  364,
-      365,  365,  366,  366,  367,  367,  368,  368,  360,  360,
-      360,  360,  360,  360,  360,  360,  369,  360,  360,  360,
-      360,  370,  360,  360,  360,  371,  360,  360,  360,  360,
-      360,  372,  360,  360,  360,  360,  373,  360,  374,  360,
-      360,  360,  375,  376,  360,  360,  360,  377,  360,  360,
-      360,  360,  378,  360,  360,  360,  360,  360,  360,  360,
-      360,  360,  360,  360,  379,  360,  360,  360,  360,  360,
-      360,  380,  380,  380,  380,  380,  380,  360,  360,  360,
-      360,  360,  360,  360,  360,  360,  360,  360,  360,  360,
-
-      360,  360,  360,  360,  360,  360,  360,  360,  369,  360,
-      381,  360,  370,  371,  360,  360,  360,  360,  360,  372,
-      360,  360,  360,  360,  360,  374,  360,  360,  360,  360,
-      360,  376,  360,  360,  360,  360,  360,  360,  360,  360,
-      360,  360,  360,  360,  360,  360,  382,  360,  360,  360,
-      360,  378,  360,  360,  360,  360,  360,  360,  360,  383,
-      360,  384,  360,  360,  360,  379,  360,  360,  360,  360,
-      360,  380,  380,  380,  380,  380,  380,  385,  360,  360,
-      360,  360,  360,  360,  360,  360,  360,  360,  360,  360,
-      360,  360,  360,  360,  360,  360,  360,  360,  360,  360,
-
-      381,  360,  360,  386,  383,  384,  385,  385,  360,  360,
-      360,  360,  360,  360,  360,  360,  360,  360,  360,  360,
-      360,  360,  360,  360,  360,  360,  360,  360,  360,  360,
-      360,  360,  360,  360,  360,  360,  360,  360,  360,  360,
-      360,  360,  360,  360,  360,  360,  360,  360,  360,  360,
-      360,  360,  360,  360,  360,  360,  360,  360,  360,  360,
-      360,  360,  360,  360,  360,  360,  360,  360,  360,  360,
-      360,  360,  360,  360,  360,  360,  360,  360,  360,  360,
-      360,  360,  360,  360,  360,  360,  360,  360,  360,  360,
-      360,  360,  360,  360,  360,  360,  360,  360,  360,  360,
-
-      360,  360,  360,  360,  360,  360,  360,  360,  360,  360,
-      360,  360,  360,  360,  360,  360,  360,  360,  360,  360,
-      360,  360,  360,  360,  360,  360,  360,  360,  360,  360,
-      360,  360,  360,  360,  360,  360,  360,  360,  360,  360,
-      360,  360,  360,  360,  360,  360,  360,  360,  360,  360,
-      360,  360,  360,  360,  360,  360,  360,  360,  360,    0,
-      360,  360,  360,  360,  360,  360,  360,  360,  360,  360,
-      360,  360,  360,  360,  360,  360,  360,  360,  360,  360,
-      360,  360,  360,  360,  360,  360
+      379,    1,  380,  380,  381,  381,  382,  382,  383,  383,
+      384,  384,  385,  385,  386,  386,  387,  387,  379,  379,
+      379,  379,  379,  379,  379,  379,  388,  379,  379,  379,
+      379,  389,  379,  379,  379,  390,  379,  379,  379,  379,
+      379,  391,  379,  379,  379,  379,  392,  379,  393,  379,
+      379,  379,  394,  395,  379,  379,  379,  396,  379,  379,
+      379,  379,  397,  379,  379,  379,  379,  379,  379,  379,
+      379,  379,  379,  379,  398,  379,  379,  379,  379,  379,
+      379,  399,  399,  399,  399,  399,  399,  379,  379,  379,
+      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
+
+      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
+      388,  379,  400,  379,  389,  390,  379,  379,  379,  379,
+      379,  391,  379,  379,  379,  379,  379,  393,  379,  379,
+      379,  379,  379,  395,  379,  379,  379,  379,  379,  379,
+      379,  379,  379,  379,  379,  379,  379,  379,  401,  379,
+      379,  379,  379,  397,  379,  379,  379,  379,  379,  379,
+      379,  402,  379,  403,  379,  379,  379,  398,  379,  379,
+      379,  379,  379,  399,  399,  399,  399,  399,  399,  404,
+      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
+      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
+
+      379,  379,  379,  379,  379,  400,  379,  379,  405,  402,
+      403,  404,  404,  379,  379,  379,  379,  379,  379,  379,
+      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
+      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
+      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
+      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
+      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
+      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
+      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
+      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
+
+      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
+      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
+      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
+      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
+      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
+      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
+      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
+      379,  379,  379,  379,  379,  379,  379,  379,    0,  379,
+      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
+      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
+
+      379,  379,  379,  379,  379
     } ;
 
-static yyconst short int yy_nxt[871] =
+static yyconst short int yy_nxt[891] =
     {   0,
        20,   21,   22,   23,   24,   20,   25,   26,   20,   20,
        27,   28,   29,   29,   30,   31,   32,   33,   20,   20,
        27,   20,   20,   20,   20,   27,   27,   27,   27,   27,
        27,   27,   27,   27,   27,   27,   27,   27,   27,   27,
        27,   27,   27,   27,   27,   27,   27,   34,   35,   20,
-       37,   38,  110,   37,   38,  111,   39,   89,   90,   39,
-       43,   44,   45,   43,   44,   45,   91,   92,  237,   40,
-      161,   41,   40,  162,   41,   55,   56,   57,  184,   46,
-       47,   48,   46,   47,   48,   50,   51,  185,   50,   51,
-       52,  112,  112,   52,  204,   58,   55,   56,   57,  115,
-
-      116,  117,  118,  359,   46,   53,   48,   46,   53,   48,
-       60,   61,   60,   61,  358,   62,   58,   62,   83,   84,
-       85,  121,  122,   86,  123,  124,  181,   87,  127,  128,
-       58,  182,   58,   64,   65,   66,   67,   46,   68,   48,
-      129,  130,   69,  193,   83,   84,   85,  133,  134,   86,
-       70,  194,   71,   87,   72,  135,  136,  148,  149,  150,
-      151,  153,  154,   46,  157,   48,  155,  156,  158,  163,
-      210,  159,  159,  164,  211,  160,  165,  165,   73,  215,
-       74,   64,   65,   66,   67,  212,   68,  167,  168,  216,
-       69,  169,  170,  161,  173,  174,  162,  224,   70,  357,
-
-       71,  225,   72,  173,  175,  176,  174,  173,  174,  173,
-      174,  173,  174,   89,   90,   91,   92,  177,   89,   90,
-      178,   91,   92,  186,  190,  356,   73,  191,   74,   76,
-       77,   78,  195,   79,   80,  109,  187,  109,   81,  275,
-      188,  196,  112,  112,  115,  116,  117,  118,   46,  197,
-       48,   76,   77,   78,  275,   79,   80,  115,  116,  355,
-       81,  117,  118,  121,  122,  123,  124,  121,  122,  353,
-       46,  352,   48,   93,  123,  124,  127,  128,  129,  130,
-      127,  128,  129,  130,  133,  134,  135,  136,  133,  134,
-      135,  136,  351,   94,  350,   95,   96,   97,  148,  149,
-
-      150,  151,   98,  349,   99,  100,  101,  102,  103,  104,
-      105,  106,  348,  107,  108,  138,  148,  149,  150,  151,
-      153,  154,  347,  139,  155,  156,  153,  154,  155,  156,
-      159,  159,  346,  138,  159,  159,  140,  141,  165,  165,
-      345,  142,  165,  165,  167,  168,  169,  170,  143,  167,
-      168,  144,  344,  145,  343,  146,  147,  169,  170,  173,
-      174,  173,  175,  176,  174,  176,  174,  173,  175,  173,
-      174,  173,  208,  220,  173,  208,  157,  176,  208,  281,
-      158,  342,  291,  159,  159,  294,  341,  303,  220,  354,
-      206,  340,  206,  206,  281,  206,  206,  291,  206,  339,
-
-      294,  221,  303,  338,  354,   36,   36,   36,   36,   36,
-       36,   36,   36,   36,   36,   36,   36,   36,   36,   42,
-       42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
-       42,   42,   42,   49,   49,   49,   49,   49,   49,   49,
-       49,   49,   49,   49,   49,   49,   49,   54,   54,   54,
-       54,   54,   54,   54,   54,   54,   54,   54,   54,   54,
-       54,   59,   59,   59,   59,   59,   59,   59,   59,   59,
-       59,   59,   59,   59,   59,   63,   63,   63,   63,   63,
-       63,   63,   63,   63,   63,   63,   63,   63,   63,   75,
-       75,   75,   75,   75,   75,   75,   75,   75,   75,   75,
-
-       75,   75,   75,   82,   82,   82,   82,   82,   82,   82,
-       82,   82,   82,   82,   82,   82,   82,  113,  113,  113,
-      113,  113,  113,  113,  113,  113,  113,  113,  337,  113,
-      113,  114,  336,  335,  114,  114,  114,  114,  334,  114,
-      114,  114,  114,  333,  114,  120,  332,  331,  330,  120,
-      120,  120,  120,  120,  120,  120,  120,  125,  125,  125,
-      125,  125,  125,  125,  125,  125,  125,  125,  125,  125,
-      125,  126,  329,  328,  126,  126,  126,  327,  126,  126,
-      126,  126,  126,  131,  131,  131,  131,  131,  131,  131,
-      131,  131,  131,  131,  131,  131,  131,  132,  326,  325,
-
-      324,  132,  132,  132,  132,  132,  132,  132,  132,  132,
-      137,  137,  137,  137,  137,  137,  137,  137,  137,  137,
-      137,  137,  137,  137,  152,  323,  322,  321,  320,  152,
-      319,  152,  152,  318,  152,  152,  317,  152,  166,  316,
-      315,  314,  166,  313,  312,  166,  166,  311,  166,  166,
-      310,  166,  172,  172,  172,  172,  172,  172,  172,  172,
-      172,  172,  172,  172,  309,  172,  201,  308,  201,  201,
-      201,  201,  201,  201,  201,  201,  201,  201,  201,  201,
-      205,  205,  205,  205,  205,  205,  205,  205,  205,  205,
-      205,  307,  205,  205,  206,  306,  206,  206,  206,  206,
-
-      206,  206,  206,  206,  206,  206,  206,  206,  207,  207,
-      207,  207,  207,  207,  207,  207,  207,  207,  207,  207,
-      207,  207,  305,  304,  302,  301,  300,  299,  298,  297,
-      296,  295,  293,  292,  290,  289,  288,  287,  286,  285,
-      284,  283,  282,  280,  279,  278,  277,  276,  274,  273,
-      272,  271,  270,  269,  268,  267,  266,  265,  264,  263,
-      262,  261,  260,  259,  258,  257,  256,  255,  254,  253,
-      252,  251,  250,  249,  248,  247,  246,  245,  244,  243,
-      242,  241,  240,  239,  238,  236,  235,  234,  233,  232,
-      231,  230,  229,  228,  227,  226,  223,  222,  219,  218,
-
-      217,  214,  213,  209,  203,  202,  200,  199,  198,  192,
-      189,  183,  180,  179,   88,  171,  119,   88,  360,   19,
-      360,  360,  360,  360,  360,  360,  360,  360,  360,  360,
-      360,  360,  360,  360,  360,  360,  360,  360,  360,  360,
-      360,  360,  360,  360,  360,  360,  360,  360,  360,  360,
-      360,  360,  360,  360,  360,  360,  360,  360,  360,  360,
-      360,  360,  360,  360,  360,  360,  360,  360,  360,  360
+       37,   38,  112,   37,   38,  113,   39,   89,   90,   39,
+       43,   44,   45,   43,   44,   45,   91,   92,  182,   40,
+      163,   41,   40,  164,   41,   55,   56,   57,  183,   46,
+       47,   48,   46,   47,   48,   50,   51,  245,   50,   51,
+       52,  114,  114,   52,  188,   58,   55,   56,   57,  117,
+
+      118,  119,  120,  189,   46,   53,   48,   46,   53,   48,
+       60,   61,   60,   61,  209,   62,   58,   62,   83,   84,
+       85,  123,  124,   86,  125,  126,  184,   87,  129,  130,
+       58,  185,   58,   64,   65,   66,   67,   46,   68,   48,
+      131,  132,   69,  198,   83,   84,   85,  135,  136,   86,
+       70,  199,   71,   87,   72,  137,  138,  150,  151,  152,
+      153,  155,  156,   46,  159,   48,  157,  158,  160,  165,
+      215,  161,  161,  166,  216,  162,  167,  167,   73,  221,
+       74,   64,   65,   66,   67,  217,   68,  169,  170,  222,
+       69,  171,  172,  163,  175,  176,  164,  232,   70,  378,
+
+       71,  233,   72,  175,  177,  178,  176,  175,  176,  175,
+      176,  175,  176,   89,   90,   91,   92,  179,   89,   90,
+      180,   91,   92,  191,  195,  377,   73,  196,   74,   76,
+       77,   78,  200,   79,   80,  111,  192,  111,   81,  256,
+      193,  201,  114,  114,  117,  118,  119,  120,   46,  202,
+       48,   76,   77,   78,  256,   79,   80,  117,  118,  376,
+       81,  119,  120,  123,  124,  125,  126,  123,  124,  375,
+       46,  374,   48,   93,  125,  126,  129,  130,  131,  132,
+      129,  130,  131,  132,  135,  136,  137,  138,  135,  136,
+      137,  138,  372,   94,  371,   95,   96,   97,   98,  150,
+
+      151,  370,   99,  100,  101,  102,  103,  104,  105,  106,
+      107,  108,  369,  109,  110,  140,  152,  153,  150,  151,
+      152,  153,  368,  141,  155,  156,  157,  158,  155,  156,
+      157,  158,  367,  140,  161,  161,  142,  143,  161,  161,
+      366,  144,  167,  167,  167,  167,  169,  170,  145,  171,
+      172,  146,  365,  147,  364,  148,  149,  169,  170,  171,
+      172,  175,  176,  175,  177,  178,  176,  178,  176,  175,
+      177,  175,  176,  175,  213,  228,  175,  213,  159,  178,
+      213,  289,  160,  363,  295,  161,  161,  305,  362,  308,
+      228,  318,  211,  373,  211,  211,  289,  211,  211,  295,
+
+      211,  361,  305,  229,  308,  360,  318,  359,  373,   36,
+       36,   36,   36,   36,   36,   36,   36,   36,   36,   36,
+       36,   36,   36,   42,   42,   42,   42,   42,   42,   42,
+       42,   42,   42,   42,   42,   42,   42,   49,   49,   49,
+       49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
+       49,   54,   54,   54,   54,   54,   54,   54,   54,   54,
+       54,   54,   54,   54,   54,   59,   59,   59,   59,   59,
+       59,   59,   59,   59,   59,   59,   59,   59,   59,   63,
+       63,   63,   63,   63,   63,   63,   63,   63,   63,   63,
+       63,   63,   63,   75,   75,   75,   75,   75,   75,   75,
+
+       75,   75,   75,   75,   75,   75,   75,   82,   82,   82,
+       82,   82,   82,   82,   82,   82,   82,   82,   82,   82,
+       82,  115,  115,  115,  115,  115,  115,  115,  115,  115,
+      115,  115,  358,  115,  115,  116,  357,  356,  116,  116,
+      116,  116,  355,  116,  116,  116,  116,  354,  116,  122,
+      353,  352,  351,  122,  122,  122,  122,  122,  122,  122,
+      122,  127,  127,  127,  127,  127,  127,  127,  127,  127,
+      127,  127,  127,  127,  127,  128,  350,  349,  128,  128,
+      128,  348,  128,  128,  128,  128,  128,  133,  133,  133,
+      133,  133,  133,  133,  133,  133,  133,  133,  133,  133,
+
+      133,  134,  347,  346,  345,  134,  134,  134,  134,  134,
+      134,  134,  134,  134,  139,  139,  139,  139,  139,  139,
+      139,  139,  139,  139,  139,  139,  139,  139,  154,  344,
+      343,  342,  341,  154,  340,  154,  154,  339,  154,  154,
+      338,  154,  168,  337,  336,  335,  168,  334,  333,  168,
+      168,  332,  168,  168,  331,  168,  174,  174,  174,  174,
+      174,  174,  174,  174,  174,  174,  174,  174,  330,  174,
+      206,  329,  206,  206,  206,  206,  206,  206,  206,  206,
+      206,  206,  206,  206,  210,  210,  210,  210,  210,  210,
+      210,  210,  210,  210,  210,  328,  210,  210,  211,  327,
+
+      211,  211,  211,  211,  211,  211,  211,  211,  211,  211,
+      211,  211,  212,  212,  212,  212,  212,  212,  212,  212,
+      212,  212,  212,  212,  212,  212,  326,  325,  324,  323,
+      322,  321,  320,  319,  317,  316,  315,  314,  313,  312,
+      311,  310,  309,  307,  306,  304,  303,  302,  301,  300,
+      299,  298,  297,  296,  294,  293,  292,  291,  290,  288,
+      287,  286,  285,  284,  283,  282,  281,  280,  279,  278,
+      277,  276,  275,  274,  273,  272,  271,  270,  269,  268,
+      267,  266,  265,  264,  263,  262,  261,  260,  259,  258,
+      257,  255,  254,  253,  252,  251,  250,  249,  248,  247,
+
+      246,  244,  243,  242,  241,  240,  239,  238,  237,  236,
+      235,  234,  231,  230,  227,  226,  225,  224,  223,  220,
+      219,  218,  214,  208,  207,  205,  204,  203,  197,  194,
+      190,  187,  186,  181,   88,  173,  121,   88,  379,   19,
+      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
+      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
+      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
+      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
+      379,  379,  379,  379,  379,  379,  379,  379,  379,  379
     } ;
 
-static yyconst short int yy_chk[871] =
+static yyconst short int yy_chk[891] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -594,95 +602,97 @@ static yyconst short int yy_chk[871] =
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         3,    3,   28,    4,    4,   28,    3,   22,   22,    4,
-        5,    5,    5,    6,    6,    6,   23,   23,  386,    3,
-       69,    3,    4,   69,    4,    9,    9,    9,   98,    5,
-        5,    5,    6,    6,    6,    7,    7,   98,    8,    8,
-        7,   29,   29,    8,  382,    9,   10,   10,   10,   37,
+        5,    5,    5,    6,    6,    6,   23,   23,   95,    3,
+       69,    3,    4,   69,    4,    9,    9,    9,   95,    5,
+        5,    5,    6,    6,    6,    7,    7,  405,    8,    8,
+        7,   29,   29,    8,   99,    9,   10,   10,   10,   37,
 
-       37,   38,   38,  358,    7,    7,    7,    8,    8,    8,
-       11,   11,   12,   12,  357,   11,   10,   12,   17,   17,
+       37,   38,   38,   99,    7,    7,    7,    8,    8,    8,
+       11,   11,   12,   12,  401,   11,   10,   12,   17,   17,
        17,   43,   43,   17,   44,   44,   96,   17,   50,   50,
        11,   96,   12,   13,   13,   13,   13,   17,   13,   17,
-       51,   51,   13,  103,   18,   18,   18,   55,   55,   18,
-       13,  103,   13,   18,   13,   56,   56,   60,   60,   61,
+       51,   51,   13,  105,   18,   18,   18,   55,   55,   18,
+       13,  105,   13,   18,   13,   56,   56,   60,   60,   61,
        61,   64,   64,   18,   67,   18,   65,   65,   67,   70,
-      180,   67,   67,   70,  180,   67,   70,   70,   13,  183,
-       13,   14,   14,   14,   14,  180,   14,   76,   76,  183,
-       14,   77,   77,   81,   82,   82,   81,  190,   14,  356,
+      182,   67,   67,   70,  182,   67,   70,   70,   13,  186,
+       13,   14,   14,   14,   14,  182,   14,   76,   76,  186,
+       14,   77,   77,   81,   82,   82,   81,  195,   14,  377,
 
-       14,  190,   14,   83,   83,   84,   84,   85,   85,   86,
+       14,  195,   14,   83,   83,   84,   84,   85,   85,   86,
        86,   87,   87,   89,   89,   90,   90,   87,   91,   91,
-       87,   92,   92,   99,  101,  355,   14,  101,   14,   15,
-       15,   15,  104,   15,   15,  369,   99,  369,   15,  249,
-       99,  104,  112,  112,  115,  115,  116,  116,   15,  104,
-       15,   16,   16,   16,  249,   16,   16,  117,  117,  354,
-       16,  118,  118,  121,  121,  122,  122,  123,  123,  351,
-       16,  347,   16,   25,  124,  124,  127,  127,  128,  128,
-      129,  129,  130,  130,  133,  133,  134,  134,  135,  135,
-      136,  136,  345,   25,  344,   25,   25,   25,  148,  148,
-
-      149,  149,   25,  343,   25,   25,   25,   25,   25,   25,
-       25,   25,  342,   25,   25,   58,  150,  150,  151,  151,
-      153,  153,  341,   58,  154,  154,  155,  155,  156,  156,
-      158,  158,  340,   58,  159,  159,   58,   58,  164,  164,
-      339,   58,  165,  165,  167,  167,  168,  168,   58,  169,
-      169,   58,  337,   58,  336,   58,   58,  170,  170,  172,
-      172,  173,  173,  174,  174,  175,  175,  176,  176,  177,
-      177,  178,  178,  187,  207,  207,  238,  208,  208,  256,
-      238,  335,  270,  238,  238,  273,  333,  285,  187,  352,
-      178,  332,  178,  207,  256,  207,  208,  270,  208,  331,
-
-      273,  187,  285,  330,  352,  361,  361,  361,  361,  361,
-      361,  361,  361,  361,  361,  361,  361,  361,  361,  362,
-      362,  362,  362,  362,  362,  362,  362,  362,  362,  362,
-      362,  362,  362,  363,  363,  363,  363,  363,  363,  363,
-      363,  363,  363,  363,  363,  363,  363,  364,  364,  364,
-      364,  364,  364,  364,  364,  364,  364,  364,  364,  364,
-      364,  365,  365,  365,  365,  365,  365,  365,  365,  365,
-      365,  365,  365,  365,  365,  366,  366,  366,  366,  366,
-      366,  366,  366,  366,  366,  366,  366,  366,  366,  367,
-      367,  367,  367,  367,  367,  367,  367,  367,  367,  367,
-
-      367,  367,  367,  368,  368,  368,  368,  368,  368,  368,
-      368,  368,  368,  368,  368,  368,  368,  370,  370,  370,
-      370,  370,  370,  370,  370,  370,  370,  370,  329,  370,
-      370,  371,  327,  324,  371,  371,  371,  371,  323,  371,
-      371,  371,  371,  322,  371,  372,  321,  320,  319,  372,
-      372,  372,  372,  372,  372,  372,  372,  373,  373,  373,
-      373,  373,  373,  373,  373,  373,  373,  373,  373,  373,
-      373,  374,  317,  316,  374,  374,  374,  315,  374,  374,
-      374,  374,  374,  375,  375,  375,  375,  375,  375,  375,
-      375,  375,  375,  375,  375,  375,  375,  376,  313,  312,
-
-      311,  376,  376,  376,  376,  376,  376,  376,  376,  376,
-      377,  377,  377,  377,  377,  377,  377,  377,  377,  377,
-      377,  377,  377,  377,  378,  310,  309,  308,  307,  378,
-      306,  378,  378,  304,  378,  378,  303,  378,  379,  302,
-      301,  300,  379,  298,  297,  379,  379,  296,  379,  379,
-      295,  379,  380,  380,  380,  380,  380,  380,  380,  380,
-      380,  380,  380,  380,  294,  380,  381,  293,  381,  381,
-      381,  381,  381,  381,  381,  381,  381,  381,  381,  381,
-      383,  383,  383,  383,  383,  383,  383,  383,  383,  383,
-      383,  291,  383,  383,  384,  290,  384,  384,  384,  384,
-
-      384,  384,  384,  384,  384,  384,  384,  384,  385,  385,
+       87,   92,   92,  101,  103,  376,   14,  103,   14,   15,
+       15,   15,  106,   15,   15,  388,  101,  388,   15,  223,
+      101,  106,  114,  114,  117,  117,  118,  118,   15,  106,
+       15,   16,   16,   16,  223,   16,   16,  119,  119,  375,
+       16,  120,  120,  123,  123,  124,  124,  125,  125,  374,
+       16,  373,   16,   25,  126,  126,  129,  129,  130,  130,
+      131,  131,  132,  132,  135,  135,  136,  136,  137,  137,
+      138,  138,  370,   25,  366,   25,   25,   25,   25,  150,
+
+      150,  364,   25,   25,   25,   25,   25,   25,   25,   25,
+       25,   25,  363,   25,   25,   58,  151,  151,  152,  152,
+      153,  153,  362,   58,  155,  155,  156,  156,  157,  157,
+      158,  158,  361,   58,  160,  160,   58,   58,  161,  161,
+      359,   58,  166,  166,  167,  167,  169,  169,   58,  170,
+      170,   58,  358,   58,  357,   58,   58,  171,  171,  172,
+      172,  174,  174,  175,  175,  176,  176,  177,  177,  178,
+      178,  179,  179,  180,  180,  192,  212,  212,  246,  213,
+      213,  260,  246,  355,  267,  246,  246,  282,  354,  285,
+      192,  299,  180,  371,  180,  212,  260,  212,  213,  267,
+
+      213,  353,  282,  192,  285,  351,  299,  350,  371,  380,
+      380,  380,  380,  380,  380,  380,  380,  380,  380,  380,
+      380,  380,  380,  381,  381,  381,  381,  381,  381,  381,
+      381,  381,  381,  381,  381,  381,  381,  382,  382,  382,
+      382,  382,  382,  382,  382,  382,  382,  382,  382,  382,
+      382,  383,  383,  383,  383,  383,  383,  383,  383,  383,
+      383,  383,  383,  383,  383,  384,  384,  384,  384,  384,
+      384,  384,  384,  384,  384,  384,  384,  384,  384,  385,
       385,  385,  385,  385,  385,  385,  385,  385,  385,  385,
-      385,  385,  289,  287,  283,  281,  280,  279,  277,  276,
-      275,  274,  272,  271,  269,  268,  266,  264,  263,  261,
-      259,  258,  257,  255,  253,  252,  251,  250,  248,  246,
-      245,  244,  243,  242,  241,  240,  239,  235,  234,  233,
-      232,  231,  230,  229,  228,  227,  226,  225,  224,  223,
-      222,  221,  220,  219,  218,  217,  216,  215,  214,  213,
-      212,  211,  210,  209,  205,  203,  200,  199,  198,  197,
-      196,  195,  194,  193,  192,  191,  189,  188,  186,  185,
-
-      184,  182,  181,  179,  139,  113,  107,  106,  105,  102,
-      100,   97,   95,   94,   88,   79,   39,   21,   19,  360,
-      360,  360,  360,  360,  360,  360,  360,  360,  360,  360,
-      360,  360,  360,  360,  360,  360,  360,  360,  360,  360,
-      360,  360,  360,  360,  360,  360,  360,  360,  360,  360,
-      360,  360,  360,  360,  360,  360,  360,  360,  360,  360,
-      360,  360,  360,  360,  360,  360,  360,  360,  360,  360
+      385,  385,  385,  386,  386,  386,  386,  386,  386,  386,
+
+      386,  386,  386,  386,  386,  386,  386,  387,  387,  387,
+      387,  387,  387,  387,  387,  387,  387,  387,  387,  387,
+      387,  389,  389,  389,  389,  389,  389,  389,  389,  389,
+      389,  389,  349,  389,  389,  390,  348,  347,  390,  390,
+      390,  390,  346,  390,  390,  390,  390,  344,  390,  391,
+      341,  340,  339,  391,  391,  391,  391,  391,  391,  391,
+      391,  392,  392,  392,  392,  392,  392,  392,  392,  392,
+      392,  392,  392,  392,  392,  393,  338,  337,  393,  393,
+      393,  336,  393,  393,  393,  393,  393,  394,  394,  394,
+      394,  394,  394,  394,  394,  394,  394,  394,  394,  394,
+
+      394,  395,  335,  333,  332,  395,  395,  395,  395,  395,
+      395,  395,  395,  395,  396,  396,  396,  396,  396,  396,
+      396,  396,  396,  396,  396,  396,  396,  396,  397,  331,
+      329,  328,  327,  397,  326,  397,  397,  325,  397,  397,
+      324,  397,  398,  323,  322,  321,  398,  319,  318,  398,
+      398,  317,  398,  398,  316,  398,  399,  399,  399,  399,
+      399,  399,  399,  399,  399,  399,  399,  399,  315,  399,
+      400,  313,  400,  400,  400,  400,  400,  400,  400,  400,
+      400,  400,  400,  400,  402,  402,  402,  402,  402,  402,
+      402,  402,  402,  402,  402,  312,  402,  402,  403,  311,
+
+      403,  403,  403,  403,  403,  403,  403,  403,  403,  403,
+      403,  403,  404,  404,  404,  404,  404,  404,  404,  404,
+      404,  404,  404,  404,  404,  404,  310,  309,  308,  307,
+      305,  304,  303,  301,  297,  295,  294,  293,  291,  290,
+      289,  287,  286,  284,  283,  280,  279,  277,  275,  274,
+      272,  270,  269,  268,  266,  264,  263,  262,  261,  259,
+      258,  256,  255,  254,  253,  252,  251,  250,  249,  248,
+      247,  243,  242,  241,  240,  239,  238,  237,  236,  235,
+      234,  233,  232,  231,  230,  229,  228,  227,  226,  225,
+      224,  222,  221,  220,  219,  218,  217,  216,  215,  214,
+
+      210,  208,  205,  204,  203,  202,  201,  200,  199,  198,
+      197,  196,  194,  193,  191,  190,  189,  188,  187,  185,
+      184,  183,  181,  141,  115,  109,  108,  107,  104,  102,
+      100,   98,   97,   94,   88,   79,   39,   21,   19,  379,
+      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
+      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
+      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
+      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
+      379,  379,  379,  379,  379,  379,  379,  379,  379,  379
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -691,18 +701,18 @@ static char *yy_last_accepting_cpos;
 extern int yy_flex_debug;
 int yy_flex_debug = 1;
 
-static yyconst short int yy_rule_linenum[98] =
+static yyconst short int yy_rule_linenum[101] =
     {   0,
       122,  123,  124,  125,  126,  127,  128,  129,  130,  131,
       132,  133,  134,  135,  136,  137,  138,  139,  140,  141,
-      142,  143,  144,  145,  146,  147,  148,  149,  150,  152,
-      153,  154,  155,  157,  158,  159,  164,  167,  170,  173,
-      174,  177,  180,  183,  191,  197,  213,  214,  225,  237,
-      238,  239,  256,  265,  267,  287,  301,  303,  323,  335,
-      339,  340,  341,  342,  343,  344,  345,  346,  347,  353,
-      364,  370,  371,  373,  375,  393,  399,  400,  402,  404,
-      422,  425,  428,  429,  432,  443,  454,  456,  458,  461,
-      462,  465,  485,  492,  493,  494,  514
+      142,  143,  144,  145,  146,  147,  148,  149,  150,  151,
+      152,  153,  155,  156,  157,  158,  160,  161,  162,  167,
+      170,  173,  176,  177,  180,  183,  186,  194,  200,  216,
+      217,  228,  240,  241,  242,  259,  268,  270,  290,  304,
+      306,  326,  338,  342,  343,  344,  345,  346,  347,  348,
+      349,  350,  356,  367,  373,  374,  376,  378,  396,  402,
+      403,  405,  407,  425,  428,  431,  432,  435,  446,  457,
+      459,  461,  464,  465,  468,  488,  495,  496,  497,  517
 
     } ;
 
@@ -813,7 +823,7 @@ static void handle_at PARAMS ((braced_code_t code_kind,
 #define SC_PROLOGUE 7
 #define SC_EPILOGUE 8
 
-#line 817 "lex.yy.c"
+#line 827 "scan-gram.c"
 
 /* Macros after this point can all be overridden by user definitions in
  * section 1.
@@ -913,20 +923,9 @@ YY_MALLOC_DECL
                        YY_FATAL_ERROR( "input in flex scanner failed" ); \
                result = n; \
                } \
-       else \
-               { \
-               errno=0; \
-               while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
-                       { \
-                       if( errno != EINTR) \
-                               { \
-                               YY_FATAL_ERROR( "input in flex scanner failed" ); \
-                               break; \
-                               } \
-                       errno=0; \
-                       clearerr(yyin); \
-                       } \
-               }
+       else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \
+                 && ferror( yyin ) ) \
+               YY_FATAL_ERROR( "input in flex scanner failed" );
 #endif
 
 /* No semi-colon after return; correct usage is to write "yyterminate();" -
@@ -998,7 +997,7 @@ YY_DECL
   /*----------------------------.
   | Scanning Bison directives.  |
   `----------------------------*/
-#line 1002 "lex.yy.c"
+#line 1001 "scan-gram.c"
 
        if ( yy_init )
                {
@@ -1049,13 +1048,13 @@ yy_match:
                        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                                {
                                yy_current_state = (int) yy_def[yy_current_state];
-                               if ( yy_current_state >= 361 )
+                               if ( yy_current_state >= 380 )
                                        yy_c = yy_meta[(unsigned int) yy_c];
                                }
                        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
                        ++yy_cp;
                        }
-               while ( yy_base[yy_current_state] != 820 );
+               while ( yy_base[yy_current_state] != 840 );
 
 yy_find_action:
                yy_act = yy_accept[yy_current_state];
@@ -1075,13 +1074,13 @@ do_action:      /* This label is used only to access EOF actions. */
                        {
                        if ( yy_act == 0 )
                                fprintf( stderr, "--scanner backing up\n" );
-                       else if ( yy_act < 98 )
+                       else if ( yy_act < 101 )
                                fprintf( stderr, "--accepting rule at line %d (\"%s\")\n",
                                         yy_rule_linenum[yy_act], yytext );
-                       else if ( yy_act == 98 )
+                       else if ( yy_act == 101 )
                                fprintf( stderr, "--accepting default rule (\"%s\")\n",
                                         yytext );
-                       else if ( yy_act == 99 )
+                       else if ( yy_act == 102 )
                                fprintf( stderr, "--(end of buffer or a NUL)\n" );
                        else
                                fprintf( stderr, "--EOF (start condition %d)\n", YY_START );
@@ -1126,205 +1125,220 @@ return PERCENT_DESTRUCTOR;
 case 6:
 YY_RULE_SETUP
 #line 127 "scan-gram.l"
-return PERCENT_ERROR_VERBOSE;
+return PERCENT_DPREC;
        YY_BREAK
 case 7:
 YY_RULE_SETUP
 #line 128 "scan-gram.l"
-return PERCENT_EXPECT;
+return PERCENT_ERROR_VERBOSE;
        YY_BREAK
 case 8:
 YY_RULE_SETUP
 #line 129 "scan-gram.l"
-return PERCENT_FILE_PREFIX;
+return PERCENT_EXPECT;
        YY_BREAK
 case 9:
 YY_RULE_SETUP
 #line 130 "scan-gram.l"
-return PERCENT_YACC;
+return PERCENT_FILE_PREFIX;
        YY_BREAK
 case 10:
 YY_RULE_SETUP
 #line 131 "scan-gram.l"
-return PERCENT_LEFT;
+return PERCENT_YACC;
        YY_BREAK
 case 11:
 YY_RULE_SETUP
 #line 132 "scan-gram.l"
-return PERCENT_LOCATIONS;
+return PERCENT_GLR_PARSER;
        YY_BREAK
 case 12:
 YY_RULE_SETUP
 #line 133 "scan-gram.l"
-return PERCENT_NAME_PREFIX;
+return PERCENT_LEFT;
        YY_BREAK
 case 13:
 YY_RULE_SETUP
 #line 134 "scan-gram.l"
-return PERCENT_NO_LINES;
+return PERCENT_LOCATIONS;
        YY_BREAK
 case 14:
 YY_RULE_SETUP
 #line 135 "scan-gram.l"
-return PERCENT_NONASSOC;
+return PERCENT_MERGE;
        YY_BREAK
 case 15:
 YY_RULE_SETUP
 #line 136 "scan-gram.l"
-return PERCENT_NTERM;
+return PERCENT_NAME_PREFIX;
        YY_BREAK
 case 16:
 YY_RULE_SETUP
 #line 137 "scan-gram.l"
-return PERCENT_OUTPUT;
+return PERCENT_NO_LINES;
        YY_BREAK
 case 17:
 YY_RULE_SETUP
 #line 138 "scan-gram.l"
-return PERCENT_PREC;
+return PERCENT_NONASSOC;
        YY_BREAK
 case 18:
 YY_RULE_SETUP
 #line 139 "scan-gram.l"
-return PERCENT_PRINTER;
+return PERCENT_NTERM;
        YY_BREAK
 case 19:
 YY_RULE_SETUP
 #line 140 "scan-gram.l"
-return PERCENT_PURE_PARSER;
+return PERCENT_OUTPUT;
        YY_BREAK
 case 20:
 YY_RULE_SETUP
 #line 141 "scan-gram.l"
-return PERCENT_RIGHT;
+return PERCENT_PREC;
        YY_BREAK
 case 21:
 YY_RULE_SETUP
 #line 142 "scan-gram.l"
-return PERCENT_SKELETON;
+return PERCENT_PRINTER;
        YY_BREAK
 case 22:
 YY_RULE_SETUP
 #line 143 "scan-gram.l"
-return PERCENT_START;
+return PERCENT_PURE_PARSER;
        YY_BREAK
 case 23:
 YY_RULE_SETUP
 #line 144 "scan-gram.l"
-return PERCENT_TOKEN;
+return PERCENT_RIGHT;
        YY_BREAK
 case 24:
 YY_RULE_SETUP
 #line 145 "scan-gram.l"
-return PERCENT_TOKEN;
+return PERCENT_SKELETON;
        YY_BREAK
 case 25:
 YY_RULE_SETUP
 #line 146 "scan-gram.l"
-return PERCENT_TOKEN_TABLE;
+return PERCENT_START;
        YY_BREAK
 case 26:
 YY_RULE_SETUP
 #line 147 "scan-gram.l"
-return PERCENT_TYPE;
+return PERCENT_TOKEN;
        YY_BREAK
 case 27:
 YY_RULE_SETUP
 #line 148 "scan-gram.l"
-return PERCENT_UNION;
+return PERCENT_TOKEN;
        YY_BREAK
 case 28:
 YY_RULE_SETUP
 #line 149 "scan-gram.l"
-return PERCENT_VERBOSE;
+return PERCENT_TOKEN_TABLE;
        YY_BREAK
 case 29:
 YY_RULE_SETUP
 #line 150 "scan-gram.l"
-return PERCENT_YACC;
+return PERCENT_TYPE;
        YY_BREAK
 case 30:
 YY_RULE_SETUP
-#line 152 "scan-gram.l"
-return EQUAL;
+#line 151 "scan-gram.l"
+return PERCENT_UNION;
        YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 153 "scan-gram.l"
-return COLON;
+#line 152 "scan-gram.l"
+return PERCENT_VERBOSE;
        YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 154 "scan-gram.l"
-return PIPE;
+#line 153 "scan-gram.l"
+return PERCENT_YACC;
        YY_BREAK
 case 33:
 YY_RULE_SETUP
 #line 155 "scan-gram.l"
-return SEMICOLON;
+return EQUAL;
        YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 157 "scan-gram.l"
-YY_LINES; YY_STEP;
+#line 156 "scan-gram.l"
+return COLON;
        YY_BREAK
 case 35:
 YY_RULE_SETUP
+#line 157 "scan-gram.l"
+return PIPE;
+       YY_BREAK
+case 36:
+YY_RULE_SETUP
 #line 158 "scan-gram.l"
+return SEMICOLON;
+       YY_BREAK
+case 37:
+YY_RULE_SETUP
+#line 160 "scan-gram.l"
+YY_LINES; YY_STEP;
+       YY_BREAK
+case 38:
+YY_RULE_SETUP
+#line 161 "scan-gram.l"
 YY_STEP;
        YY_BREAK
-case 36:
+case 39:
 YY_RULE_SETUP
-#line 159 "scan-gram.l"
+#line 162 "scan-gram.l"
 {
     yylval->symbol = getsym (yytext, *yylloc);
     return ID;
   }
        YY_BREAK
-case 37:
+case 40:
 YY_RULE_SETUP
-#line 164 "scan-gram.l"
+#line 167 "scan-gram.l"
 yylval->integer = strtol (yytext, 0, 10); return INT;
        YY_BREAK
 /* Characters.  We don't check there is only one.  */
-case 38:
+case 41:
 YY_RULE_SETUP
-#line 167 "scan-gram.l"
+#line 170 "scan-gram.l"
 YY_OBS_GROW; yy_push_state (SC_ESCAPED_CHARACTER);
        YY_BREAK
 /* Strings. */
-case 39:
+case 42:
 YY_RULE_SETUP
-#line 170 "scan-gram.l"
+#line 173 "scan-gram.l"
 YY_OBS_GROW; yy_push_state (SC_ESCAPED_STRING);
        YY_BREAK
 /* Comments. */
-case 40:
+case 43:
 YY_RULE_SETUP
-#line 173 "scan-gram.l"
+#line 176 "scan-gram.l"
 yy_push_state (SC_COMMENT);
        YY_BREAK
-case 41:
+case 44:
 YY_RULE_SETUP
-#line 174 "scan-gram.l"
+#line 177 "scan-gram.l"
 YY_STEP;
        YY_BREAK
 /* Prologue. */
-case 42:
+case 45:
 YY_RULE_SETUP
-#line 177 "scan-gram.l"
+#line 180 "scan-gram.l"
 yy_push_state (SC_PROLOGUE);
        YY_BREAK
 /* Code in between braces.  */
-case 43:
+case 46:
 YY_RULE_SETUP
-#line 180 "scan-gram.l"
+#line 183 "scan-gram.l"
 YY_OBS_GROW; ++braces_level; yy_push_state (SC_BRACED_CODE);
        YY_BREAK
 /* A type. */
-case 44:
+case 47:
 YY_RULE_SETUP
-#line 183 "scan-gram.l"
+#line 186 "scan-gram.l"
 {
     obstack_grow (&string_obstack, yytext + 1, yyleng - 2);
     YY_OBS_FINISH;
@@ -1332,18 +1346,18 @@ YY_RULE_SETUP
     return TYPE;
   }
        YY_BREAK
-case 45:
+case 48:
 YY_RULE_SETUP
-#line 191 "scan-gram.l"
+#line 194 "scan-gram.l"
 {
     if (++percent_percent_count == 2)
       yy_push_state (SC_EPILOGUE);
     return PERCENT_PERCENT;
   }
        YY_BREAK
-case 46:
+case 49:
 YY_RULE_SETUP
-#line 197 "scan-gram.l"
+#line 200 "scan-gram.l"
 {
     LOCATION_PRINT (stderr, *yylloc);
     fprintf (stderr, ": invalid character: `%c'\n", *yytext);
@@ -1358,14 +1372,14 @@ YY_RULE_SETUP
   `------------------------------------------------------------*/
 
 
-case 47:
+case 50:
 YY_RULE_SETUP
-#line 213 "scan-gram.l"
+#line 216 "scan-gram.l"
 if (YY_START != SC_COMMENT) obstack_sgrow (&string_obstack, "@<:@");
        YY_BREAK
-case 48:
+case 51:
 YY_RULE_SETUP
-#line 214 "scan-gram.l"
+#line 217 "scan-gram.l"
 if (YY_START != SC_COMMENT) obstack_sgrow (&string_obstack, "@:>@");
        YY_BREAK
 
@@ -1374,9 +1388,9 @@ if (YY_START != SC_COMMENT) obstack_sgrow (&string_obstack, "@:>@");
   `-----------------------------------------------------------*/
 
 
-case 49:
+case 52:
 YY_RULE_SETUP
-#line 225 "scan-gram.l"
+#line 228 "scan-gram.l"
 { /* End of the comment. */
     if (yy_top_state () == INITIAL)
       {
@@ -1389,23 +1403,23 @@ YY_RULE_SETUP
     yy_pop_state ();
   }
        YY_BREAK
-case 50:
+case 53:
 YY_RULE_SETUP
-#line 237 "scan-gram.l"
+#line 240 "scan-gram.l"
 if (yy_top_state () != INITIAL) YY_OBS_GROW;
        YY_BREAK
-case 51:
+case 54:
 YY_RULE_SETUP
-#line 238 "scan-gram.l"
+#line 241 "scan-gram.l"
 if (yy_top_state () != INITIAL) YY_OBS_GROW; YY_LINES;
        YY_BREAK
-case 52:
+case 55:
 YY_RULE_SETUP
-#line 239 "scan-gram.l"
+#line 242 "scan-gram.l"
 /* Stray `*'. */if (yy_top_state () != INITIAL) YY_OBS_GROW;
        YY_BREAK
 case YY_STATE_EOF(SC_COMMENT):
-#line 241 "scan-gram.l"
+#line 244 "scan-gram.l"
 {
     LOCATION_PRINT (stderr, *yylloc);
     fprintf (stderr, ": unexpected end of file in a comment\n");
@@ -1419,9 +1433,9 @@ case YY_STATE_EOF(SC_COMMENT):
   `----------------------------------------------------------------*/
 
 
-case 53:
+case 56:
 YY_RULE_SETUP
-#line 256 "scan-gram.l"
+#line 259 "scan-gram.l"
 {
     assert (yy_top_state () == INITIAL);
     YY_OBS_GROW;
@@ -1431,18 +1445,18 @@ YY_RULE_SETUP
     return STRING;
   }
        YY_BREAK
-case 54:
+case 57:
 YY_RULE_SETUP
-#line 265 "scan-gram.l"
+#line 268 "scan-gram.l"
 YY_OBS_GROW;
        YY_BREAK
-case 55:
+case 58:
 YY_RULE_SETUP
-#line 267 "scan-gram.l"
+#line 270 "scan-gram.l"
 obstack_1grow (&string_obstack, '\n'); YY_LINES;
        YY_BREAK
 case YY_STATE_EOF(SC_ESCAPED_STRING):
-#line 269 "scan-gram.l"
+#line 272 "scan-gram.l"
 {
     LOCATION_PRINT (stderr, *yylloc);
     fprintf (stderr, ": unexpected end of file in a string\n");
@@ -1460,9 +1474,9 @@ case YY_STATE_EOF(SC_ESCAPED_STRING):
   `---------------------------------------------------------------*/
 
 
-case 56:
+case 59:
 YY_RULE_SETUP
-#line 287 "scan-gram.l"
+#line 290 "scan-gram.l"
 {
     YY_OBS_GROW;
     assert (yy_top_state () == INITIAL);
@@ -1477,18 +1491,18 @@ YY_RULE_SETUP
     }
   }
        YY_BREAK
-case 57:
+case 60:
 YY_RULE_SETUP
-#line 301 "scan-gram.l"
+#line 304 "scan-gram.l"
 YY_OBS_GROW;
        YY_BREAK
-case 58:
+case 61:
 YY_RULE_SETUP
-#line 303 "scan-gram.l"
+#line 306 "scan-gram.l"
 obstack_1grow (&string_obstack, '\n'); YY_LINES;
        YY_BREAK
 case YY_STATE_EOF(SC_ESCAPED_CHARACTER):
-#line 305 "scan-gram.l"
+#line 308 "scan-gram.l"
 {
     LOCATION_PRINT (stderr, *yylloc);
     fprintf (stderr, ": unexpected end of file in a character\n");
@@ -1505,9 +1519,9 @@ case YY_STATE_EOF(SC_ESCAPED_CHARACTER):
   `----------------------------*/
 
 
-case 59:
+case 62:
 YY_RULE_SETUP
-#line 323 "scan-gram.l"
+#line 326 "scan-gram.l"
 {
     long c = strtol (yytext + 1, 0, 8);
     if (c > 255)
@@ -1520,56 +1534,56 @@ YY_RULE_SETUP
       obstack_1grow (&string_obstack, c);
   }
        YY_BREAK
-case 60:
+case 63:
 YY_RULE_SETUP
-#line 335 "scan-gram.l"
+#line 338 "scan-gram.l"
 {
     obstack_1grow (&string_obstack, strtol (yytext + 2, 0, 16));
   }
        YY_BREAK
-case 61:
+case 64:
 YY_RULE_SETUP
-#line 339 "scan-gram.l"
+#line 342 "scan-gram.l"
 obstack_1grow (&string_obstack, '\a');
        YY_BREAK
-case 62:
+case 65:
 YY_RULE_SETUP
-#line 340 "scan-gram.l"
+#line 343 "scan-gram.l"
 obstack_1grow (&string_obstack, '\b');
        YY_BREAK
-case 63:
+case 66:
 YY_RULE_SETUP
-#line 341 "scan-gram.l"
+#line 344 "scan-gram.l"
 obstack_1grow (&string_obstack, '\f');
        YY_BREAK
-case 64:
+case 67:
 YY_RULE_SETUP
-#line 342 "scan-gram.l"
+#line 345 "scan-gram.l"
 obstack_1grow (&string_obstack, '\n');
        YY_BREAK
-case 65:
+case 68:
 YY_RULE_SETUP
-#line 343 "scan-gram.l"
+#line 346 "scan-gram.l"
 obstack_1grow (&string_obstack, '\r');
        YY_BREAK
-case 66:
+case 69:
 YY_RULE_SETUP
-#line 344 "scan-gram.l"
+#line 347 "scan-gram.l"
 obstack_1grow (&string_obstack, '\t');
        YY_BREAK
-case 67:
+case 70:
 YY_RULE_SETUP
-#line 345 "scan-gram.l"
+#line 348 "scan-gram.l"
 obstack_1grow (&string_obstack, '\v');
        YY_BREAK
-case 68:
+case 71:
 YY_RULE_SETUP
-#line 346 "scan-gram.l"
+#line 349 "scan-gram.l"
 obstack_1grow (&string_obstack, yytext[1]);
        YY_BREAK
-case 69:
+case 72:
 YY_RULE_SETUP
-#line 347 "scan-gram.l"
+#line 350 "scan-gram.l"
 {
     LOCATION_PRINT (stderr, *yylloc);
     fprintf (stderr, ": unrecognized escape: %s\n", quote (yytext));
@@ -1577,9 +1591,9 @@ YY_RULE_SETUP
   }
        YY_BREAK
 /* FLex wants this rule, in case of a `\<<EOF>>'. */
-case 70:
+case 73:
 YY_RULE_SETUP
-#line 353 "scan-gram.l"
+#line 356 "scan-gram.l"
 YY_OBS_GROW;
        YY_BREAK
 
@@ -1589,38 +1603,38 @@ YY_OBS_GROW;
   `----------------------------------------------------------*/
 
 
-case 71:
+case 74:
 YY_RULE_SETUP
-#line 364 "scan-gram.l"
+#line 367 "scan-gram.l"
 {
     YY_OBS_GROW;
     assert (yy_top_state () != INITIAL);
     yy_pop_state ();
   }
        YY_BREAK
-case 72:
+case 75:
 YY_RULE_SETUP
-#line 370 "scan-gram.l"
+#line 373 "scan-gram.l"
 YY_OBS_GROW;
        YY_BREAK
-case 73:
+case 76:
 YY_RULE_SETUP
-#line 371 "scan-gram.l"
+#line 374 "scan-gram.l"
 YY_OBS_GROW;
        YY_BREAK
 /* FLex wants this rule, in case of a `\<<EOF>>'. */
-case 74:
+case 77:
 YY_RULE_SETUP
-#line 373 "scan-gram.l"
+#line 376 "scan-gram.l"
 YY_OBS_GROW;
        YY_BREAK
-case 75:
+case 78:
 YY_RULE_SETUP
-#line 375 "scan-gram.l"
+#line 378 "scan-gram.l"
 YY_OBS_GROW; YY_LINES;
        YY_BREAK
 case YY_STATE_EOF(SC_CHARACTER):
-#line 377 "scan-gram.l"
+#line 380 "scan-gram.l"
 {
     LOCATION_PRINT (stderr, *yylloc);
     fprintf (stderr, ": unexpected end of file in a character\n");
@@ -1635,38 +1649,38 @@ case YY_STATE_EOF(SC_CHARACTER):
   `----------------------------------------------------------------*/
 
 
-case 76:
+case 79:
 YY_RULE_SETUP
-#line 393 "scan-gram.l"
+#line 396 "scan-gram.l"
 {
     assert (yy_top_state () != INITIAL);
     YY_OBS_GROW;
     yy_pop_state ();
   }
        YY_BREAK
-case 77:
+case 80:
 YY_RULE_SETUP
-#line 399 "scan-gram.l"
+#line 402 "scan-gram.l"
 YY_OBS_GROW;
        YY_BREAK
-case 78:
+case 81:
 YY_RULE_SETUP
-#line 400 "scan-gram.l"
+#line 403 "scan-gram.l"
 YY_OBS_GROW;
        YY_BREAK
 /* FLex wants this rule, in case of a `\<<EOF>>'. */
-case 79:
+case 82:
 YY_RULE_SETUP
-#line 402 "scan-gram.l"
+#line 405 "scan-gram.l"
 YY_OBS_GROW;
        YY_BREAK
-case 80:
+case 83:
 YY_RULE_SETUP
-#line 404 "scan-gram.l"
+#line 407 "scan-gram.l"
 YY_OBS_GROW; YY_LINES;
        YY_BREAK
 case YY_STATE_EOF(SC_STRING):
-#line 406 "scan-gram.l"
+#line 409 "scan-gram.l"
 {
     LOCATION_PRINT (stderr, *yylloc);
     fprintf (stderr, ": unexpected end of file in a string\n");
@@ -1681,32 +1695,32 @@ case YY_STATE_EOF(SC_STRING):
 
 
 /* Characters.  We don't check there is only one.  */
-case 81:
+case 84:
 YY_RULE_SETUP
-#line 422 "scan-gram.l"
+#line 425 "scan-gram.l"
 YY_OBS_GROW; yy_push_state (SC_CHARACTER);
        YY_BREAK
 /* Strings. */
-case 82:
+case 85:
 YY_RULE_SETUP
-#line 425 "scan-gram.l"
+#line 428 "scan-gram.l"
 YY_OBS_GROW; yy_push_state (SC_STRING);
        YY_BREAK
 /* Comments. */
-case 83:
+case 86:
 YY_RULE_SETUP
-#line 428 "scan-gram.l"
+#line 431 "scan-gram.l"
 YY_OBS_GROW; yy_push_state (SC_COMMENT);
        YY_BREAK
-case 84:
+case 87:
 YY_RULE_SETUP
-#line 429 "scan-gram.l"
+#line 432 "scan-gram.l"
 YY_OBS_GROW;
        YY_BREAK
 /* Not comments. */
-case 85:
+case 88:
 YY_RULE_SETUP
-#line 432 "scan-gram.l"
+#line 435 "scan-gram.l"
 YY_OBS_GROW;
        YY_BREAK
 
@@ -1716,9 +1730,9 @@ YY_OBS_GROW;
   `---------------------------------------------------------------*/
 
 
-case 86:
+case 89:
 YY_RULE_SETUP
-#line 443 "scan-gram.l"
+#line 446 "scan-gram.l"
 {
     YY_OBS_GROW;
     if (--braces_level == 0)
@@ -1730,41 +1744,41 @@ YY_RULE_SETUP
       }
   }
        YY_BREAK
-case 87:
+case 90:
 YY_RULE_SETUP
-#line 454 "scan-gram.l"
+#line 457 "scan-gram.l"
 YY_OBS_GROW; braces_level++;
        YY_BREAK
-case 88:
+case 91:
 YY_RULE_SETUP
-#line 456 "scan-gram.l"
+#line 459 "scan-gram.l"
 { handle_dollar (current_braced_code,
                                                   yytext, *yylloc); }
        YY_BREAK
-case 89:
+case 92:
 YY_RULE_SETUP
-#line 458 "scan-gram.l"
+#line 461 "scan-gram.l"
 { handle_at (current_braced_code,
                                               yytext, *yylloc); }
        YY_BREAK
-case 90:
+case 93:
 YY_RULE_SETUP
-#line 461 "scan-gram.l"
+#line 464 "scan-gram.l"
 YY_OBS_GROW;
        YY_BREAK
-case 91:
+case 94:
 YY_RULE_SETUP
-#line 462 "scan-gram.l"
+#line 465 "scan-gram.l"
 YY_OBS_GROW; YY_LINES;
        YY_BREAK
 /* A lose $, or /, or etc. */
-case 92:
+case 95:
 YY_RULE_SETUP
-#line 465 "scan-gram.l"
+#line 468 "scan-gram.l"
 YY_OBS_GROW;
        YY_BREAK
 case YY_STATE_EOF(SC_BRACED_CODE):
-#line 467 "scan-gram.l"
+#line 470 "scan-gram.l"
 {
     LOCATION_PRINT (stderr, *yylloc);
     fprintf (stderr, ": unexpected end of file in a braced code\n");
@@ -1780,9 +1794,9 @@ case YY_STATE_EOF(SC_BRACED_CODE):
   `--------------------------------------------------------------*/
 
 
-case 93:
+case 96:
 YY_RULE_SETUP
-#line 485 "scan-gram.l"
+#line 488 "scan-gram.l"
 {
     yy_pop_state ();
     YY_OBS_FINISH;
@@ -1790,23 +1804,23 @@ YY_RULE_SETUP
     return PROLOGUE;
   }
        YY_BREAK
-case 94:
+case 97:
 YY_RULE_SETUP
-#line 492 "scan-gram.l"
+#line 495 "scan-gram.l"
 YY_OBS_GROW;
        YY_BREAK
-case 95:
+case 98:
 YY_RULE_SETUP
-#line 493 "scan-gram.l"
+#line 496 "scan-gram.l"
 YY_OBS_GROW;
        YY_BREAK
-case 96:
+case 99:
 YY_RULE_SETUP
-#line 494 "scan-gram.l"
+#line 497 "scan-gram.l"
 YY_OBS_GROW; YY_LINES;
        YY_BREAK
 case YY_STATE_EOF(SC_PROLOGUE):
-#line 496 "scan-gram.l"
+#line 499 "scan-gram.l"
 {
     LOCATION_PRINT (stderr, *yylloc);
     fprintf (stderr, ": unexpected end of file in a prologue\n");
@@ -1823,13 +1837,13 @@ case YY_STATE_EOF(SC_PROLOGUE):
   `---------------------------------------------------------------*/
 
 
-case 97:
+case 100:
 YY_RULE_SETUP
-#line 514 "scan-gram.l"
+#line 517 "scan-gram.l"
 YY_OBS_GROW;
        YY_BREAK
 case YY_STATE_EOF(SC_EPILOGUE):
-#line 516 "scan-gram.l"
+#line 519 "scan-gram.l"
 {
     yy_pop_state ();
     YY_OBS_FINISH;
@@ -1838,12 +1852,12 @@ case YY_STATE_EOF(SC_EPILOGUE):
   }
        YY_BREAK
 
-case 98:
+case 101:
 YY_RULE_SETUP
-#line 525 "scan-gram.l"
+#line 528 "scan-gram.l"
 YY_FATAL_ERROR( "flex scanner jammed" );
        YY_BREAK
-#line 1847 "lex.yy.c"
+#line 1861 "scan-gram.c"
 case YY_STATE_EOF(INITIAL):
        yyterminate();
 
@@ -2135,7 +2149,7 @@ static yy_state_type yy_get_previous_state()
                while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                        {
                        yy_current_state = (int) yy_def[yy_current_state];
-                       if ( yy_current_state >= 361 )
+                       if ( yy_current_state >= 380 )
                                yy_c = yy_meta[(unsigned int) yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -2170,11 +2184,11 @@ yy_state_type yy_current_state;
        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                {
                yy_current_state = (int) yy_def[yy_current_state];
-               if ( yy_current_state >= 361 )
+               if ( yy_current_state >= 380 )
                        yy_c = yy_meta[(unsigned int) yy_c];
                }
        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-       yy_is_jam = (yy_current_state == 360);
+       yy_is_jam = (yy_current_state == 379);
 
        return yy_is_jam ? 0 : yy_current_state;
        }
@@ -2407,15 +2421,11 @@ YY_BUFFER_STATE b;
        }
 
 
-#ifndef _WIN32
-#include <unistd.h>
-#else
 #ifndef YY_ALWAYS_INTERACTIVE
 #ifndef YY_NEVER_INTERACTIVE
 extern int isatty YY_PROTO(( int ));
 #endif
 #endif
-#endif
 
 #ifdef YY_USE_PROTOS
 void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
@@ -2733,7 +2743,7 @@ int main()
        return 0;
        }
 #endif
-#line 525 "scan-gram.l"
+#line 528 "scan-gram.l"
 
 
 /*------------------------------------------------------------------.
index 02d47e5..e5147b7 100644 (file)
@@ -124,12 +124,15 @@ blanks   [ \t\f]+
   "%define"               return PERCENT_DEFINE;
   "%defines"              return PERCENT_DEFINES;
   "%destructor"           return PERCENT_DESTRUCTOR;
+  "%dprec"               return PERCENT_DPREC;
   "%error"[-_]"verbose"   return PERCENT_ERROR_VERBOSE;
   "%expect"               return PERCENT_EXPECT;
   "%file-prefix"          return PERCENT_FILE_PREFIX;
   "%fixed"[-_]"output"[-_]"files"   return PERCENT_YACC;
+  "%glr"[-_]"parser"     return PERCENT_GLR_PARSER;
   "%left"                 return PERCENT_LEFT;
   "%locations"            return PERCENT_LOCATIONS;
+  "%merge"               return PERCENT_MERGE;
   "%name"[-_]"prefix"     return PERCENT_NAME_PREFIX;
   "%no"[-_]"lines"        return PERCENT_NO_LINES;
   "%nonassoc"             return PERCENT_NONASSOC;
index d86207c..8b61c8d 100644 (file)
@@ -36,6 +36,8 @@ symbol_list_new (symbol_t *sym, location_t location)
   res->location = location;
   res->action = NULL;
   res->ruleprec = NULL;
+  res->dprec = 0;
+  res->merger = 0;
   return res;
 }
 
index 31bd2a9..02af5bb 100644 (file)
@@ -35,6 +35,8 @@ typedef struct symbol_list_s
   location_t action_location;
 
   symbol_t *ruleprec;
+  int dprec;
+  int merger;
 } symbol_list_t;
 
 
index ccda6d8..b695d92 100644 (file)
@@ -49,7 +49,8 @@ TESTSUITE_AT = \
        output.at sets.at reduce.at \
        synclines.at headers.at actions.at conflicts.at \
        calc.at \
-        torture.at existing.at regression.at
+        torture.at existing.at regression.at \
+       cxx-type.at
 
 TESTSUITE = $(srcdir)/testsuite
 
index 26d3777..71c95f1 100644 (file)
@@ -61,3 +61,6 @@ m4_include([existing.at])
 
 # Some old bugs.
 m4_include([regression.at])
+
+# GLR tests: C++ types, simplified
+m4_include([cxx-type.at])