Yacc
Yacc ist ein Computerprogramm, welches der Herstellung von Compilern dient. Das Wort Yacc ist ein Akronym, das selbstironisch für yet another compiler compiler steht (Noch ein Übersetzer-Übersetzer).
Yacc dient der syntaktischen Analyse. Es implementiert einen Parsergenerator, der aus Syntaxdefinitionen von Programmiersprachen, die durch LALR(1)-Grammatiken (besondere LR(k)-Grammatiken) in einer BNF-ähnlichen Notation angegeben sind, automatisiert einen Parser auf Basis eines Kellerautomaten erzeugen kann.
Yacc erzeugt aus der Sprachdefinition Programmcode, der typischerweise in C bereitgestellt wird. Daneben gibt es weitere Yacc-Varianten, die Code für andere Sprachen erzeugen, wie beispielsweise Ayacc für die Sprache Ada.
Um einen Compiler oder Interpreter zu erstellen, benötigt ein von Yacc generierter Parser noch ein Program zur lexikalischen Analyse des Quellcodes. Hierfür wird häufig das ebenfalls für UNIX entwickelte Programm Lex eingesetzt.
Yacc wurde von Stephen C. Johnson bei AT&T im Rahmen des UNIX-Projektes entwickelt. Später sind weitere Varianten des Programms entstanden, wie Berkeley Yacc (Kurz byacc) in modernen BSD-Betriebssystemen, GNU Bison im Rahmen des GNU-Projekts, MKS Yacc and Abraxas Yacc. Diese basieren auf dem gleichen Grundkonzept wie Yacc, bieten aber Verbesserungen im Detail. Yacc kam zuerst für die Sprachen AWK und C zum Einsatz sowie um den „Portable C Compiler“ zu entwickeln, der für Sprachen wie FORTRAN 77, Ratfor und APL zum Einsatz kam. Der Quellcode von yacc ist unter einer freien Lizenz veröffentlicht. Yacc war unter anderem auch Bestandteil von OpenSolaris und Plan 9.
Literatur
- Herold, Helmut: lex & yacc. Die Profitools zur lexikalischen und syntaktischen Textanalyse. Addison-Wesley, 2003, ISBN 3-8273-2096-8
- John R. Levine, Tony Mason, Doug Brown: lex & yacc. O’Reilly 1992, ISBN 1-56592-000-7
- S. C. Johnson, Yacc: Yet Another Compiler Compiler. Computing Science Technical Report No. 32, 1975, Bell Laboratories, Murray Hill, New Jersey 07974
- Simson L. Garfinkel & Michael K. Mahoney, NeXtstep(Tm) Programming: Step One: Object-Oriented Applications, Springer, 1993, ISBN 978-0-387-97884-0
Weblinks
[{{Man/{{#switch: @posix
|@bsd=OpenBSD
|@=gnu
|posix}}||yacc|url}} yacc{{#if:{{Man/{{#switch: @posix
|@bsd=OpenBSD
|@=gnu
|posix}}||yacc|display_section}}|({{Man/{{#switch: @posix
|@bsd=OpenBSD
|@=gnu
|posix}}||yacc|display_section}})}}]{{#if:yet another compiler compiler|: yet another compiler compiler}}{{#if:{{#ifeq:
|inline||{{Man/{{#switch: @posix
|@bsd=OpenBSD
|@=gnu
|posix}}||yacc|attrib}}}}| – {{#ifeq:
|inline||{{Man/{{#switch: @posix
|@bsd=OpenBSD
|@=gnu
|posix}}||yacc|attrib}}}}}}
[{{Man/{{#switch: @gnu
|@bsd=OpenBSD
|@=gnu
|gnu}}|P|yacc|url}} yacc{{#if:{{Man/{{#switch: @gnu
|@bsd=OpenBSD
|@=gnu
|gnu}}|P|yacc|display_section}}|({{Man/{{#switch: @gnu
|@bsd=OpenBSD
|@=gnu
|gnu}}|P|yacc|display_section}})}}]{{#if:yet another compiler compiler|: yet another compiler compiler}}{{#if:{{#ifeq:
|inline||{{Man/{{#switch: @gnu
|@bsd=OpenBSD
|@=gnu
|gnu}}|P|yacc|attrib}}}}| – {{#ifeq:
|inline||{{Man/{{#switch: @gnu
|@bsd=OpenBSD
|@=gnu
|gnu}}|P|yacc|attrib}}}}}}
[{{Man/{{#switch: @bsd
|@bsd=OpenBSD
|@=gnu
|bsd}}|1|yacc|url}} yacc{{#if:{{Man/{{#switch: @bsd
|@bsd=OpenBSD
|@=gnu
|bsd}}|1|yacc|display_section}}|({{Man/{{#switch: @bsd
|@bsd=OpenBSD
|@=gnu
|bsd}}|1|yacc|display_section}})}}]{{#if:an LALR(1) parser generator|: an LALR(1) parser generator}}{{#if:{{#ifeq:
|inline||{{Man/{{#switch: @bsd
|@bsd=OpenBSD
|@=gnu
|bsd}}|1|yacc|attrib}}}}| – {{#ifeq:
|inline||{{Man/{{#switch: @bsd
|@bsd=OpenBSD
|@=gnu
|bsd}}|1|yacc|attrib}}}}}}
[{{Man/{{#switch: @FreeBSD
|@bsd=OpenBSD
|@=gnu
|FreeBSD}}|1|ayacc|url}} ayacc{{#if:{{Man/{{#switch: @FreeBSD
|@bsd=OpenBSD
|@=gnu
|FreeBSD}}|1|ayacc|display_section}}|({{Man/{{#switch: @FreeBSD
|@bsd=OpenBSD
|@=gnu
|FreeBSD}}|1|ayacc|display_section}})}}]{{#if:An Ada LALR(1) parser generator|: An Ada LALR(1) parser generator}}{{#if:{{#ifeq:
|inline||{{Man/{{#switch: @FreeBSD
|@bsd=OpenBSD
|@=gnu
|FreeBSD}}|1|ayacc|attrib}}}}| – {{#ifeq:
|inline||{{Man/{{#switch: @FreeBSD
|@bsd=OpenBSD
|@=gnu
|FreeBSD}}|1|ayacc|attrib}}}}}}
[{{Man/{{#switch: @FreeBSD
|@bsd=OpenBSD
|@=gnu
|FreeBSD}}|3|yecc|url}} yecc{{#if:{{Man/{{#switch: @FreeBSD
|@bsd=OpenBSD
|@=gnu
|FreeBSD}}|3|yecc|display_section}}|({{Man/{{#switch: @FreeBSD
|@bsd=OpenBSD
|@=gnu
|FreeBSD}}|3|yecc|display_section}})}}]{{#if:LALR-1 Parser Generator (for Erlang)|: LALR-1 Parser Generator (for Erlang)}}{{#if:{{#ifeq:
|inline||{{Man/{{#switch: @FreeBSD
|@bsd=OpenBSD
|@=gnu
|FreeBSD}}|3|yecc|attrib}}}}| – {{#ifeq:
|inline||{{Man/{{#switch: @FreeBSD
|@bsd=OpenBSD
|@=gnu
|FreeBSD}}|3|yecc|attrib}}}}}}
{{#ifeq: s | p | | {{#if: 4293012-1 | |
}} }}{{#ifeq:||{{#if: | [[Kategorie:Wikipedia:GND fehlt {{#invoke:Str|left|{{{GNDCheck}}}|7}}]] }}{{#if: | {{#if: | | }} }} }}{{#if: | {{#ifeq: 0 | 2 | | }} }}{{#if: | {{#ifeq: 0 | 2 | | }} }}{{#ifeq: s | p | {{#if: 4293012-1 | | {{#if: {{#statements:P227}} | | }} }} }}{{#ifeq: s | p | {{#if: 4293012-1 | {{#if: {{#invoke:Wikidata|pageId}} | {{#if: {{#statements:P227}} | | }} }} }} }}{{#ifeq: s | p | {{#if: | | {{#if: {{#statements:P244}} | | }} }} }}{{#ifeq: s | p | {{#if: | {{#if: {{#invoke:Wikidata|pageId}} | {{#if: {{#statements:P244}} | | }} }} }} }}{{#ifeq: s | p | {{#if: | | {{#if: {{#statements:P214}} | | }} }} }}{{#ifeq: s | p | {{#if: | {{#if: {{#invoke:Wikidata|pageId}} | {{#if: {{#statements:P214}} | | }} }} }} }}Vorlage:Wikidata-Registrierung
- Wikipedia:GND fehlt
- Wikipedia:Normdaten-TYP falsch oder fehlend
- Wikipedia:GND in Wikipedia fehlt, in Wikidata vorhanden
- Wikipedia:GND in Wikipedia vorhanden, fehlt jedoch in Wikidata
- Wikipedia:LCCN in Wikipedia fehlt, in Wikidata vorhanden
- Wikipedia:LCCN in Wikipedia vorhanden, fehlt jedoch in Wikidata
- Wikipedia:VIAF in Wikipedia fehlt, in Wikidata vorhanden
- Wikipedia:VIAF in Wikipedia vorhanden, fehlt jedoch in Wikidata
- Freies Programmierwerkzeug
- Compilerbau
- Unix-Software
- Abkürzung