Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

yacc - Parser erstellen

&pagelevel(4)&pagelevel

(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:

-d

erzeugt die Datei y.tab.h mit den #define-Anweisungen, die die von yacc zugewiesenen Token-Codes mit den vom Benutzer angegebenen Token-Namen in Verbindung setzen. Damit können auch andere Quelldateien als y.tab.c auf die Token-Codes zugreifen.

-l

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.

-t

ü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 YYDEBUG gesteuert. Wenn YYDEBUG einen Wert ungleich Null hat, wird der Fehlersuchcode eingebunden. Ist der Wert gleich Null, wird der Code nicht eingebunden. Größe und Ablaufzeit eines ohne Fehlersuchcode erstellten Programms ist kleiner bzw. kürzer.

-v

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.

-b datei_präfix

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.

-p sym_präfix

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.

-Q[y/n]

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.

-V

druckt die Versionsinformation für yacc auf die Standard-Fehlerausgabe.

-y driver_file

definieren einer persönlichen yaccpar-Datei.

Datei

y.output, y.tab.c
y.tab.h

Definitionen von Token-Namen
(Anstelle von y. wird datei_präfix. verwendet, wenn die Option -b angegeben ist)

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.
Hat die Variable LC_CTYPE den Wert De_DE.646, werden z.B. der senkrechte Strich | und die öffnende geschweifte Klammer { als Buchstaben interpretiert (ihr Code entspricht in der deutschen Variante des Zeichensatzes ISO 646 den Umlauten ö und ä). Dadurch kann yacc die Grammatiken nicht mehr richtig auswerten. In einer solchen Umgebung können Sie deshalb nicht mit yacc arbeiten. Setzen Sie in diesem Fall entweder die Variable LC_CTYPE auf den Wert En_US.ASCII oder weisen Sie der Variablen LANG und ggf. auch der Variablen LC_CTYPE die leere Zeichenkette zu.

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