Compiler-compiler
Translation- Compiler-compiler
-
A compiler-compiler or compiler generator is a tool that creates a parser, interpreter, or compiler from some form of formal description of a language and machine. The earliest and still most common form of compiler-compiler is a parser generator, whose input is a grammar (usually in BNF) of a programming language, and whose generated output is the source code of a parser often used as a component of a compiler. Similarly, code generator-generators such as (JBurg) exist, but such tools have not yet reached maturity.
The ideal compiler-compiler takes a description of a programming language and a target instruction set architecture, and automatically generates a usable compiler from them. In practice, the state of the art has yet to reach this degree of sophistication and most compiler generators are not capable of handling semantic or target architecture information.
Contents
Variants
A typical parser generator associates executable code with each of the rules of the grammar that should be executed when these rules are applied by the parser. These pieces of code are sometimes referred to as semantic action routines since they define the semantics of the syntactic structure that is analyzed by the parser. Depending upon the type of parser that should be generated, these routines may construct a parse tree (or abstract syntax tree), or generate executable code directly.
One of the earliest (1964), surprisingly powerful, versions of compiler-compilers is MetaII, which accepted grammars and code generation rules, and is able to compile itself and other languages.
Some experimental compiler-compilers take as input a formal description of programming language semantics, typically using denotational semantics. This approach is often called 'semantics-based compiling', and was pioneered by Peter Mosses' Semantic Implementation System (SIS) in 1978.[1] However, both the generated compiler and the code it produced were inefficient in time and space. No production compilers are currently built in this way, but research continues.
The Production Quality Compiler-Compiler project at Carnegie-Mellon University does not formalize semantics, but does have a semi-formal framework for machine description.
Compiler-compilers exist in many flavors, including bottom-up rewrite machine generators (see JBurg) used to tile syntax trees according to a rewrite grammar for code generation, and attribute grammar parser generators (e.g. ANTLR can be used for simultaneous type checking, constant propagation, and more during the parsing stage).
History
The first compiler-compiler to use that name was written by Tony Brooker in 1960 and was used to create compilers for the Atlas computer at the University of Manchester, including the Atlas Autocode compiler. However it was rather different from modern compiler-compilers, and today would probably be described as being somewhere between a highly customisable generic compiler and an extensible-syntax language. The name 'compiler-compiler' was far more appropriate for Brooker's system than it is for most modern compiler-compilers, which are more accurately described as parser generators. It is almost certain that the "Compiler Compiler" name has entered common use due to Yacc rather than Brooker's work being remembered.[citation needed]
Other examples of parser generators in the yacc vein are ANTLR, Coco/R, CUP, GNU bison, Eli, FSL, SableCC and JavaCC.
Several compiler-compilers
See also: Comparison of parser generators- ANTLR
- Bison
- Coco/R
- ELI, an integrated toolset for compiler construction.
- Lemon
- parboiled, a Java library for building parsers.
- Packrat parser
- PQCC, a compiler-compiler that is more than a parser generator.
- VisualLangLab, a visual parser generator for JVM languages.
- Yacc
Notes
- ^ Peter Mosses, "SIS: A Compiler-Generator System Using Denotational Semantics," Report 78-4-3, Dept. of Computer Science, University of Aarhus, Denmark, June 1978
References
This article was originally based on material from the Free On-line Dictionary of Computing, which is licensed under the GFDL.
Further reading
Historical
- Brooker, R. A., et al., The Compiler-Compiler, Annual Review in Automatic Programming, Vol. 3, p. 229. (1963).
- Brooker, R. A., Morris, D. and Rohl, J. S., Experience with the Compiler Compiler, Computer Journal, Vol. 9, p. 350. (February 1967).
- Johnson, Stephen C., Yacc—yet another compiler-compiler, Computer Science Technical Report 32, Bell Laboratories, Murray Hill, NJ, July 1975
- McKeeman, William Marshall; Horning, James J.; Wortman, David B., CS.toronto.edu, A Compiler Generator, Englewood Cliffs, N.J.: Prentice-Hall, 1970. ISBN 0-13-155077-2
External links
- Computer50.org, Brooker Autocodes
- Catalog.compilertools.net, The Catalog of Compiler Construction Tools
- Labraj.uni-mb.si, Lisa
- Skenz.it, Jflex and Cup resources (Italian)
- Gentle.compilertools.net, The Gentile Compiler Construction System
- Accent.compilertools.net, Accent: a Compiler for the Entire Class of Context-Free Languages
- Grammatica.percederberg.net , an open-source parser-generator for .NET and Java
Categories:- Parser generators
- Parsing algorithms
Wikimedia Foundation. 2010.
Look at other dictionaries:
Compiler — コンパイラ (Compáira) Género Ciencia Ficción, Comedia, Seinen Manga Creado por Kia Asamiya … Wikipedia Español
compiler — 1> составитель; компилятор 2> комп. компилирующая программа; транслятор Ex: compiler options параметры трансляции, параметры компиляции … Новый большой англо-русский словарь
compiler-generated — вчт. порожденный компилятором … Большой англо-русский и русско-английский словарь
compiler — noun 1) составитель 2) компилятор … Англо-русский словарь Мюллера
Compiler — Com*pil er (k[o^]m*p[imac]l [ e]r), n. [OE. compiluor; cf. OF. compileor, fr. L. compilator.] 1. One who compiles; esp., one who makes books by compilation. [1913 Webster] 2. (Computers) a computer program that decodes instructions written in a… … The Collaborative International Dictionary of English
Compiler — This article is about the computing term. For the anime, see Compiler (anime). A diagram of the operation of a typical multi language, multi target compiler A compiler is a computer program (or set of programs) that transforms source code written … Wikipedia
Compiler — Historisches Beispiel anhand von CBASIC Ein Compiler (auch Übersetzer oder Kompilierer genannt) ist ein Computerprogramm, das ein in einer Quellsprache geschriebenes Programm (Quelltext/Quellprogramm, meist von einem Programmierer in einer… … Deutsch Wikipedia
Compiler-Front-End — Ein Compiler (auch Übersetzer oder Kompilierer genannt) ist ein Computerprogramm, das ein in einer Quellsprache geschriebenes Programm – genannt Quellprogramm – in ein semantisch äquivalentes Programm einer Zielsprache (Zielprogramm) umwandelt.… … Deutsch Wikipedia
Compiler optimization — is the process of tuning the output of a compiler to minimize or maximize some attributes of an executable computer program. The most common requirement is to minimize the time taken to execute a program; a less common one is to minimize the… … Wikipedia
Compiler correctness — In computing, compiler correctness is the branch of software engineering that deals with trying to show that a compiler behaves according to its language specification[citation needed]. Techniques include developing the compiler using formal… … Wikipedia
Фильмы
- We Are Internationalists., 1984 — Annotation: The film shows the activity of the AULYCL (All-Union Leninist Young Communist League) Central Committee and the USSR Committee of Youth Organizations aimed at developing international…
- Integration in action. They fought for Motherland. More goods for the people. In their native land. Museum of, 1983 — Film description: Construction Urengoy-Pomary-Uzhgorod. Construction worker, including those from Poland, Hungary. Saratov. Meeting of war veterans, air defense fighters. Laying flowers at the…
- Music, addressed to the people. From idea to implementation. "Menu" of computers. Tea in the shop., 1986 — Annotation: Different subjects Film description: Moscow. Kremlin. VII All-Union Congress of Composers. Speakers: T. Khrennikov (synchronously), E. Krylatov, V. Shainskiy, Yu Bogatikov, E. Doga…


