yacc(1) yacc(1)
NAME
yacc - Parser erstellen
SYNTAX
yacc [Option...] Datei
BESCHREIBUNG
Das Kommando yacc (yet another compiler-compiler) wandelt eine kon-
textfreie 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 Mehrdeu-
tigkeiten werden bestimmte Regeln angewendet.
Standardmäßig erhalten alle Ausgabedateien von yacc das Prefix y, alle
externen Namen das Prefix yy. Diese Prefixe sind über Optionen änder-
bar (z. B. falls mehrere yacc-Prozesse gleichzeitig im selben Datei-
verzeichnis ablaufen sollen).
Die Ausgabedatei y.tab.c muß zur Erstellung eines Programms yyparse
vom C-Übersetzer übersetzt werden. Dieses Programm muß mit dem lexika-
lischen Analyse-Programm yylex sowie mit main und yyerror, einer Feh-
lerbehandlungsroutine, gebunden werden. Diese Routinen sind vom Benut-
zer bereitzustellen. Das Kommando lex(1) ist zum Erstellen lexikali-
scher Analysatoren, die von yacc verwendet werden können, nützlich.
OPTIONEN
-v Stellt die Datei y.output bereit. Sie enthält eine Beschreibung
der Syntaxanalyse- Tabellen und eine Meldung über Konflikte, die
aus Mehrdeutigkeiten in der Grammatik entstanden sind.
-d Erzeugt die Datei y.tab.h mit den #define-Anweisungen, die die
von yacc zugewiesenen Token-Codes mit den vom Benutzer angegebe-
nen Token-Namen in Verbindung setzen. Damit können auch andere
Quelldateien als y.tab.c auf die Token-Codes zugreifen.
-l Gibt an, daß der in y.tab.c erzeugte Code keine #line-Anweisungen
enthält. Verwenden Sie diese Option nur, wenn Grammatik und zuge-
hörige Aktionen völlig ausgetestet, d. h. fehlerfrei sind.
-Q[o]
Legt fest, ob die Versionsinformation über die erstellte yacc-
Version in y.tab.c geschrieben werden soll.
o 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.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
yacc(1) yacc(1)
-i Ermöglicht das direkte Erstellen internationalisierter Programme.
Wenn Sie yacc mit der Option -i aufrufen, werden in den von yacc
generierten Teil der erzeugten Datei Aufrufe der Funktion
gettxt() geschrieben. gettxt() hat Zugriff auf die internationa-
lisierten Meldungskataloge [siehe gettxt(3C)].
-t Übersetzt standardmäßig Code zur Unterstützung der Fehlersuche
zur Laufzeit. Der Fehlersuchcode wird in y.tab.c immer generiert,
steht jedoch unter bedingter Übersetzungssteuerung. Standardmäßig
wird dieser Code bei der Übersetzung von y.tab.c nicht berück-
sichtigt. 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.
-b Datei-Prefix
Verwendet für die Ausgabedateien das Prefix Datei-Prefix anstelle
von y (z. B. Datei-Prefix.tab.c).
-p Symbol-Prefix
Verwendet für externe Namen das Prefix Symbol-Prefix anstelle von
yy (z. B. Symbol-Prefixparse).
-V Druckt die Versionsinformation für yacc auf die Standard-
Fehlerausgabe.
-- Ende der Optionenliste. Die Angabe ist nötig, wenn der erste
Dateiname mit - beginnt.
FEHLERMELDUNGEN
Die Anzahl der reduziere/reduziere- und lies/reduziere-Konflikte wird
auf der Standard-Fehlerausgabe gemeldet; ein detaillierterer Bericht
ist in der Datei y.output zu finden. Eine Meldung erfolgt auch dann,
wenn einige Regeln nicht vom Startsymbol aus erreichbar sind.
INTERNATIONALE UMGEBUNG
Die Sprache der Meldungstexte und ja/nein-Angaben werden durch die
Umgebungsvariablen LCALL, LCMESSAGES oder LANG bestimmt.
In der Standardeinstellung verhält sich das System so, als wäre es
nicht internationalisiert, d. h. die Meldungstexte erscheinen in eng-
lischer Sprache und ja/nein-Angaben müssen ebenfalls in englischer
Sprache (y oder n) eingegeben werden. Wenn Sie die Sprachumgebung
ändern wollen, müssen Sie eine dieser Variablen entsprechend setzen.
Die Umgebungsvariable LCCTYPE legt fest, welche Zeichen in der aktu-
ell gültigen Umgebung als Buchstaben und Ziffern definiert sind. Dies
ist bei Symbolnamen von Bedeutung.
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
yacc(1) yacc(1)
Hat die Variable LCCTYPE den Wert DeDE.646, werden z. B. der sen-
krechte Strich | und die öffnende geschweifte Klammer { als Buchstaben
interpretiert (ihr Code entspricht in der deutschen Variante des Zei-
chensatzes ISO 646 den Umlauten ö und ä). Dadurch kann yacc die Gram-
matiken nicht mehr richtig auswerten. In einer solchen Umgebung können
Sie deshalb nicht mit yacc arbeiten. Setzen Sie in diesem Fall entwe-
der die Variable LCCTYPE auf den Wert EnUS.ASCII oder weisen Sie der
Variablen LANG und gegebenenfalls auch der Variablen LCCTYPE die
leere Zeichenkette zu.
Ausführliche Informationen zu den Abhängigkeiten der Umgebungsvaria-
blen und zur Internationalisierung im allgemeinen finden Sie im Hand-
buch "Leitfaden für Programmierer: Internationalisierung - Lokalisie-
rung". Zur Einstellung der Benutzerumgebung siehe auch environ(5).
DATEIEN
y.output, y.tab.c, y.tab.h
Definitionen von Token-Namen
yacc.tmp, yacc.debug, yacc.acts
temporäre Dateien
LIBDIR/yaccpar
Analysealgorithmus-Prototyp für C-Programme
LIBDIR
im allgemeinen /usr/ccs/lib
SIEHE AUCH
lex(1).
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98