(yet another compiler-compiler)
Das Kommando yacc (yet another compiler-compiler) wandelt eine kontextfreie Grammatik in eine Menge von Tabellen für einen einfachen Automaten um, der einen LALR(1) Syntaxanalyse-Algorithmus ausführt. Die Grammatik kann mehrdeutig sein; für die Auflösung dieser Mehrdeutigkeiten werden bestimmte Regeln angewendet.
Die Ausgabedatei y.tab.c (bzw. datei_präfix.tab.c, falls die Option -b angegeben ist) muss zur Erstellung eines Programms yyparse vom C-Übersetzer übersetzt werden. Dieses Programm muss mit dem lexikalischen Analyse-Programm yylex sowie mit main und yyerror, einer Fehlerbehandlungsroutine, gebunden werden. Diese Routinen sind vom Benutzer bereitzustellen. Das Kommando lex ist zum Erstellen lexikalischer Analysatoren, die von yacc verwendet werden können, nützlich.
Syntax
yacc [ -dltv][ -b datei_präfix][ -p sym_präfix]| -y driver_file][ -V][ -Q[y|n]][ datei ...] |
Folgende Optionen können beim Aufruf von yacc verwendet werden:
erzeugt die Datei y.tab.h mit den #define-Anweisungen, die die von
gibt an, dass der in y.tab.c erzeugte Code (bzw. datei_präfix.tab.c, falls die Option -b angegeben ist) keine #line-Anweisungen enthält. Verwenden Sie diese Option nur, wenn Grammatik und zugehörige Aktionen völlig ausgetestet, d.h. fehlerfrei sind.
übersetzt standardmäßig Code zur Unterstützung der Fehlersuche zur Laufzeit. Der Fehlersuchcode wird in y.tab.c (bzw. datei_präfix.tab.c, falls die Option -b angegeben ist) immer generiert, steht jedoch unter bedingter Übersetzungssteuerung. Standardmäßig wird dieser Code bei der Übersetzung von y.tab.c nicht berücksichtigt. Unabhängig von der Verwendung der Option -t wird die Bereitstellung des Codes für die Laufzeit-Fehlersuche durch das Präprozessor-Symbol
stellt die Datei y.output (bzw. datei_präfix.output, falls die Option -b angegeben ist) bereit. Sie enthält eine Beschreibung der Syntaxanalyse-Tabellen und eine Meldung über Konflikte, die aus Mehrdeutigkeiten in der Grammatik entstanden sind.
Die Ausgabedateien beginnen mit dem Präfix datei_präfix anstelle von y. Auch sonstige von yacc benötigte Dateien wie y.tab.c, y.tab.h und y.output erhalten dann die Dateinamen datei_präfix.tab.c, datei_präfix.tab.h und datei_präfix.output.
Alle von yacc erzeugten externen Namen beginnen mit dem Präfix sym_präfix anstelle von yy. Davon betroffen sind auch die Funktionen yyparse(), yylex() und yyerror() und die Variablen yylval, yychar und yydebug. Interne Namen können auch von der Option -p betroffen sein. Die Option -p wirkt jedoch nicht auf #define-Symbole, die von yacc erzeugt werden.
legt fest, ob die Versionsinformation über die erstellte yacc-Version in y.tab.c (bzw. datei_präfix.tab.c, falls die Option -b angegeben ist) geschrieben werden soll (y) oder nicht (n). y/n steht für eine ja/nein-Angabe in der jeweils eingestellten Sprachumgebung. In einer englischsprachigen Umgebung geben Sie -Qy an, um die Versionsinformation in die Datei y.tab.c zu schreiben und -Qn, um keine Information zu schreiben. In einer deutschsprachigen Umgebung müssen Sie beispielsweise -Qj oder -Qn angeben. Standardmäßig wird keine Versionsinformation geschrieben.
druckt die Versionsinformation für yacc auf die Standard-Fehlerausgabe.
definieren einer persönlichen yaccpar-Datei. |
Datei
y.output, y.tab.c Definitionen von Token-Namen yacc.tmp, yacc.debug, yacc.acts temporäre Dateien /usr/lib/yaccpar Analysealgorithmus-Prototyp für C-Programme /usr/ccs/lib/liby.a für das Binden benötigte Module |
Endestatus
Die Anzahl der reduziere/reduziere- und lies/reduziere-Konflikte wird auf der Standard-Fehlerausgabe gemeldet; ein detaillierterer Bericht ist in der Datei y.output (bzw. datei_präfix.output, falls die Option -b angegeben ist) zu finden. Eine Meldung erfolgt auch dann, wenn einige Regeln nicht vom Startsymbol aus erreichbar sind. |
Hinweis
Da standardmäßig die Dateinamen festgelegt sind (Option -b nicht angegeben), kann jeweils nur höchstens ein yacc-Prozess zu einem gegebenen Zeitpunkt in einem gegebenen Dateiverzeichnis aktiv sein. Wird mit c89 [5] ein yacc-Programm gebunden, muss als Bibliotheksparameter -ly angegeben werden. |
Internationale Umgebung
Die folgenden Umgebungsvariablen beeinflussen die Ausführung des Kommandos yacc: LANG Gibt einen Standardwert für die Variablen für die internationale Umgebung an, die nicht gesetzt oder Null sind. Ist LANG nicht gesetzt oder Null, wird der entsprechende Standardwert der internationalen Umgebung verwendet. Enthält eine der Internationalisierungsvariablen eine ungültige Einstellung, verhält sich das Kommando so, als sei keine der Variablen definiert worden. LC_ALL Ist diese Variable auf einen Wert gesetzt, d. h. ist sie nicht leer, überschreibt dieser Wert die Werte aller übrigen Internationalisierungsvariablen. LC_CTYPE Legt die internationale Umgebung für die Interpretation der Byte-Folgen eines Datentexts als Zeichen fest (z.B. Singlebytezeichen im Unterschied zu Mehrbytezeichen in Argumenten). Außerdem legt LC_CTYPE fest, welche Zeichen in der aktuell gültigen Umgebung als Buchstaben und Ziffern definiert sind. Dies ist bei Symbolnamen von Bedeutung. LC_MESSAGES Legt die internationale Umgebung für Format und Inhalt der Diagnosemeldungen fest, die in die Standardfehlerausgabe geschrieben werden. NLSPATH Legt den Pfad der Meldungsdateien für LC_MESSAGES fest. |
Siehe auch
lex |