* src/closure.h: New file.

* src/closure.c: Formatting changes, topological sort over the
functions, use of closure.h.
(initialize_closure, finalize_closure):  Rename as...
(new_closure, free_closure): these.  Adjust dependencies.
* src/LR0.c: Formatting changes, topological sort, use of
cloture.h.
(initialize_states): Rename as...
(new_states): this.
* src/Makefile.am (noinst_HEADERS): Adjust.
This commit is contained in:
Akim Demaille
2000-09-21 10:17:59 +00:00
parent 2fa6973e6f
commit c29240e74b
12 changed files with 973 additions and 871 deletions

View File

@@ -1,4 +1,4 @@
2000-09-20 Akim Demaille <akim@epita.fr>
2000-09-21 Akim Demaille <akim@epita.fr>
* src/closure.h: New file.
* src/closure.c: Formatting changes, topological sort over the

122
po/de.po
View File

@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: bison 1.25\n"
"POT-Creation-Date: 2000-09-20 17:44+0200\n"
"POT-Creation-Date: 2000-09-21 10:30+0200\n"
"PO-Revision-Date: 1996-10-10 17:54 MET DST\n"
"Last-Translator: Ulrich Drepper <drepper@gnu.ai.mit.edu>\n"
"Language-Team: German <de@li.org>\n"
@@ -23,77 +23,77 @@ msgstr ""
msgid "%s: memory exhausted\n"
msgstr "%s: Hauptspeicher erschöpft\n"
#: src/conflicts.c:198 src/conflicts.c:222
msgid "reduce"
msgstr "durch Reduzierung gelöst"
#: src/conflicts.c:204 src/conflicts.c:218
msgid "shift"
msgstr "durch Schieben gelöst"
#: src/conflicts.c:226
msgid "an error"
msgstr "als Fehler betrachtet"
#: src/conflicts.c:298
#: src/conflicts.c:64
#, c-format
msgid "Conflict in state %d between rule %d and token %s resolved as %s.\n"
msgstr "Konflikt in Zustand %d zwischen Regel %d and Token %s wurde %s.\n"
#: src/conflicts.c:343
#, c-format
msgid "State %d contains"
msgstr "Zustand %d enthält"
#: src/conflicts.c:130 src/conflicts.c:153
msgid "reduce"
msgstr "durch Reduzierung gelöst"
#: src/conflicts.c:346 src/conflicts.c:391
msgid " 1 shift/reduce conflict"
msgstr " 1 Schiebe/Reduziere Konflikt"
#: src/conflicts.c:136 src/conflicts.c:149
msgid "shift"
msgstr "durch Schieben gelöst"
#: src/conflicts.c:348 src/conflicts.c:393
#, c-format
msgid " %d shift/reduce conflicts"
msgstr " %d Schiebe/Reduziere Konflikte"
#: src/conflicts.c:351 src/conflicts.c:396
msgid " and"
msgstr " und"
#: src/conflicts.c:354 src/conflicts.c:399
msgid " 1 reduce/reduce conflict"
msgstr " 1 Reduziere/Reduziere Konflikt"
#: src/conflicts.c:356 src/conflicts.c:401
#, c-format
msgid " %d reduce/reduce conflicts"
msgstr " %d Reduziere/Reduziere Konflikte"
#: src/conflicts.c:157
msgid "an error"
msgstr "als Fehler betrachtet"
#. If invoked under the name `yacc', use the output format
#. specified by POSIX.
#: src/conflicts.c:377
#: src/conflicts.c:446
msgid "conflicts: "
msgstr "Konflikte: "
#: src/conflicts.c:379
#: src/conflicts.c:448
#, c-format
msgid " %d shift/reduce"
msgstr " %d Schiebe/Reduziere"
#: src/conflicts.c:383
#: src/conflicts.c:452
#, c-format
msgid " %d reduce/reduce"
msgstr " %d Reduziere/Reduziere"
#: src/conflicts.c:388
#: src/conflicts.c:457
#, c-format
msgid "%s contains"
msgstr "%s enthält"
#: src/conflicts.c:597 src/conflicts.c:711
#: src/conflicts.c:460 src/conflicts.c:525
msgid " 1 shift/reduce conflict"
msgstr " 1 Schiebe/Reduziere Konflikt"
#: src/conflicts.c:462 src/conflicts.c:527
#, c-format
msgid " %d shift/reduce conflicts"
msgstr " %d Schiebe/Reduziere Konflikte"
#: src/conflicts.c:465 src/conflicts.c:530
msgid " and"
msgstr " und"
#: src/conflicts.c:468 src/conflicts.c:533
msgid " 1 reduce/reduce conflict"
msgstr " 1 Reduziere/Reduziere Konflikt"
#: src/conflicts.c:470 src/conflicts.c:535
#, c-format
msgid " %d reduce/reduce conflicts"
msgstr " %d Reduziere/Reduziere Konflikte"
#: src/conflicts.c:522
#, c-format
msgid "State %d contains"
msgstr "Zustand %d enthält"
#: src/conflicts.c:629 src/conflicts.c:749
#, c-format
msgid " %-4s\t[reduce using rule %d (%s)]\n"
msgstr " %-4s\t[reduziere mit Regel %d (%s)]\n"
#: src/conflicts.c:608 src/print.c:221
#: src/conflicts.c:640 src/print.c:222
#, c-format
msgid ""
" $default\treduce using rule %d (%s)\n"
@@ -102,12 +102,12 @@ msgstr ""
" $default\treduziere mit Regel %d (%s)\n"
"\n"
#: src/conflicts.c:694 src/conflicts.c:706
#: src/conflicts.c:729 src/conflicts.c:743
#, c-format
msgid " %-4s\treduce using rule %d (%s)\n"
msgstr " %-4s\treduziere mit Tegel %d (%s)\n"
#: src/conflicts.c:732
#: src/conflicts.c:770
#, c-format
msgid " $default\treduce using rule %d (%s)\n"
msgstr " $default\treduziere mit Regel %d (%s)\n"
@@ -267,12 +267,12 @@ msgstr "F
msgid "maximum table size (%d) exceeded"
msgstr "maximale Tabellengröße (%s) überschritten"
#: src/print.c:88
#: src/print.c:84
#, c-format
msgid " type %d is %s\n"
msgstr " Typ %d ist %s\n"
#: src/print.c:96
#: src/print.c:92
#, c-format
msgid ""
"\n"
@@ -285,26 +285,26 @@ msgstr ""
"Zustand %d\n"
"\n"
#: src/print.c:140
#: src/print.c:137
#, c-format
msgid " (rule %d)"
msgstr " (Regel %d)"
#: src/print.c:167
#: src/print.c:164
msgid " $default\taccept\n"
msgstr " $default\takzeptiere\n"
#: src/print.c:169
#: src/print.c:166
msgid " NO ACTIONS\n"
msgstr " KEINE AKTIONEN\n"
#. I.e. strcmp(tags[symbol],"$")==0
#: src/print.c:185
#: src/print.c:184
#, c-format
msgid " $ \tgo to state %d\n"
msgstr " $ \tgehe zu Zustand %d über\n"
#: src/print.c:187
#: src/print.c:186
#, c-format
msgid " %-4s\tshift, and go to state %d\n"
msgstr " %-4s\tSchiebe und gehe zu Zustand %d über\n"
@@ -314,13 +314,13 @@ msgstr " %-4s\tSchiebe und gehe zu Zustand %d
msgid " %-4s\terror (nonassociative)\n"
msgstr " %-4s\tFehler (nicht assoziativ)\n"
#: src/print.c:236
#: src/print.c:238
#, c-format
msgid " %-4s\tgo to state %d\n"
msgstr " %-4s\tgehe zu Zustand %d über\n"
#. rule # : LHS -> RHS
#: src/print.c:261
#: src/print.c:264
msgid ""
"\n"
"Grammar\n"
@@ -328,17 +328,17 @@ msgstr ""
"\n"
"Grammatik\n"
#: src/print.c:266
#: src/print.c:269
#, c-format
msgid "rule %-4d %s ->"
msgstr "Regel %-4d %s ->"
#: src/print.c:272
#: src/print.c:275
msgid "\t\t/* empty */"
msgstr "\t\t/* leer */"
#. TERMINAL (type #) : rule #s terminal is on RHS
#: src/print.c:277
#: src/print.c:280
msgid ""
"\n"
"Terminals, with rules where they appear\n"
@@ -348,7 +348,7 @@ msgstr ""
"Terminale und die Regeln un denen sie verwendet werden\n"
"\n"
#: src/print.c:325
#: src/print.c:328
msgid ""
"\n"
"Nonterminals, with rules where they appear\n"
@@ -358,11 +358,11 @@ msgstr ""
"Nicht-Terminal und die Regeln in denen sie verwendet werden\n"
"\n"
#: src/print.c:351
#: src/print.c:354
msgid " on left:"
msgstr " auf der linken Seite:"
#: src/print.c:366
#: src/print.c:369
msgid " on right:"
msgstr " auf der rechten Seite:"

122
po/es.po
View File

@@ -30,7 +30,7 @@
msgid ""
msgstr ""
"Project-Id-Version: GNU bison 1.25\n"
"POT-Creation-Date: 2000-09-20 17:44+0200\n"
"POT-Creation-Date: 2000-09-21 10:30+0200\n"
"PO-Revision-Date: 1998-09-21 10:19+0200\n"
"Last-Translator: Nicolás García-Pedrajas <ngarcia-pedrajas@acm.org>\n"
"Language-Team: Spanish <es@li.org>\n"
@@ -48,55 +48,28 @@ msgstr ""
msgid "%s: memory exhausted\n"
msgstr "%s: memoria agotada\n"
#: src/conflicts.c:198 src/conflicts.c:222
msgid "reduce"
msgstr "reduce"
#: src/conflicts.c:204 src/conflicts.c:218
msgid "shift"
msgstr "desplaza"
#: src/conflicts.c:226
msgid "an error"
msgstr "un error"
#: src/conflicts.c:298
#: src/conflicts.c:64
#, c-format
msgid "Conflict in state %d between rule %d and token %s resolved as %s.\n"
msgstr ""
"El conflicto en el estado %s entre la regla %d y el terminal %s se resuelve "
"como %s.\n"
#: src/conflicts.c:343
#, c-format
msgid "State %d contains"
msgstr "El estado %d contiene"
#: src/conflicts.c:130 src/conflicts.c:153
msgid "reduce"
msgstr "reduce"
#: src/conflicts.c:346 src/conflicts.c:391
msgid " 1 shift/reduce conflict"
msgstr " 1 conflicto desplazamiento/reducción"
#: src/conflicts.c:136 src/conflicts.c:149
msgid "shift"
msgstr "desplaza"
#: src/conflicts.c:348 src/conflicts.c:393
#, c-format
msgid " %d shift/reduce conflicts"
msgstr " %d conflictos desplazamiento/reducción"
#: src/conflicts.c:351 src/conflicts.c:396
msgid " and"
msgstr " y"
#: src/conflicts.c:354 src/conflicts.c:399
msgid " 1 reduce/reduce conflict"
msgstr " 1 conflicto reducción/reducción"
#: src/conflicts.c:356 src/conflicts.c:401
#, c-format
msgid " %d reduce/reduce conflicts"
msgstr " %d conflictos reducción/reducción"
#: src/conflicts.c:157
msgid "an error"
msgstr "un error"
#. If invoked under the name `yacc', use the output format
#. specified by POSIX.
#: src/conflicts.c:377
#: src/conflicts.c:446
msgid "conflicts: "
msgstr "conflictos: "
@@ -112,7 +85,7 @@ msgstr "conflictos: "
# ok
# ngp
#
#: src/conflicts.c:379
#: src/conflicts.c:448
#, c-format
msgid " %d shift/reduce"
msgstr " %d desplazamiento(s)/reducción(ones)"
@@ -129,22 +102,49 @@ msgstr " %d desplazamiento(s)/reducci
#
# ok
# ngp
#: src/conflicts.c:383
#: src/conflicts.c:452
#, c-format
msgid " %d reduce/reduce"
msgstr " %d reducción(ones)/reducción(ones)"
#: src/conflicts.c:388
#: src/conflicts.c:457
#, c-format
msgid "%s contains"
msgstr "%s contiene"
#: src/conflicts.c:597 src/conflicts.c:711
#: src/conflicts.c:460 src/conflicts.c:525
msgid " 1 shift/reduce conflict"
msgstr " 1 conflicto desplazamiento/reducción"
#: src/conflicts.c:462 src/conflicts.c:527
#, c-format
msgid " %d shift/reduce conflicts"
msgstr " %d conflictos desplazamiento/reducción"
#: src/conflicts.c:465 src/conflicts.c:530
msgid " and"
msgstr " y"
#: src/conflicts.c:468 src/conflicts.c:533
msgid " 1 reduce/reduce conflict"
msgstr " 1 conflicto reducción/reducción"
#: src/conflicts.c:470 src/conflicts.c:535
#, c-format
msgid " %d reduce/reduce conflicts"
msgstr " %d conflictos reducción/reducción"
#: src/conflicts.c:522
#, c-format
msgid "State %d contains"
msgstr "El estado %d contiene"
#: src/conflicts.c:629 src/conflicts.c:749
#, c-format
msgid " %-4s\t[reduce using rule %d (%s)]\n"
msgstr " %-4s\t[reduce usando la regla %d (%s)]\n"
#: src/conflicts.c:608 src/print.c:221
#: src/conflicts.c:640 src/print.c:222
#, c-format
msgid ""
" $default\treduce using rule %d (%s)\n"
@@ -153,12 +153,12 @@ msgstr ""
" $default\treduce usando la regla %d (%s)\n"
"\n"
#: src/conflicts.c:694 src/conflicts.c:706
#: src/conflicts.c:729 src/conflicts.c:743
#, c-format
msgid " %-4s\treduce using rule %d (%s)\n"
msgstr " %-4s\treduce usando la regla %d (%s)\n"
#: src/conflicts.c:732
#: src/conflicts.c:770
#, c-format
msgid " $default\treduce using rule %d (%s)\n"
msgstr " $default\treduce usando la regla %d (%s)\n"
@@ -332,12 +332,12 @@ msgstr "Entrando set_nullable"
msgid "maximum table size (%d) exceeded"
msgstr "excedido el tamaño máximo de la tabla (%s)"
#: src/print.c:88
#: src/print.c:84
#, c-format
msgid " type %d is %s\n"
msgstr " el tipo %d es %s\n"
#: src/print.c:96
#: src/print.c:92
#, c-format
msgid ""
"\n"
@@ -350,26 +350,26 @@ msgstr ""
"estado %d\n"
"\n"
#: src/print.c:140
#: src/print.c:137
#, c-format
msgid " (rule %d)"
msgstr " (regla %d)"
#: src/print.c:167
#: src/print.c:164
msgid " $default\taccept\n"
msgstr " $default\taceptar\n"
#: src/print.c:169
#: src/print.c:166
msgid " NO ACTIONS\n"
msgstr " SIN ACCIONES\n"
#. I.e. strcmp(tags[symbol],"$")==0
#: src/print.c:185
#: src/print.c:184
#, c-format
msgid " $ \tgo to state %d\n"
msgstr " $ \tir al estado %d\n"
#: src/print.c:187
#: src/print.c:186
#, c-format
msgid " %-4s\tshift, and go to state %d\n"
msgstr " %-4s\tdesplazar e ir al estado %d\n"
@@ -379,13 +379,13 @@ msgstr " %-4s\tdesplazar e ir al estado %d\n"
msgid " %-4s\terror (nonassociative)\n"
msgstr " %-4s\terror (no asociativo)\n"
#: src/print.c:236
#: src/print.c:238
#, c-format
msgid " %-4s\tgo to state %d\n"
msgstr " %-4s\tir al estado %d\n"
#. rule # : LHS -> RHS
#: src/print.c:261
#: src/print.c:264
msgid ""
"\n"
"Grammar\n"
@@ -393,7 +393,7 @@ msgstr ""
"\n"
"Gramática\n"
#: src/print.c:266
#: src/print.c:269
#, c-format
msgid "rule %-4d %s ->"
msgstr "regla %-4d %s ->"
@@ -403,12 +403,12 @@ msgstr "regla %-4d %s ->"
# como `vacía/o' - cll
# según el código indica reglas vacías por eso lo puse así
# ngp
#: src/print.c:272
#: src/print.c:275
msgid "\t\t/* empty */"
msgstr "\t\t/* vacía */"
#. TERMINAL (type #) : rule #s terminal is on RHS
#: src/print.c:277
#: src/print.c:280
msgid ""
"\n"
"Terminals, with rules where they appear\n"
@@ -418,7 +418,7 @@ msgstr ""
"Terminales con las reglas donde aparecen\n"
"\n"
#: src/print.c:325
#: src/print.c:328
msgid ""
"\n"
"Nonterminals, with rules where they appear\n"
@@ -427,11 +427,11 @@ msgstr ""
"\n"
"No terminales con las reglas donde aparecen\n"
#: src/print.c:351
#: src/print.c:354
msgid " on left:"
msgstr " en la izquierda:"
#: src/print.c:366
#: src/print.c:369
msgid " on right:"
msgstr " en la derecha:"

122
po/et.po
View File

@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: bison 1.25\n"
"POT-Creation-Date: 2000-09-20 17:44+0200\n"
"POT-Creation-Date: 2000-09-21 10:30+0200\n"
"PO-Revision-Date: 2000-04-11 22:19+02:00\n"
"Last-Translator: Toomas Soome <tsoome@ut.ee>\n"
"Language-Team: Estonian <et@li.org>\n"
@@ -23,77 +23,77 @@ msgstr "liiga palju olekuid (maks %d)"
msgid "%s: memory exhausted\n"
msgstr "%s: mälu on otsas\n"
#: src/conflicts.c:198 src/conflicts.c:222
msgid "reduce"
msgstr "redutseerimine"
#: src/conflicts.c:204 src/conflicts.c:218
msgid "shift"
msgstr "nihutamine"
#: src/conflicts.c:226
msgid "an error"
msgstr "viga"
#: src/conflicts.c:298
#: src/conflicts.c:64
#, c-format
msgid "Conflict in state %d between rule %d and token %s resolved as %s.\n"
msgstr "Konflikt olekus %d reegli %d ja märgi %s vahel lahendatud, kui %s.\n"
#: src/conflicts.c:343
#, c-format
msgid "State %d contains"
msgstr "Olek %d sisaldab"
#: src/conflicts.c:130 src/conflicts.c:153
msgid "reduce"
msgstr "redutseerimine"
#: src/conflicts.c:346 src/conflicts.c:391
msgid " 1 shift/reduce conflict"
msgstr " 1 nihutamine/redutseerimine konflikt"
#: src/conflicts.c:136 src/conflicts.c:149
msgid "shift"
msgstr "nihutamine"
#: src/conflicts.c:348 src/conflicts.c:393
#, c-format
msgid " %d shift/reduce conflicts"
msgstr " %d nihutamine/redutseerimine konflikti"
#: src/conflicts.c:351 src/conflicts.c:396
msgid " and"
msgstr " ja"
#: src/conflicts.c:354 src/conflicts.c:399
msgid " 1 reduce/reduce conflict"
msgstr " 1 redutseerimine/redutseerimine konflikt"
#: src/conflicts.c:356 src/conflicts.c:401
#, c-format
msgid " %d reduce/reduce conflicts"
msgstr " %d redutseerimine/redutseerimine konflikti"
#: src/conflicts.c:157
msgid "an error"
msgstr "viga"
#. If invoked under the name `yacc', use the output format
#. specified by POSIX.
#: src/conflicts.c:377
#: src/conflicts.c:446
msgid "conflicts: "
msgstr "konfliktid: "
#: src/conflicts.c:379
#: src/conflicts.c:448
#, c-format
msgid " %d shift/reduce"
msgstr " %d nihutamine/redutseerimine"
#: src/conflicts.c:383
#: src/conflicts.c:452
#, c-format
msgid " %d reduce/reduce"
msgstr " %d redutseerimine/redutseerimine"
#: src/conflicts.c:388
#: src/conflicts.c:457
#, c-format
msgid "%s contains"
msgstr "%s sisaldab"
#: src/conflicts.c:597 src/conflicts.c:711
#: src/conflicts.c:460 src/conflicts.c:525
msgid " 1 shift/reduce conflict"
msgstr " 1 nihutamine/redutseerimine konflikt"
#: src/conflicts.c:462 src/conflicts.c:527
#, c-format
msgid " %d shift/reduce conflicts"
msgstr " %d nihutamine/redutseerimine konflikti"
#: src/conflicts.c:465 src/conflicts.c:530
msgid " and"
msgstr " ja"
#: src/conflicts.c:468 src/conflicts.c:533
msgid " 1 reduce/reduce conflict"
msgstr " 1 redutseerimine/redutseerimine konflikt"
#: src/conflicts.c:470 src/conflicts.c:535
#, c-format
msgid " %d reduce/reduce conflicts"
msgstr " %d redutseerimine/redutseerimine konflikti"
#: src/conflicts.c:522
#, c-format
msgid "State %d contains"
msgstr "Olek %d sisaldab"
#: src/conflicts.c:629 src/conflicts.c:749
#, c-format
msgid " %-4s\t[reduce using rule %d (%s)]\n"
msgstr " %-4s\t[redutseerin, kasutades reeglit %d (%s)]\n"
#: src/conflicts.c:608 src/print.c:221
#: src/conflicts.c:640 src/print.c:222
#, c-format
msgid ""
" $default\treduce using rule %d (%s)\n"
@@ -102,12 +102,12 @@ msgstr ""
" $default\tredutseerin kasutades reeglit %d (%s)\n"
"\n"
#: src/conflicts.c:694 src/conflicts.c:706
#: src/conflicts.c:729 src/conflicts.c:743
#, c-format
msgid " %-4s\treduce using rule %d (%s)\n"
msgstr " %-4s\tredutseerin kasutades reeglit %d (%s)\n"
#: src/conflicts.c:732
#: src/conflicts.c:770
#, c-format
msgid " $default\treduce using rule %d (%s)\n"
msgstr " $default\tredutseerin kasutades reeglit %d (%s)\n"
@@ -288,12 +288,12 @@ msgstr "Entering set_nullable"
msgid "maximum table size (%d) exceeded"
msgstr "ületati maksimaalset tabelisuurust (%d)"
#: src/print.c:88
#: src/print.c:84
#, c-format
msgid " type %d is %s\n"
msgstr " tüüp %d on %s\n"
#: src/print.c:96
#: src/print.c:92
#, c-format
msgid ""
"\n"
@@ -306,26 +306,26 @@ msgstr ""
"olek %d\n"
"\n"
#: src/print.c:140
#: src/print.c:137
#, c-format
msgid " (rule %d)"
msgstr " (reegel %d)"
#: src/print.c:167
#: src/print.c:164
msgid " $default\taccept\n"
msgstr " $default\taktsepteerin\n"
#: src/print.c:169
#: src/print.c:166
msgid " NO ACTIONS\n"
msgstr " TEGEVUSI POLE\n"
#. I.e. strcmp(tags[symbol],"$")==0
#: src/print.c:185
#: src/print.c:184
#, c-format
msgid " $ \tgo to state %d\n"
msgstr " $ \tliigu olekule %d\n"
#: src/print.c:187
#: src/print.c:186
#, c-format
msgid " %-4s\tshift, and go to state %d\n"
msgstr " %-4s\tnihuta ja liigu olekule %d\n"
@@ -335,13 +335,13 @@ msgstr " %-4s\tnihuta ja liigu olekule %d\n"
msgid " %-4s\terror (nonassociative)\n"
msgstr " %-4s\tviga (mitteassotsiatiivne)\n"
#: src/print.c:236
#: src/print.c:238
#, c-format
msgid " %-4s\tgo to state %d\n"
msgstr " %-4s\tliigu olekule %d\n"
#. rule # : LHS -> RHS
#: src/print.c:261
#: src/print.c:264
msgid ""
"\n"
"Grammar\n"
@@ -349,17 +349,17 @@ msgstr ""
"\n"
"Grammatika\n"
#: src/print.c:266
#: src/print.c:269
#, c-format
msgid "rule %-4d %s ->"
msgstr "reegel %-4d %s ->"
#: src/print.c:272
#: src/print.c:275
msgid "\t\t/* empty */"
msgstr "\t\t/* tühi */"
#. TERMINAL (type #) : rule #s terminal is on RHS
#: src/print.c:277
#: src/print.c:280
msgid ""
"\n"
"Terminals, with rules where they appear\n"
@@ -369,7 +369,7 @@ msgstr ""
"Terminalid, koos reeglitega, kus nad ilmuvad\n"
"\n"
#: src/print.c:325
#: src/print.c:328
msgid ""
"\n"
"Nonterminals, with rules where they appear\n"
@@ -379,11 +379,11 @@ msgstr ""
"Mitteterminalid, koos reeglitega, kus nad ilmuvad\n"
"\n"
#: src/print.c:351
#: src/print.c:354
msgid " on left:"
msgstr " vasakul:"
#: src/print.c:366
#: src/print.c:369
msgid " on right:"
msgstr " paremal:"

122
po/fr.po
View File

@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: bison 1.25\n"
"POT-Creation-Date: 2000-09-20 17:44+0200\n"
"POT-Creation-Date: 2000-09-21 10:30+0200\n"
"PO-Revision-Date: 1996-03-19 20:05 EST\n"
"Last-Translator: Dominique Boucher <boucherd@IRO.UMontreal.CA>\n"
"Language-Team: French <fr@li.org>\n"
@@ -23,78 +23,78 @@ msgstr ""
msgid "%s: memory exhausted\n"
msgstr "%s: mémoire épuisée\n"
#: src/conflicts.c:198 src/conflicts.c:222
msgid "reduce"
msgstr "réduction"
#: src/conflicts.c:204 src/conflicts.c:218
msgid "shift"
msgstr "décalage"
#: src/conflicts.c:226
msgid "an error"
msgstr "une erreur"
#: src/conflicts.c:298
#: src/conflicts.c:64
#, c-format
msgid "Conflict in state %d between rule %d and token %s resolved as %s.\n"
msgstr ""
"Conflit à l'état %d entre la règle %d et le terminal %s résolu par %s.\n"
#: src/conflicts.c:343
#, c-format
msgid "State %d contains"
msgstr "L'état %d contient"
#: src/conflicts.c:130 src/conflicts.c:153
msgid "reduce"
msgstr "réduction"
#: src/conflicts.c:346 src/conflicts.c:391
msgid " 1 shift/reduce conflict"
msgstr " 1 conflit décalage/réduction"
#: src/conflicts.c:136 src/conflicts.c:149
msgid "shift"
msgstr "décalage"
#: src/conflicts.c:348 src/conflicts.c:393
#, c-format
msgid " %d shift/reduce conflicts"
msgstr " %d conflits décalage/réduction"
#: src/conflicts.c:351 src/conflicts.c:396
msgid " and"
msgstr " et"
#: src/conflicts.c:354 src/conflicts.c:399
msgid " 1 reduce/reduce conflict"
msgstr "1 conflit réduction/réduction"
#: src/conflicts.c:356 src/conflicts.c:401
#, c-format
msgid " %d reduce/reduce conflicts"
msgstr " %d conflits réduction/réduction"
#: src/conflicts.c:157
msgid "an error"
msgstr "une erreur"
#. If invoked under the name `yacc', use the output format
#. specified by POSIX.
#: src/conflicts.c:377
#: src/conflicts.c:446
msgid "conflicts: "
msgstr "conflits: "
#: src/conflicts.c:379
#: src/conflicts.c:448
#, c-format
msgid " %d shift/reduce"
msgstr " %d décalage/réduction"
#: src/conflicts.c:383
#: src/conflicts.c:452
#, c-format
msgid " %d reduce/reduce"
msgstr " %d réduction/réduction"
#: src/conflicts.c:388
#: src/conflicts.c:457
#, c-format
msgid "%s contains"
msgstr "%s contient"
#: src/conflicts.c:597 src/conflicts.c:711
#: src/conflicts.c:460 src/conflicts.c:525
msgid " 1 shift/reduce conflict"
msgstr " 1 conflit décalage/réduction"
#: src/conflicts.c:462 src/conflicts.c:527
#, c-format
msgid " %d shift/reduce conflicts"
msgstr " %d conflits décalage/réduction"
#: src/conflicts.c:465 src/conflicts.c:530
msgid " and"
msgstr " et"
#: src/conflicts.c:468 src/conflicts.c:533
msgid " 1 reduce/reduce conflict"
msgstr "1 conflit réduction/réduction"
#: src/conflicts.c:470 src/conflicts.c:535
#, c-format
msgid " %d reduce/reduce conflicts"
msgstr " %d conflits réduction/réduction"
#: src/conflicts.c:522
#, c-format
msgid "State %d contains"
msgstr "L'état %d contient"
#: src/conflicts.c:629 src/conflicts.c:749
#, c-format
msgid " %-4s\t[reduce using rule %d (%s)]\n"
msgstr " %-4s\t[réduction par la règle %d (%s)\n"
#: src/conflicts.c:608 src/print.c:221
#: src/conflicts.c:640 src/print.c:222
#, c-format
msgid ""
" $default\treduce using rule %d (%s)\n"
@@ -103,12 +103,12 @@ msgstr ""
" $défaut\tréduction par la règle %d (%s)\n"
"\n"
#: src/conflicts.c:694 src/conflicts.c:706
#: src/conflicts.c:729 src/conflicts.c:743
#, c-format
msgid " %-4s\treduce using rule %d (%s)\n"
msgstr " %-4s\tréduction par la règle %d (%s)\n"
#: src/conflicts.c:732
#: src/conflicts.c:770
#, c-format
msgid " $default\treduce using rule %d (%s)\n"
msgstr " $défaut\tréduction par la règle %d (%s)\n"
@@ -272,12 +272,12 @@ msgstr "Entr
msgid "maximum table size (%d) exceeded"
msgstr "taille maximum des tables (%s) dépassée"
#: src/print.c:88
#: src/print.c:84
#, c-format
msgid " type %d is %s\n"
msgstr " le type %d est %s\n"
#: src/print.c:96
#: src/print.c:92
#, c-format
msgid ""
"\n"
@@ -290,26 +290,26 @@ msgstr ""
"état %d\n"
"\n"
#: src/print.c:140
#: src/print.c:137
#, c-format
msgid " (rule %d)"
msgstr " (règle %d)"
#: src/print.c:167
#: src/print.c:164
msgid " $default\taccept\n"
msgstr " $défaut\taccepter\n"
#: src/print.c:169
#: src/print.c:166
msgid " NO ACTIONS\n"
msgstr " PAS D'ACTION\n"
#. I.e. strcmp(tags[symbol],"$")==0
#: src/print.c:185
#: src/print.c:184
#, c-format
msgid " $ \tgo to state %d\n"
msgstr " $ \taller à l'état %d\n"
#: src/print.c:187
#: src/print.c:186
#, c-format
msgid " %-4s\tshift, and go to state %d\n"
msgstr " %-4s\tdécalage et aller à l'état %d\n"
@@ -319,13 +319,13 @@ msgstr " %-4s\td
msgid " %-4s\terror (nonassociative)\n"
msgstr " %-4s\terreur (non-associatif)\n"
#: src/print.c:236
#: src/print.c:238
#, c-format
msgid " %-4s\tgo to state %d\n"
msgstr " %-4s\taller à l'état %d\n"
#. rule # : LHS -> RHS
#: src/print.c:261
#: src/print.c:264
msgid ""
"\n"
"Grammar\n"
@@ -333,17 +333,17 @@ msgstr ""
"\n"
"Grammaire\n"
#: src/print.c:266
#: src/print.c:269
#, c-format
msgid "rule %-4d %s ->"
msgstr "règle %-4d %s ->"
#: src/print.c:272
#: src/print.c:275
msgid "\t\t/* empty */"
msgstr "\t\t/* epsilon */"
#. TERMINAL (type #) : rule #s terminal is on RHS
#: src/print.c:277
#: src/print.c:280
msgid ""
"\n"
"Terminals, with rules where they appear\n"
@@ -353,7 +353,7 @@ msgstr ""
"Terminaux, suivis des règles où ils apparaissent\n"
"\n"
#: src/print.c:325
#: src/print.c:328
msgid ""
"\n"
"Nonterminals, with rules where they appear\n"
@@ -363,11 +363,11 @@ msgstr ""
"Catégories, suivis des règles où elles apparaissent\n"
"\n"
#: src/print.c:351
#: src/print.c:354
msgid " on left:"
msgstr " à gauche:"
#: src/print.c:366
#: src/print.c:369
msgid " on right:"
msgstr " à droite:"

122
po/ja.po
View File

@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: GNU bison 1.28\n"
"POT-Creation-Date: 2000-09-20 17:44+0200\n"
"POT-Creation-Date: 2000-09-21 10:30+0200\n"
"PO-Revision-Date: 1999-09-28 21:10+0900\n"
"Last-Translator: Daisuke Yamashita <yamad@mb.infoweb.ne.jp>\n"
"Language-Team: Japanese <ja@li.org>\n"
@@ -23,77 +23,77 @@ msgstr "%s
msgid "%s: memory exhausted\n"
msgstr "%s: メモリを使い果たしました\n"
#: src/conflicts.c:198 src/conflicts.c:222
msgid "reduce"
msgstr "還元"
#: src/conflicts.c:204 src/conflicts.c:218
msgid "shift"
msgstr "シフト"
#: src/conflicts.c:226
msgid "an error"
msgstr "エラー"
#: src/conflicts.c:298
#: src/conflicts.c:64
#, c-format
msgid "Conflict in state %d between rule %d and token %s resolved as %s.\n"
msgstr "状態 %d の規則 %d とトークン %s の競合を%sとして解決。\n"
#: src/conflicts.c:343
#, c-format
msgid "State %d contains"
msgstr "状態 %d が含むのは"
#: src/conflicts.c:130 src/conflicts.c:153
msgid "reduce"
msgstr "還元"
#: src/conflicts.c:346 src/conflicts.c:391
msgid " 1 shift/reduce conflict"
msgstr " 1 シフト/還元衝突"
#: src/conflicts.c:136 src/conflicts.c:149
msgid "shift"
msgstr "シフト"
#: src/conflicts.c:348 src/conflicts.c:393
#, c-format
msgid " %d shift/reduce conflicts"
msgstr " %d シフト/還元衝突"
#: src/conflicts.c:351 src/conflicts.c:396
msgid " and"
msgstr " および"
#: src/conflicts.c:354 src/conflicts.c:399
msgid " 1 reduce/reduce conflict"
msgstr " 1 還元/還元衝突"
#: src/conflicts.c:356 src/conflicts.c:401
#, c-format
msgid " %d reduce/reduce conflicts"
msgstr " %d 還元/還元衝突"
#: src/conflicts.c:157
msgid "an error"
msgstr "エラー"
#. If invoked under the name `yacc', use the output format
#. specified by POSIX.
#: src/conflicts.c:377
#: src/conflicts.c:446
msgid "conflicts: "
msgstr "衝突: "
#: src/conflicts.c:379
#: src/conflicts.c:448
#, c-format
msgid " %d shift/reduce"
msgstr " %d シフト/還元"
#: src/conflicts.c:383
#: src/conflicts.c:452
#, c-format
msgid " %d reduce/reduce"
msgstr " %d 還元/還元"
#: src/conflicts.c:388
#: src/conflicts.c:457
#, c-format
msgid "%s contains"
msgstr "%s には、"
#: src/conflicts.c:597 src/conflicts.c:711
#: src/conflicts.c:460 src/conflicts.c:525
msgid " 1 shift/reduce conflict"
msgstr " 1 シフト/還元衝突"
#: src/conflicts.c:462 src/conflicts.c:527
#, c-format
msgid " %d shift/reduce conflicts"
msgstr " %d シフト/還元衝突"
#: src/conflicts.c:465 src/conflicts.c:530
msgid " and"
msgstr " および"
#: src/conflicts.c:468 src/conflicts.c:533
msgid " 1 reduce/reduce conflict"
msgstr " 1 還元/還元衝突"
#: src/conflicts.c:470 src/conflicts.c:535
#, c-format
msgid " %d reduce/reduce conflicts"
msgstr " %d 還元/還元衝突"
#: src/conflicts.c:522
#, c-format
msgid "State %d contains"
msgstr "状態 %d が含むのは"
#: src/conflicts.c:629 src/conflicts.c:749
#, c-format
msgid " %-4s\t[reduce using rule %d (%s)]\n"
msgstr " %-4s\t[規則 %d を利用して還元 (%s)]\n"
#: src/conflicts.c:608 src/print.c:221
#: src/conflicts.c:640 src/print.c:222
#, c-format
msgid ""
" $default\treduce using rule %d (%s)\n"
@@ -102,12 +102,12 @@ msgstr ""
" $default\t規則 %d を利用して還元 (%s)\n"
"\n"
#: src/conflicts.c:694 src/conflicts.c:706
#: src/conflicts.c:729 src/conflicts.c:743
#, c-format
msgid " %-4s\treduce using rule %d (%s)\n"
msgstr " %-4s\t規則 %d を利用して還元 (%s)\n"
#: src/conflicts.c:732
#: src/conflicts.c:770
#, c-format
msgid " $default\treduce using rule %d (%s)\n"
msgstr " $default\t規則 %d を利用して還元 (%s)\n"
@@ -271,12 +271,12 @@ msgstr "set_nullable
msgid "maximum table size (%d) exceeded"
msgstr "最大テーブルサイズ (%s) を超えました"
#: src/print.c:88
#: src/print.c:84
#, c-format
msgid " type %d is %s\n"
msgstr " タイプ %d は %s です\n"
#: src/print.c:96
#: src/print.c:92
#, c-format
msgid ""
"\n"
@@ -289,26 +289,26 @@ msgstr ""
"状態 %d\n"
"\n"
#: src/print.c:140
#: src/print.c:137
#, c-format
msgid " (rule %d)"
msgstr " (規則 %d)"
#: src/print.c:167
#: src/print.c:164
msgid " $default\taccept\n"
msgstr " $default\taccept\n"
#: src/print.c:169
#: src/print.c:166
msgid " NO ACTIONS\n"
msgstr " 動作無し\n"
#. I.e. strcmp(tags[symbol],"$")==0
#: src/print.c:185
#: src/print.c:184
#, c-format
msgid " $ \tgo to state %d\n"
msgstr " $ \t状態 %d へ\n"
#: src/print.c:187
#: src/print.c:186
#, c-format
msgid " %-4s\tshift, and go to state %d\n"
msgstr " %-4s\tシフト、および状態 %d へ\n"
@@ -318,13 +318,13 @@ msgstr " %-4s\t
msgid " %-4s\terror (nonassociative)\n"
msgstr " %-4s\tエラー (非結合)\n"
#: src/print.c:236
#: src/print.c:238
#, c-format
msgid " %-4s\tgo to state %d\n"
msgstr " %-4s\t状態 %d へ\n"
#. rule # : LHS -> RHS
#: src/print.c:261
#: src/print.c:264
msgid ""
"\n"
"Grammar\n"
@@ -332,17 +332,17 @@ msgstr ""
"\n"
"文法\n"
#: src/print.c:266
#: src/print.c:269
#, c-format
msgid "rule %-4d %s ->"
msgstr "規則 %-4d %s ->"
#: src/print.c:272
#: src/print.c:275
msgid "\t\t/* empty */"
msgstr "\t\t/* 空 */"
#. TERMINAL (type #) : rule #s terminal is on RHS
#: src/print.c:277
#: src/print.c:280
msgid ""
"\n"
"Terminals, with rules where they appear\n"
@@ -352,7 +352,7 @@ msgstr ""
"終端トークン、およびそこに現れた規則\n"
"\n"
#: src/print.c:325
#: src/print.c:328
msgid ""
"\n"
"Nonterminals, with rules where they appear\n"
@@ -362,11 +362,11 @@ msgstr ""
"非終端トークン、およびそこに現れた規則\n"
"\n"
#: src/print.c:351
#: src/print.c:354
msgid " on left:"
msgstr " 左辺:"
#: src/print.c:366
#: src/print.c:369
msgid " on right:"
msgstr " 右辺:"

122
po/nl.po
View File

@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: bison 1.25\n"
"POT-Creation-Date: 2000-09-20 17:44+0200\n"
"POT-Creation-Date: 2000-09-21 10:30+0200\n"
"PO-Revision-Date: 1996-08-27 15:34 MET DST\n"
"Last-Translator: Erick Branderhorst <branderh@debian.org>\n"
"Language-Team: Dutch <nl@li.org>\n"
@@ -23,77 +23,77 @@ msgstr ""
msgid "%s: memory exhausted\n"
msgstr "%s: geen geheugen meer beschikbaar\n"
#: src/conflicts.c:198 src/conflicts.c:222
msgid "reduce"
msgstr "reduceer"
#: src/conflicts.c:204 src/conflicts.c:218
msgid "shift"
msgstr "verschuif"
#: src/conflicts.c:226
msgid "an error"
msgstr "een fout"
#: src/conflicts.c:298
#: src/conflicts.c:64
#, c-format
msgid "Conflict in state %d between rule %d and token %s resolved as %s.\n"
msgstr "Conflict in stadium %d tussen regel %d en teken %s opgelost als %s.\n"
#: src/conflicts.c:343
#, c-format
msgid "State %d contains"
msgstr "Stadium %d bevat"
#: src/conflicts.c:130 src/conflicts.c:153
msgid "reduce"
msgstr "reduceer"
#: src/conflicts.c:346 src/conflicts.c:391
msgid " 1 shift/reduce conflict"
msgstr " 1 verschuif/reduceer conflict"
#: src/conflicts.c:136 src/conflicts.c:149
msgid "shift"
msgstr "verschuif"
#: src/conflicts.c:348 src/conflicts.c:393
#, c-format
msgid " %d shift/reduce conflicts"
msgstr " %d verschuif/reduceer conflicten"
#: src/conflicts.c:351 src/conflicts.c:396
msgid " and"
msgstr " en"
#: src/conflicts.c:354 src/conflicts.c:399
msgid " 1 reduce/reduce conflict"
msgstr " 1 reduceer/reduceer conflict"
#: src/conflicts.c:356 src/conflicts.c:401
#, c-format
msgid " %d reduce/reduce conflicts"
msgstr " %d reduceer/reduceer conflicten"
#: src/conflicts.c:157
msgid "an error"
msgstr "een fout"
#. If invoked under the name `yacc', use the output format
#. specified by POSIX.
#: src/conflicts.c:377
#: src/conflicts.c:446
msgid "conflicts: "
msgstr "conflictueerd: "
#: src/conflicts.c:379
#: src/conflicts.c:448
#, c-format
msgid " %d shift/reduce"
msgstr " %d vershuif/reduceer"
#: src/conflicts.c:383
#: src/conflicts.c:452
#, c-format
msgid " %d reduce/reduce"
msgstr " %d reduceer/reduceer"
#: src/conflicts.c:388
#: src/conflicts.c:457
#, c-format
msgid "%s contains"
msgstr "%s bevat"
#: src/conflicts.c:597 src/conflicts.c:711
#: src/conflicts.c:460 src/conflicts.c:525
msgid " 1 shift/reduce conflict"
msgstr " 1 verschuif/reduceer conflict"
#: src/conflicts.c:462 src/conflicts.c:527
#, c-format
msgid " %d shift/reduce conflicts"
msgstr " %d verschuif/reduceer conflicten"
#: src/conflicts.c:465 src/conflicts.c:530
msgid " and"
msgstr " en"
#: src/conflicts.c:468 src/conflicts.c:533
msgid " 1 reduce/reduce conflict"
msgstr " 1 reduceer/reduceer conflict"
#: src/conflicts.c:470 src/conflicts.c:535
#, c-format
msgid " %d reduce/reduce conflicts"
msgstr " %d reduceer/reduceer conflicten"
#: src/conflicts.c:522
#, c-format
msgid "State %d contains"
msgstr "Stadium %d bevat"
#: src/conflicts.c:629 src/conflicts.c:749
#, c-format
msgid " %-4s\t[reduce using rule %d (%s)]\n"
msgstr " %-4s\t[reduceer gebruikt regel %d (%s)]\n"
#: src/conflicts.c:608 src/print.c:221
#: src/conflicts.c:640 src/print.c:222
#, c-format
msgid ""
" $default\treduce using rule %d (%s)\n"
@@ -102,12 +102,12 @@ msgstr ""
" $default\treduce using rule %d (%s)\n"
"\n"
#: src/conflicts.c:694 src/conflicts.c:706
#: src/conflicts.c:729 src/conflicts.c:743
#, c-format
msgid " %-4s\treduce using rule %d (%s)\n"
msgstr ""
#: src/conflicts.c:732
#: src/conflicts.c:770
#, c-format
msgid " $default\treduce using rule %d (%s)\n"
msgstr ""
@@ -271,12 +271,12 @@ msgstr "Inkomende set nullable"
msgid "maximum table size (%d) exceeded"
msgstr "maximale tabel grootte (%s) overschreden"
#: src/print.c:88
#: src/print.c:84
#, c-format
msgid " type %d is %s\n"
msgstr ""
#: src/print.c:96
#: src/print.c:92
#, c-format
msgid ""
"\n"
@@ -289,26 +289,26 @@ msgstr ""
"stadium %d\n"
"\n"
#: src/print.c:140
#: src/print.c:137
#, c-format
msgid " (rule %d)"
msgstr " (regel %d)"
#: src/print.c:167
#: src/print.c:164
msgid " $default\taccept\n"
msgstr ""
#: src/print.c:169
#: src/print.c:166
msgid " NO ACTIONS\n"
msgstr " GEEN AKTIES\n"
#. I.e. strcmp(tags[symbol],"$")==0
#: src/print.c:185
#: src/print.c:184
#, c-format
msgid " $ \tgo to state %d\n"
msgstr ""
#: src/print.c:187
#: src/print.c:186
#, c-format
msgid " %-4s\tshift, and go to state %d\n"
msgstr ""
@@ -318,13 +318,13 @@ msgstr ""
msgid " %-4s\terror (nonassociative)\n"
msgstr ""
#: src/print.c:236
#: src/print.c:238
#, c-format
msgid " %-4s\tgo to state %d\n"
msgstr ""
#. rule # : LHS -> RHS
#: src/print.c:261
#: src/print.c:264
msgid ""
"\n"
"Grammar\n"
@@ -332,17 +332,17 @@ msgstr ""
"\n"
"Grammatica\n"
#: src/print.c:266
#: src/print.c:269
#, c-format
msgid "rule %-4d %s ->"
msgstr "regel %-4d %s ->"
#: src/print.c:272
#: src/print.c:275
msgid "\t\t/* empty */"
msgstr ""
#. TERMINAL (type #) : rule #s terminal is on RHS
#: src/print.c:277
#: src/print.c:280
msgid ""
"\n"
"Terminals, with rules where they appear\n"
@@ -352,7 +352,7 @@ msgstr ""
"Terminals, met regels waar ze voorkomen\n"
"\n"
#: src/print.c:325
#: src/print.c:328
msgid ""
"\n"
"Nonterminals, with rules where they appear\n"
@@ -362,11 +362,11 @@ msgstr ""
"Geen terminals, met regels waar ze voorkomen\n"
"\n"
#: src/print.c:351
#: src/print.c:354
msgid " on left:"
msgstr " links:"
#: src/print.c:366
#: src/print.c:369
msgid " on right:"
msgstr " rechts:"

122
po/ru.po
View File

@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: bison 1.28a\n"
"POT-Creation-Date: 2000-09-20 17:44+0200\n"
"POT-Creation-Date: 2000-09-21 10:30+0200\n"
"PO-Revision-Date: 2000-04-12 13:16+04:00\n"
"Last-Translator: Dmitry S. Sivachenko <dima@Chg.RU>\n"
"Language-Team: Russian <ru@li.org>\n"
@@ -23,78 +23,78 @@ msgstr "
msgid "%s: memory exhausted\n"
msgstr "%s: ÐÁÍÑÔØ ÉÓÞÅÒÐÁÎÁ\n"
#: src/conflicts.c:198 src/conflicts.c:222
msgid "reduce"
msgstr "×Ù×ÏÄ"
#: src/conflicts.c:204 src/conflicts.c:218
msgid "shift"
msgstr "ÓÄ×ÉÇ"
#: src/conflicts.c:226
msgid "an error"
msgstr "ÏÛÉÂËÁ"
#: src/conflicts.c:298
#: src/conflicts.c:64
#, c-format
msgid "Conflict in state %d between rule %d and token %s resolved as %s.\n"
msgstr ""
"ëÏÎÆÌÉËÔ × ÓÏÓÔÏÑÎÉÉ %d ÍÅÖÄÕ ÐÒÁ×ÉÌÏÍ %d É ÌÅËÓÅÍÏÊ %s ÒÁÚÒÅÛÅÎ ËÁË %s.\n"
#: src/conflicts.c:343
#, c-format
msgid "State %d contains"
msgstr "óÏÓÔÏÑÎÉÅ %d ÓÏÄÅÒÖÉÔ"
#: src/conflicts.c:130 src/conflicts.c:153
msgid "reduce"
msgstr "×Ù×ÏÄ"
#: src/conflicts.c:346 src/conflicts.c:391
msgid " 1 shift/reduce conflict"
msgstr " 1 ËÏÎÆÌÉËÔ ÓÄ×ÉÇÁ/×Ù×ÏÄÁ"
#: src/conflicts.c:136 src/conflicts.c:149
msgid "shift"
msgstr "ÓÄ×ÉÇ"
#: src/conflicts.c:348 src/conflicts.c:393
#, c-format
msgid " %d shift/reduce conflicts"
msgstr " %d ËÏÎÆÌÉËÔÏ× ÓÄ×ÉÇÁ/×Ù×ÏÄÁ"
#: src/conflicts.c:351 src/conflicts.c:396
msgid " and"
msgstr " É"
#: src/conflicts.c:354 src/conflicts.c:399
msgid " 1 reduce/reduce conflict"
msgstr " 1 ËÏÎÆÌÉËÔ ×Ù×ÏÄÁ/×Ù×ÏÄÁ"
#: src/conflicts.c:356 src/conflicts.c:401
#, c-format
msgid " %d reduce/reduce conflicts"
msgstr " %d ËÏÎÆÌÉËÔÏ× ×Ù×ÏÄÁ/×Ù×ÏÄÁ"
#: src/conflicts.c:157
msgid "an error"
msgstr "ÏÛÉÂËÁ"
#. If invoked under the name `yacc', use the output format
#. specified by POSIX.
#: src/conflicts.c:377
#: src/conflicts.c:446
msgid "conflicts: "
msgstr "ËÏÎÆÌÉËÔÙ: "
#: src/conflicts.c:379
#: src/conflicts.c:448
#, c-format
msgid " %d shift/reduce"
msgstr " %d ÓÄ×ÉÇ/×Ù×ÏÄ"
#: src/conflicts.c:383
#: src/conflicts.c:452
#, c-format
msgid " %d reduce/reduce"
msgstr " %d ×Ù×ÏÄ/×Ù×ÏÄ"
#: src/conflicts.c:388
#: src/conflicts.c:457
#, c-format
msgid "%s contains"
msgstr "%s ÓÏÄÅÒÖÉÔ"
#: src/conflicts.c:597 src/conflicts.c:711
#: src/conflicts.c:460 src/conflicts.c:525
msgid " 1 shift/reduce conflict"
msgstr " 1 ËÏÎÆÌÉËÔ ÓÄ×ÉÇÁ/×Ù×ÏÄÁ"
#: src/conflicts.c:462 src/conflicts.c:527
#, c-format
msgid " %d shift/reduce conflicts"
msgstr " %d ËÏÎÆÌÉËÔÏ× ÓÄ×ÉÇÁ/×Ù×ÏÄÁ"
#: src/conflicts.c:465 src/conflicts.c:530
msgid " and"
msgstr " É"
#: src/conflicts.c:468 src/conflicts.c:533
msgid " 1 reduce/reduce conflict"
msgstr " 1 ËÏÎÆÌÉËÔ ×Ù×ÏÄÁ/×Ù×ÏÄÁ"
#: src/conflicts.c:470 src/conflicts.c:535
#, c-format
msgid " %d reduce/reduce conflicts"
msgstr " %d ËÏÎÆÌÉËÔÏ× ×Ù×ÏÄÁ/×Ù×ÏÄÁ"
#: src/conflicts.c:522
#, c-format
msgid "State %d contains"
msgstr "óÏÓÔÏÑÎÉÅ %d ÓÏÄÅÒÖÉÔ"
#: src/conflicts.c:629 src/conflicts.c:749
#, c-format
msgid " %-4s\t[reduce using rule %d (%s)]\n"
msgstr " %-4s\t[×Ù×ÏÄ Ó ÉÓÐÏÌØÚÏ×ÁÎÉÅÍ ÐÒÁ×ÉÌÁ %d (%s)]\n"
#: src/conflicts.c:608 src/print.c:221
#: src/conflicts.c:640 src/print.c:222
#, c-format
msgid ""
" $default\treduce using rule %d (%s)\n"
@@ -103,12 +103,12 @@ msgstr ""
" $default\t×Ù×ÏÄ Ó ÉÓÐÏÌØÚÏ×ÁÎÉÅÍ ÐÒÁ×ÉÌÁ %d (%s)\n"
"\n"
#: src/conflicts.c:694 src/conflicts.c:706
#: src/conflicts.c:729 src/conflicts.c:743
#, c-format
msgid " %-4s\treduce using rule %d (%s)\n"
msgstr " %-4s\t×Ù×ÏÄ Ó ÉÓÐÏÌØÚÏ×ÁÎÉÅÍ ÐÒÁ×ÉÌÁ %d (%s)\n"
#: src/conflicts.c:732
#: src/conflicts.c:770
#, c-format
msgid " $default\treduce using rule %d (%s)\n"
msgstr " $default\t×Ù×ÏÄ Ó ÉÓÐÏÌØÚÏ×ÁÎÉÅÍ ÐÒÁ×ÉÌÁ %d (%s)\n"
@@ -290,12 +290,12 @@ msgstr "
msgid "maximum table size (%d) exceeded"
msgstr "ÐÒÅ×ÙÛÅÎ ÍÁËÓÉÍÁÌØÎÙÊ ÒÁÚÍÅÒ ÔÁÂÌÉÃÙ (%d)"
#: src/print.c:88
#: src/print.c:84
#, c-format
msgid " type %d is %s\n"
msgstr " ÔÉÐ %d Ñ×ÌÑÅÔÓÑ %s\n"
#: src/print.c:96
#: src/print.c:92
#, c-format
msgid ""
"\n"
@@ -308,26 +308,26 @@ msgstr ""
"ÓÏÓÔÏÑÎÉÅ %d\n"
"\n"
#: src/print.c:140
#: src/print.c:137
#, c-format
msgid " (rule %d)"
msgstr " (ÐÒÁ×ÉÌÏ %d)"
#: src/print.c:167
#: src/print.c:164
msgid " $default\taccept\n"
msgstr " $default\tÐÒÉÎÑÔÉÅ\n"
#: src/print.c:169
#: src/print.c:166
msgid " NO ACTIONS\n"
msgstr " îåô äåêóô÷éê\n"
#. I.e. strcmp(tags[symbol],"$")==0
#: src/print.c:185
#: src/print.c:184
#, c-format
msgid " $ \tgo to state %d\n"
msgstr " $ \tÐÅÒÅÈÏÄ × ÓÏÓÔÏÑÎÉÅ %d\n"
#: src/print.c:187
#: src/print.c:186
#, c-format
msgid " %-4s\tshift, and go to state %d\n"
msgstr " %-4s\tÓÄ×ÉÇ, É ÐÅÒÅÈÏÄ × ÓÏÓÔÏÑÎÉÅ %d\n"
@@ -337,13 +337,13 @@ msgstr " %-4s\t
msgid " %-4s\terror (nonassociative)\n"
msgstr " %-4s\tÏÛÉÂËÁ (ÎÅÁÓÓÏÃÉÁÔÉ×ÎÁÑ)\n"
#: src/print.c:236
#: src/print.c:238
#, c-format
msgid " %-4s\tgo to state %d\n"
msgstr " %-4s\tÐÅÒÅÈÏÄ × ÓÏÓÔÏÑÎÉÅ %d\n"
#. rule # : LHS -> RHS
#: src/print.c:261
#: src/print.c:264
msgid ""
"\n"
"Grammar\n"
@@ -351,17 +351,17 @@ msgstr ""
"\n"
"çÒÁÍÍÁÔÉËÁ\n"
#: src/print.c:266
#: src/print.c:269
#, c-format
msgid "rule %-4d %s ->"
msgstr "ÐÒÁ×ÉÌÏ %-4d %s ->"
#: src/print.c:272
#: src/print.c:275
msgid "\t\t/* empty */"
msgstr "\t\t/* ÐÕÓÔÏ */"
#. TERMINAL (type #) : rule #s terminal is on RHS
#: src/print.c:277
#: src/print.c:280
msgid ""
"\n"
"Terminals, with rules where they appear\n"
@@ -371,7 +371,7 @@ msgstr ""
"ôÅÒÍÉÎÁÌØÎÙÅ ÓÉÍ×ÏÌÙ Ó ÐÒÁ×ÉÌÁÍÉ, × ËÏÔÏÒÙÈ ÏÎÉ ÐÏÑ×ÌÑÀÔÓÑ\n"
"\n"
#: src/print.c:325
#: src/print.c:328
msgid ""
"\n"
"Nonterminals, with rules where they appear\n"
@@ -381,11 +381,11 @@ msgstr ""
"îÅÔÅÒÍÉÎÁÌØÎÙÅ ÓÉÍ×ÏÌÙ Ó ÐÒÁ×ÉÌÁÍÉ, × ËÏÔÏÒÙÈ ÏÎÉ ÐÏÑ×ÌÑÀÔÓÑ\n"
"\n"
#: src/print.c:351
#: src/print.c:354
msgid " on left:"
msgstr " ÎÁÌÅ×Ï:"
#: src/print.c:366
#: src/print.c:369
msgid " on right:"
msgstr " ÎÁÐÒÁ×Ï:"

49
src/closure.h Normal file
View File

@@ -0,0 +1,49 @@
/* Subroutines for bison
Copyright (C) 1984, 1989, 2000 Free Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler.
Bison is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
Bison is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with Bison; see the file COPYING. If not, write to the Free
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA. */
/* Subroutines of file LR0.c. */
/* Allocates the itemset and ruleset vectors, and precomputes useful
data so that closure can be called. n is the number of elements to
allocate for itemset. */
void new_closure PARAMS ((int n));
/* Given a vector of item numbers ITEMS, of length N, set up ruleset
and itemset to indicate what rules could be run and which items
could be accepted when those items are the active ones.
ruleset contains a bit for each rule. closure sets the bits for
all rules which could potentially describe the next input to be
read.
itemset is a vector of item numbers; itemsetend points to just
beyond the end of the part of it that is significant. closure
places there the indices of all items which represent units of
input that could arrive next. */
void closure PARAMS ((short *items, int n));
/* Frees itemset, ruleset and internal data. */
void free_closure PARAMS ((void));

View File

@@ -36,19 +36,11 @@ extern short *LAruleno;
extern short *lookaheads;
extern int fixed_outfiles;
extern void initialize_conflicts PARAMS((void));
extern void conflict_log PARAMS((void));
extern void verbose_conflict_log PARAMS((void));
extern void print_reductions PARAMS((int));
extern void finalize_conflicts PARAMS((void));
static void set_conflicts PARAMS((int));
static void resolve_sr_conflict PARAMS((int, int));
static void flush_shift PARAMS((int, int));
static void log_resolution PARAMS((int, int, int, char *));
static void total_conflicts PARAMS((void));
static void count_sr_conflicts PARAMS((int));
static void count_rr_conflicts PARAMS((int));
extern void initialize_conflicts PARAMS ((void));
extern void conflict_log PARAMS ((void));
extern void verbose_conflict_log PARAMS ((void));
extern void print_reductions PARAMS ((int));
extern void finalize_conflicts PARAMS ((void));
char any_conflicts;
errs **err_table;
@@ -62,40 +54,164 @@ static int src_total;
static int rrc_total;
static int src_count;
static int rrc_count;
void
initialize_conflicts (void)
static inline void
log_resolution (int state, int LAno, int token, char *resolution)
{
register int i;
/* register errs *sp; JF unused */
if (verboseflag)
fprintf (foutput,
_("\
Conflict in state %d between rule %d and token %s resolved as %s.\n"),
state, LAruleno[LAno], tags[token], resolution);
}
conflicts = NEW2(nstates, char);
shiftset = NEW2(tokensetsize, unsigned);
lookaheadset = NEW2(tokensetsize, unsigned);
err_table = NEW2(nstates, errs *);
/*------------------------------------------------------------------.
| Turn off the shift recorded for the specified token in the |
| specified state. Used when we resolve a shift-reduce conflict in |
| favor of the reduction. |
`------------------------------------------------------------------*/
any_conflicts = 0;
static void
flush_shift (int state, int token)
{
shifts *shiftp;
int k, i;
for (i = 0; i < nstates; i++)
set_conflicts(i);
shiftp = shift_table[state];
if (shiftp)
{
k = shiftp->nshifts;
for (i = 0; i < k; i++)
{
if (shiftp->shifts[i]
&& token == accessing_symbol[shiftp->shifts[i]])
(shiftp->shifts[i]) = 0;
}
}
}
/*------------------------------------------------------------------.
| Attempt to resolve shift-reduce conflict for one rule by means of |
| precedence declarations. It has already been checked that the |
| rule has a precedence. A conflict is resolved by modifying the |
| shift or reduce tables so that there is no longer a conflict. |
`------------------------------------------------------------------*/
static void
resolve_sr_conflict (int state, int lookaheadnum)
{
int i;
int mask;
unsigned *fp1;
unsigned *fp2;
int redprec;
errs *errp = (errs *) xmalloc (sizeof (errs) + ntokens * sizeof (short));
short *errtokens = errp->errs;
/* find the rule to reduce by to get precedence of reduction */
redprec = rprec[LAruleno[lookaheadnum]];
mask = 1;
fp1 = LA + lookaheadnum * tokensetsize;
fp2 = lookaheadset;
for (i = 0; i < ntokens; i++)
{
if ((mask & *fp2 & *fp1) && sprec[i])
/* Shift-reduce conflict occurs for token number i
and it has a precedence.
The precedence of shifting is that of token i. */
{
if (sprec[i] < redprec)
{
log_resolution (state, lookaheadnum, i, _("reduce"));
*fp2 &= ~mask; /* flush the shift for this token */
flush_shift (state, i);
}
else if (sprec[i] > redprec)
{
log_resolution (state, lookaheadnum, i, _("shift"));
*fp1 &= ~mask; /* flush the reduce for this token */
}
else
{
/* Matching precedence levels.
For left association, keep only the reduction.
For right association, keep only the shift.
For nonassociation, keep neither. */
switch (sassoc[i])
{
case RIGHT_ASSOC:
log_resolution (state, lookaheadnum, i, _("shift"));
break;
case LEFT_ASSOC:
log_resolution (state, lookaheadnum, i, _("reduce"));
break;
case NON_ASSOC:
log_resolution (state, lookaheadnum, i, _("an error"));
break;
}
if (sassoc[i] != RIGHT_ASSOC)
{
*fp2 &= ~mask; /* flush the shift for this token */
flush_shift (state, i);
}
if (sassoc[i] != LEFT_ASSOC)
{
*fp1 &= ~mask; /* flush the reduce for this token */
}
if (sassoc[i] == NON_ASSOC)
{
/* Record an explicit error for this token. */
*errtokens++ = i;
}
}
}
mask <<= 1;
if (mask == 0)
{
mask = 1;
fp2++;
fp1++;
}
}
errp->nerrs = errtokens - errp->errs;
if (errp->nerrs)
{
/* Some tokens have been explicitly made errors. Allocate
a permanent errs structure for this state, to record them. */
i = (char *) errtokens - (char *) errp;
err_table[state] = (errs *) xmalloc ((unsigned int) i);
bcopy (errp, err_table[state], i);
}
else
err_table[state] = 0;
free (errp);
}
static void
set_conflicts (int state)
{
register int i;
register int k;
register shifts *shiftp;
register unsigned *fp2;
register unsigned *fp3;
register unsigned *fp4;
register unsigned *fp1;
register int symbol;
int i;
int k;
shifts *shiftp;
unsigned *fp2;
unsigned *fp3;
unsigned *fp4;
unsigned *fp1;
int symbol;
if (consistent[state]) return;
if (consistent[state])
return;
for (i = 0; i < tokensetsize; i++)
lookaheadset[i] = 0;
@@ -107,17 +223,18 @@ set_conflicts (int state)
for (i = 0; i < k; i++)
{
symbol = accessing_symbol[shiftp->shifts[i]];
if (ISVAR(symbol)) break;
SETBIT(lookaheadset, symbol);
if (ISVAR (symbol))
break;
SETBIT (lookaheadset, symbol);
}
}
k = lookaheads[state + 1];
fp4 = lookaheadset + tokensetsize;
/* loop over all rules which require lookahead in this state */
/* first check for shift-reduce conflict, and try to resolve using precedence */
/* Loop over all rules which require lookahead in this state. First
check for shift-reduce conflict, and try to resolve using
precedence */
for (i = lookaheads[state]; i < k; i++)
if (rprec[LAruleno[i]])
{
@@ -129,15 +246,15 @@ set_conflicts (int state)
{
if (*fp2++ & *fp3++)
{
resolve_sr_conflict(state, i);
resolve_sr_conflict (state, i);
break;
}
}
}
/* loop over all rules which require lookahead in this state */
/* Check for conflicts not resolved above. */
/* Loop over all rules which require lookahead in this state. Check
for conflicts not resolved above. */
for (i = lookaheads[state]; i < k; i++)
{
fp1 = LA + i * tokensetsize;
@@ -161,267 +278,53 @@ set_conflicts (int state)
}
}
/* Attempt to resolve shift-reduce conflict for one rule
by means of precedence declarations.
It has already been checked that the rule has a precedence.
A conflict is resolved by modifying the shift or reduce tables
so that there is no longer a conflict. */
static void
resolve_sr_conflict (int state, int lookaheadnum)
{
register int i;
register int mask;
register unsigned *fp1;
register unsigned *fp2;
register int redprec;
errs *errp = (errs *) xmalloc (sizeof(errs) + ntokens * sizeof(short));
short *errtokens = errp->errs;
/* find the rule to reduce by to get precedence of reduction */
redprec = rprec[LAruleno[lookaheadnum]];
mask = 1;
fp1 = LA + lookaheadnum * tokensetsize;
fp2 = lookaheadset;
for (i = 0; i < ntokens; i++)
{
if ((mask & *fp2 & *fp1) && sprec[i])
/* Shift-reduce conflict occurs for token number i
and it has a precedence.
The precedence of shifting is that of token i. */
{
if (sprec[i] < redprec)
{
if (verboseflag) log_resolution(state, lookaheadnum, i, _("reduce"));
*fp2 &= ~mask; /* flush the shift for this token */
flush_shift(state, i);
}
else if (sprec[i] > redprec)
{
if (verboseflag) log_resolution(state, lookaheadnum, i, _("shift"));
*fp1 &= ~mask; /* flush the reduce for this token */
}
else
{
/* Matching precedence levels.
For left association, keep only the reduction.
For right association, keep only the shift.
For nonassociation, keep neither. */
switch (sassoc[i])
{
case RIGHT_ASSOC:
if (verboseflag) log_resolution(state, lookaheadnum, i, _("shift"));
break;
case LEFT_ASSOC:
if (verboseflag) log_resolution(state, lookaheadnum, i, _("reduce"));
break;
case NON_ASSOC:
if (verboseflag) log_resolution(state, lookaheadnum, i, _("an error"));
break;
}
if (sassoc[i] != RIGHT_ASSOC)
{
*fp2 &= ~mask; /* flush the shift for this token */
flush_shift(state, i);
}
if (sassoc[i] != LEFT_ASSOC)
{
*fp1 &= ~mask; /* flush the reduce for this token */
}
if (sassoc[i] == NON_ASSOC)
{
/* Record an explicit error for this token. */
*errtokens++ = i;
}
}
}
mask <<= 1;
if (mask == 0)
{
mask = 1;
fp2++; fp1++;
}
}
errp->nerrs = errtokens - errp->errs;
if (errp->nerrs)
{
/* Some tokens have been explicitly made errors. Allocate
a permanent errs structure for this state, to record them. */
i = (char *) errtokens - (char *) errp;
err_table[state] = (errs *) xmalloc ((unsigned int)i);
bcopy (errp, err_table[state], i);
}
else
err_table[state] = 0;
free(errp);
}
/* turn off the shift recorded for the specified token in the specified state.
Used when we resolve a shift-reduce conflict in favor of the reduction. */
static void
flush_shift (int state, int token)
{
register shifts *shiftp;
register int k, i;
/* register unsigned symbol; JF unused */
shiftp = shift_table[state];
if (shiftp)
{
k = shiftp->nshifts;
for (i = 0; i < k; i++)
{
if (shiftp->shifts[i] && token == accessing_symbol[shiftp->shifts[i]])
(shiftp->shifts[i]) = 0;
}
}
}
static void
log_resolution (int state, int LAno, int token, char *resolution)
{
fprintf(foutput,
_("Conflict in state %d between rule %d and token %s resolved as %s.\n"),
state, LAruleno[LAno], tags[token], resolution);
}
void
conflict_log (void)
initialize_conflicts (void)
{
register int i;
int i;
/* errs *sp; JF unused */
src_total = 0;
rrc_total = 0;
conflicts = NEW2 (nstates, char);
shiftset = NEW2 (tokensetsize, unsigned);
lookaheadset = NEW2 (tokensetsize, unsigned);
err_table = NEW2 (nstates, errs *);
any_conflicts = 0;
for (i = 0; i < nstates; i++)
{
if (conflicts[i])
{
count_sr_conflicts(i);
count_rr_conflicts(i);
src_total += src_count;
rrc_total += rrc_count;
}
}
total_conflicts();
set_conflicts (i);
}
void
verbose_conflict_log (void)
{
register int i;
src_total = 0;
rrc_total = 0;
for (i = 0; i < nstates; i++)
{
if (conflicts[i])
{
count_sr_conflicts(i);
count_rr_conflicts(i);
src_total += src_count;
rrc_total += rrc_count;
fprintf(foutput, _("State %d contains"), i);
if (src_count == 1)
fprintf(foutput, _(" 1 shift/reduce conflict"));
else if (src_count > 1)
fprintf(foutput, _(" %d shift/reduce conflicts"), src_count);
if (src_count > 0 && rrc_count > 0)
fprintf(foutput, _(" and"));
if (rrc_count == 1)
fprintf(foutput, _(" 1 reduce/reduce conflict"));
else if (rrc_count > 1)
fprintf(foutput, _(" %d reduce/reduce conflicts"), rrc_count);
putc('.', foutput);
putc('\n', foutput);
}
}
total_conflicts();
}
static void
total_conflicts (void)
{
if (src_total == expected_conflicts && rrc_total == 0)
return;
if (fixed_outfiles)
{
/* If invoked under the name `yacc', use the output format
specified by POSIX. */
fprintf(stderr, _("conflicts: "));
if (src_total > 0)
fprintf(stderr, _(" %d shift/reduce"), src_total);
if (src_total > 0 && rrc_total > 0)
fprintf(stderr, ",");
if (rrc_total > 0)
fprintf(stderr, _(" %d reduce/reduce"), rrc_total);
putc('\n', stderr);
}
else
{
fprintf(stderr, _("%s contains"), infile);
if (src_total == 1)
fprintf(stderr, _(" 1 shift/reduce conflict"));
else if (src_total > 1)
fprintf(stderr, _(" %d shift/reduce conflicts"), src_total);
if (src_total > 0 && rrc_total > 0)
fprintf(stderr, _(" and"));
if (rrc_total == 1)
fprintf(stderr, _(" 1 reduce/reduce conflict"));
else if (rrc_total > 1)
fprintf(stderr, _(" %d reduce/reduce conflicts"), rrc_total);
putc('.', stderr);
putc('\n', stderr);
}
}
/*---------------------------------------------.
| Count the number of shift/reduce conflicts. |
`---------------------------------------------*/
static void
count_sr_conflicts (int state)
{
register int i;
register int k;
register int mask;
register shifts *shiftp;
register unsigned *fp1;
register unsigned *fp2;
register unsigned *fp3;
register int symbol;
int i;
int k;
int mask;
shifts *shiftp;
unsigned *fp1;
unsigned *fp2;
unsigned *fp3;
int symbol;
src_count = 0;
shiftp = shift_table[state];
if (!shiftp) return;
if (!shiftp)
return;
for (i = 0; i < tokensetsize; i++)
{
@@ -432,10 +335,12 @@ count_sr_conflicts (int state)
k = shiftp->nshifts;
for (i = 0; i < k; i++)
{
if (! shiftp->shifts[i]) continue;
if (!shiftp->shifts[i])
continue;
symbol = accessing_symbol[shiftp->shifts[i]];
if (ISVAR(symbol)) break;
SETBIT(shiftset, symbol);
if (ISVAR (symbol))
break;
SETBIT (shiftset, symbol);
}
k = lookaheads[state + 1];
@@ -473,24 +378,29 @@ count_sr_conflicts (int state)
}
/*----------------------------------------------.
| Count the number of reduce/reduce conflicts. |
`----------------------------------------------*/
static void
count_rr_conflicts (int state)
{
register int i;
register int j;
register int count;
register unsigned mask;
register unsigned *baseword;
register unsigned *wordp;
register int m;
register int n;
int i;
int j;
int count;
unsigned mask;
unsigned *baseword;
unsigned *wordp;
int m;
int n;
rrc_count = 0;
m = lookaheads[state];
n = lookaheads[state + 1];
if (n - m < 2) return;
if (n - m < 2)
return;
mask = 1;
baseword = LA + m * tokensetsize;
@@ -507,7 +417,8 @@ count_rr_conflicts (int state)
wordp += tokensetsize;
}
if (count >= 2) rrc_count++;
if (count >= 2)
rrc_count++;
mask <<= 1;
if (mask == 0)
@@ -518,28 +429,145 @@ count_rr_conflicts (int state)
}
}
/*------------------------------------.
| Give a report about the conflicts. |
`------------------------------------*/
static void
total_conflicts (void)
{
if (src_total == expected_conflicts && rrc_total == 0)
return;
if (fixed_outfiles)
{
/* If invoked under the name `yacc', use the output format
specified by POSIX. */
fprintf (stderr, _("conflicts: "));
if (src_total > 0)
fprintf (stderr, _(" %d shift/reduce"), src_total);
if (src_total > 0 && rrc_total > 0)
fprintf (stderr, ",");
if (rrc_total > 0)
fprintf (stderr, _(" %d reduce/reduce"), rrc_total);
putc ('\n', stderr);
}
else
{
fprintf (stderr, _("%s contains"), infile);
if (src_total == 1)
fprintf (stderr, _(" 1 shift/reduce conflict"));
else if (src_total > 1)
fprintf (stderr, _(" %d shift/reduce conflicts"), src_total);
if (src_total > 0 && rrc_total > 0)
fprintf (stderr, _(" and"));
if (rrc_total == 1)
fprintf (stderr, _(" 1 reduce/reduce conflict"));
else if (rrc_total > 1)
fprintf (stderr, _(" %d reduce/reduce conflicts"), rrc_total);
putc ('.', stderr);
putc ('\n', stderr);
}
}
/*---------------------------------------------.
| Compute and give a report on the conflicts. |
`---------------------------------------------*/
void
conflict_log (void)
{
int i;
src_total = 0;
rrc_total = 0;
for (i = 0; i < nstates; i++)
{
if (conflicts[i])
{
count_sr_conflicts (i);
count_rr_conflicts (i);
src_total += src_count;
rrc_total += rrc_count;
}
}
total_conflicts ();
}
void
verbose_conflict_log (void)
{
int i;
src_total = 0;
rrc_total = 0;
for (i = 0; i < nstates; i++)
{
if (conflicts[i])
{
count_sr_conflicts (i);
count_rr_conflicts (i);
src_total += src_count;
rrc_total += rrc_count;
fprintf (foutput, _("State %d contains"), i);
if (src_count == 1)
fprintf (foutput, _(" 1 shift/reduce conflict"));
else if (src_count > 1)
fprintf (foutput, _(" %d shift/reduce conflicts"), src_count);
if (src_count > 0 && rrc_count > 0)
fprintf (foutput, _(" and"));
if (rrc_count == 1)
fprintf (foutput, _(" 1 reduce/reduce conflict"));
else if (rrc_count > 1)
fprintf (foutput, _(" %d reduce/reduce conflicts"), rrc_count);
putc ('.', foutput);
putc ('\n', foutput);
}
}
total_conflicts ();
}
void
print_reductions (int state)
{
register int i;
register int j;
register int k;
register unsigned *fp1;
register unsigned *fp2;
register unsigned *fp3;
register unsigned *fp4;
register int rule;
register int symbol;
register unsigned mask;
register int m;
register int n;
register int default_LA;
register int default_rule = 0;
register int cmax;
register int count;
register shifts *shiftp;
register errs *errp;
int i;
int j;
int k;
unsigned *fp1;
unsigned *fp2;
unsigned *fp3;
unsigned *fp4;
int rule;
int symbol;
unsigned mask;
int m;
int n;
int default_LA;
int default_rule = 0;
int cmax;
int count;
shifts *shiftp;
errs *errp;
int nodefault = 0;
for (i = 0; i < tokensetsize; i++)
@@ -551,13 +579,16 @@ print_reductions (int state)
k = shiftp->nshifts;
for (i = 0; i < k; i++)
{
if (! shiftp->shifts[i]) continue;
if (!shiftp->shifts[i])
continue;
symbol = accessing_symbol[shiftp->shifts[i]];
if (ISVAR(symbol)) break;
if (ISVAR (symbol))
break;
/* if this state has a shift for the error token,
don't use a default rule. */
if (symbol == error_token_number) nodefault = 1;
SETBIT(shiftset, symbol);
if (symbol == error_token_number)
nodefault = 1;
SETBIT (shiftset, symbol);
}
}
@@ -567,16 +598,17 @@ print_reductions (int state)
k = errp->nerrs;
for (i = 0; i < k; i++)
{
if (! errp->errs[i]) continue;
if (!errp->errs[i])
continue;
symbol = errp->errs[i];
SETBIT(shiftset, symbol);
SETBIT (shiftset, symbol);
}
}
m = lookaheads[state];
n = lookaheads[state + 1];
if (n - m == 1 && ! nodefault)
if (n - m == 1 && !nodefault)
{
default_rule = LAruleno[m];
@@ -594,8 +626,8 @@ print_reductions (int state)
for (i = 0; i < ntokens; i++)
{
if (mask & *fp3)
fprintf(foutput, _(" %-4s\t[reduce using rule %d (%s)]\n"),
tags[i], default_rule, tags[rlhs[default_rule]]);
fprintf (foutput, _(" %-4s\t[reduce using rule %d (%s)]\n"),
tags[i], default_rule, tags[rlhs[default_rule]]);
mask <<= 1;
if (mask == 0)
@@ -605,8 +637,8 @@ print_reductions (int state)
}
}
fprintf(foutput, _(" $default\treduce using rule %d (%s)\n\n"),
default_rule, tags[rlhs[default_rule]]);
fprintf (foutput, _(" $default\treduce using rule %d (%s)\n\n"),
default_rule, tags[rlhs[default_rule]]);
}
else if (n - m >= 1)
{
@@ -614,7 +646,7 @@ print_reductions (int state)
default_LA = -1;
fp4 = lookaheadset + tokensetsize;
if (! nodefault)
if (!nodefault)
for (i = m; i < n; i++)
{
fp1 = LA + i * tokensetsize;
@@ -655,19 +687,21 @@ print_reductions (int state)
}
for (i = 0; i < tokensetsize; i++)
shiftset[i] = 0;
shiftset[i] = 0;
if (shiftp)
{
k = shiftp->nshifts;
for (i = 0; i < k; i++)
{
k = shiftp->nshifts;
for (i = 0; i < k; i++)
{
if (! shiftp->shifts[i]) continue;
if (!shiftp->shifts[i])
continue;
symbol = accessing_symbol[shiftp->shifts[i]];
if (ISVAR(symbol)) break;
SETBIT(shiftset, symbol);
if (ISVAR (symbol))
break;
SETBIT (shiftset, symbol);
}
}
}
mask = 1;
fp1 = LA + m * tokensetsize;
@@ -691,10 +725,12 @@ print_reductions (int state)
if (j != default_LA)
{
rule = LAruleno[j];
fprintf(foutput, _(" %-4s\treduce using rule %d (%s)\n"),
tags[i], rule, tags[rlhs[rule]]);
fprintf (foutput,
_(" %-4s\treduce using rule %d (%s)\n"),
tags[i], rule, tags[rlhs[rule]]);
}
else defaulted = 1;
else
defaulted = 1;
count++;
}
@@ -703,13 +739,15 @@ print_reductions (int state)
if (defaulted)
{
rule = LAruleno[default_LA];
fprintf(foutput, _(" %-4s\treduce using rule %d (%s)\n"),
tags[i], rule, tags[rlhs[rule]]);
fprintf (foutput,
_(" %-4s\treduce using rule %d (%s)\n"),
tags[i], rule, tags[rlhs[rule]]);
defaulted = 0;
}
rule = LAruleno[j];
fprintf(foutput, _(" %-4s\t[reduce using rule %d (%s)]\n"),
tags[i], rule, tags[rlhs[rule]]);
fprintf (foutput,
_(" %-4s\t[reduce using rule %d (%s)]\n"),
tags[i], rule, tags[rlhs[rule]]);
}
}
@@ -721,7 +759,7 @@ print_reductions (int state)
{
mask = 1;
/* We tried incrementing just fp1, and just fp2; both seem wrong.
It seems necessary to increment both in sync. */
It seems necessary to increment both in sync. */
fp1++;
fp2++;
}
@@ -729,11 +767,11 @@ print_reductions (int state)
if (default_LA >= 0)
{
fprintf(foutput, _(" $default\treduce using rule %d (%s)\n"),
default_rule, tags[rlhs[default_rule]]);
fprintf (foutput, _(" $default\treduce using rule %d (%s)\n"),
default_rule, tags[rlhs[default_rule]]);
}
putc('\n', foutput);
putc ('\n', foutput);
}
}
@@ -741,7 +779,7 @@ print_reductions (int state)
void
finalize_conflicts (void)
{
FREE(conflicts);
FREE(shiftset);
FREE(lookaheadset);
FREE (conflicts);
FREE (shiftset);
FREE (lookaheadset);
}

View File

@@ -1,22 +1,22 @@
/* Print information on generated parser, for bison,
Copyright (C) 1984, 1986, 1989 Free Software Foundation, Inc.
Copyright (C) 1984, 1986, 1989, 2000 Free Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler.
This file is part of Bison, the GNU Compiler Compiler.
Bison is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
Bison is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
Bison is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
Bison is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Bison; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
You should have received a copy of the GNU General Public License
along with Bison; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include "system.h"
@@ -38,54 +38,50 @@ extern char any_conflicts;
extern char *conflicts;
extern int final_state;
extern void conflict_log PARAMS((void));
extern void verbose_conflict_log PARAMS((void));
extern void print_reductions PARAMS((int));
extern void conflict_log PARAMS ((void));
extern void verbose_conflict_log PARAMS ((void));
extern void print_reductions PARAMS ((int));
extern void terse PARAMS((void));
extern void verbose PARAMS((void));
extern void terse PARAMS ((void));
extern void verbose PARAMS ((void));
#if 0 /* XXX currently unused. */
static void print_token PARAMS((int, int));
#if 0 /* XXX currently unused. */
static void print_token PARAMS ((int, int));
#endif
static void print_state PARAMS((int));
static void print_core PARAMS((int));
static void print_actions PARAMS((int));
static void print_grammar PARAMS((void));
static void print_state PARAMS ((int));
static void print_core PARAMS ((int));
static void print_actions PARAMS ((int));
static void print_grammar PARAMS ((void));
void
terse (void)
{
if (any_conflicts)
{
conflict_log();
}
conflict_log ();
}
void
verbose (void)
{
register int i;
int i;
if (any_conflicts)
verbose_conflict_log();
verbose_conflict_log ();
print_grammar();
print_grammar ();
for (i = 0; i < nstates; i++)
{
print_state(i);
}
print_state (i);
}
#if 0 /* XXX currently unused. */
#if 0 /* XXX currently unused. */
static void
print_token (int extnum, int token)
{
fprintf(foutput, _(" type %d is %s\n"), extnum, tags[token]);
fprintf (foutput, _(" type %d is %s\n"), extnum, tags[token]);
}
#endif
@@ -93,26 +89,27 @@ print_token (int extnum, int token)
static void
print_state (int state)
{
fprintf(foutput, _("\n\nstate %d\n\n"), state);
print_core(state);
print_actions(state);
fprintf (foutput, _("\n\nstate %d\n\n"), state);
print_core (state);
print_actions (state);
}
static void
print_core (int state)
{
register int i;
register int k;
register int rule;
register core *statep;
register short *sp;
register short *sp1;
int i;
int k;
int rule;
core *statep;
short *sp;
short *sp1;
statep = state_table[state];
k = statep->nitems;
if (k == 0) return;
if (k == 0)
return;
for (i = 0; i < k; i++)
{
@@ -122,40 +119,40 @@ print_core (int state)
sp++;
rule = -(*sp);
fprintf(foutput, " %s -> ", tags[rlhs[rule]]);
fprintf (foutput, " %s -> ", tags[rlhs[rule]]);
for (sp = ritem + rrhs[rule]; sp < sp1; sp++)
{
fprintf(foutput, "%s ", tags[*sp]);
fprintf (foutput, "%s ", tags[*sp]);
}
putc('.', foutput);
putc ('.', foutput);
while (*sp > 0)
{
fprintf(foutput, " %s", tags[*sp]);
fprintf (foutput, " %s", tags[*sp]);
sp++;
}
fprintf (foutput, _(" (rule %d)"), rule);
putc('\n', foutput);
putc ('\n', foutput);
}
putc('\n', foutput);
putc ('\n', foutput);
}
static void
print_actions (int state)
{
register int i;
register int k;
register int state1;
register int symbol;
register shifts *shiftp;
register errs *errp;
register reductions *redp;
register int rule;
int i;
int k;
int state1;
int symbol;
shifts *shiftp;
errs *errp;
reductions *redp;
int rule;
shiftp = shift_table[state];
redp = reduction_table[state];
@@ -164,9 +161,9 @@ print_actions (int state)
if (!shiftp && !redp)
{
if (final_state == state)
fprintf(foutput, _(" $default\taccept\n"));
fprintf (foutput, _(" $default\taccept\n"));
else
fprintf(foutput, _(" NO ACTIONS\n"));
fprintf (foutput, _(" NO ACTIONS\n"));
return;
}
@@ -176,20 +173,22 @@ print_actions (int state)
for (i = 0; i < k; i++)
{
if (! shiftp->shifts[i]) continue;
if (!shiftp->shifts[i])
continue;
state1 = shiftp->shifts[i];
symbol = accessing_symbol[state1];
/* The following line used to be turned off. */
if (ISVAR(symbol)) break;
if (symbol==0) /* I.e. strcmp(tags[symbol],"$")==0 */
fprintf(foutput, _(" $ \tgo to state %d\n"), state1);
else
fprintf(foutput, _(" %-4s\tshift, and go to state %d\n"),
tags[symbol], state1);
if (ISVAR (symbol))
break;
if (symbol == 0) /* I.e. strcmp(tags[symbol],"$")==0 */
fprintf (foutput, _(" $ \tgo to state %d\n"), state1);
else
fprintf (foutput, _(" %-4s\tshift, and go to state %d\n"),
tags[symbol], state1);
}
if (i > 0)
putc('\n', foutput);
putc ('\n', foutput);
}
else
{
@@ -205,38 +204,42 @@ print_actions (int state)
for (j = 0; j < nerrs; j++)
{
if (! errp->errs[j]) continue;
if (!errp->errs[j])
continue;
symbol = errp->errs[j];
fprintf(foutput, _(" %-4s\terror (nonassociative)\n"), tags[symbol]);
fprintf (foutput, _(" %-4s\terror (nonassociative)\n"),
tags[symbol]);
}
if (j > 0)
putc('\n', foutput);
putc ('\n', foutput);
}
if (consistent[state] && redp)
{
rule = redp->rules[0];
symbol = rlhs[rule];
fprintf(foutput, _(" $default\treduce using rule %d (%s)\n\n"),
rule, tags[symbol]);
fprintf (foutput, _(" $default\treduce using rule %d (%s)\n\n"),
rule, tags[symbol]);
}
else if (redp)
{
print_reductions(state);
print_reductions (state);
}
if (i < k)
{
for (; i < k; i++)
{
if (! shiftp->shifts[i]) continue;
if (!shiftp->shifts[i])
continue;
state1 = shiftp->shifts[i];
symbol = accessing_symbol[state1];
fprintf(foutput, _(" %-4s\tgo to state %d\n"), tags[symbol], state1);
fprintf (foutput, _(" %-4s\tgo to state %d\n"), tags[symbol],
state1);
}
putc('\n', foutput);
putc ('\n', foutput);
}
}
@@ -253,29 +256,29 @@ static void
print_grammar (void)
{
int i, j;
short* rule;
short *rule;
char buffer[90];
int column = 0;
/* rule # : LHS -> RHS */
fputs(_("\nGrammar\n"), foutput);
fputs (_("\nGrammar\n"), foutput);
for (i = 1; i <= nrules; i++)
/* Don't print rules disabled in reduce_grammar_tables. */
if (rlhs[i] >= 0)
{
fprintf(foutput, _("rule %-4d %s ->"), i, tags[rlhs[i]]);
fprintf (foutput, _("rule %-4d %s ->"), i, tags[rlhs[i]]);
rule = &ritem[rrhs[i]];
if (*rule > 0)
while (*rule > 0)
fprintf(foutput, " %s", tags[*rule++]);
fprintf (foutput, " %s", tags[*rule++]);
else
fputs (_(" /* empty */"), foutput);
putc('\n', foutput);
putc ('\n', foutput);
}
/* TERMINAL (type #) : rule #s terminal is on RHS */
fputs(_("\nTerminals, with rules where they appear\n\n"), foutput);
fprintf(foutput, "%s (-1)\n", tags[0]);
fputs (_("\nTerminals, with rules where they appear\n\n"), foutput);
fprintf (foutput, "%s (-1)\n", tags[0]);
if (translations)
{
for (i = 0; i <= max_user_token_number; i++)
@@ -283,7 +286,7 @@ print_grammar (void)
{
buffer[0] = 0;
column = strlen (tags[token_translations[i]]);
fprintf(foutput, "%s", tags[token_translations[i]]);
fprintf (foutput, "%s", tags[token_translations[i]]);
END_TEST (50);
sprintf (buffer, " (%d)", i);
@@ -293,7 +296,7 @@ print_grammar (void)
if (*rule == token_translations[i])
{
END_TEST (65);
sprintf (buffer + strlen(buffer), " %d", j);
sprintf (buffer + strlen (buffer), " %d", j);
break;
}
}
@@ -305,7 +308,7 @@ print_grammar (void)
{
buffer[0] = 0;
column = strlen (tags[i]);
fprintf(foutput, "%s", tags[i]);
fprintf (foutput, "%s", tags[i]);
END_TEST (50);
sprintf (buffer, " (%d)", i);
@@ -315,14 +318,14 @@ print_grammar (void)
if (*rule == i)
{
END_TEST (65);
sprintf (buffer + strlen(buffer), " %d", j);
sprintf (buffer + strlen (buffer), " %d", j);
break;
}
}
fprintf (foutput, "%s\n", buffer);
}
fputs(_("\nNonterminals, with rules where they appear\n\n"), foutput);
fputs (_("\nNonterminals, with rules where they appear\n\n"), foutput);
for (i = ntokens; i <= nsyms - 1; i++)
{
int left_count = 0, right_count = 0;
@@ -340,7 +343,7 @@ print_grammar (void)
}
buffer[0] = 0;
fprintf(foutput, "%s", tags[i]);
fprintf (foutput, "%s", tags[i]);
column = strlen (tags[i]);
sprintf (buffer, " (%d)", i);
END_TEST (0);
@@ -348,29 +351,29 @@ print_grammar (void)
if (left_count > 0)
{
END_TEST (50);
sprintf (buffer + strlen(buffer), _(" on left:"));
sprintf (buffer + strlen (buffer), _(" on left:"));
for (j = 1; j <= nrules; j++)
{
END_TEST (65);
if (rlhs[j] == i)
sprintf (buffer + strlen(buffer), " %d", j);
sprintf (buffer + strlen (buffer), " %d", j);
}
}
if (right_count > 0)
{
if (left_count > 0)
sprintf (buffer + strlen(buffer), ",");
sprintf (buffer + strlen (buffer), ",");
END_TEST (50);
sprintf (buffer + strlen(buffer), _(" on right:"));
sprintf (buffer + strlen (buffer), _(" on right:"));
for (j = 1; j <= nrules; j++)
{
for (rule = &ritem[rrhs[j]]; *rule > 0; rule++)
if (*rule == i)
{
END_TEST (65);
sprintf (buffer + strlen(buffer), " %d", j);
sprintf (buffer + strlen (buffer), " %d", j);
break;
}
}

View File

@@ -4,4 +4,16 @@
AT_INIT([bison])
AT_INCLUDE([calc.m4])
# AT_INCLUDE([calc.m4])
AT_SETUP(both)
AT_CHECK([echo "stdout" && echo "stderr" >&2], 0, [], [])
AT_CLEANUP
AT_SETUP(err)
AT_CHECK([echo "stderr" >&2], 0, [], [])
AT_CLEANUP
AT_SETUP(out)
AT_CHECK([echo "stdout"], 0, [], [])
AT_CLEANUP