Content deleted Content added
→Generating LALR tables: Move material from LALR parser article. Change title. |
Corrected Richard Bornat's home page URL |
||
(40 intermediate revisions by 25 users not shown) | |||
Line 1:
{{Refimprove|date=August 2011}}
There are other types of [[parser generator]]s, such as
In practice, LALR offers a good solution, because LALR(1) grammars are more powerful than SLR(1), and can parse most practical LL(1) grammars. LR(1) grammars are more powerful than LALR(1),
==History==
Frank DeRemer invented LALR parsers with his PhD dissertation, called "Practical LR(k) Translators", in 1969, at MIT. This was an important breakthrough, because LR(k) translators, as defined by [[Donald Knuth]] in his 1965 paper, "On the Translation of Languages from Left to Right", were much too large for implementation on computer systems in the 1960s and 70's.
An early LALR parser generator and probably the most popular one for many years was "[[yacc]]" (Yet Another Compiler Compiler), created by [[Stephen C. Johnson|Stephen Johnson]] in 1975 at AT&T Labs.<ref>{{
|title=Yacc: Yet Another Compiler-Compiler
|author=Stephen C. Johnson
Line 20 ⟶ 16:
|year=1975
|url=http://dinosaur.compilertools.net/yacc/
|access-date=2012-07-02
|archive-date=2011-07-11
|archive-url=https://web.archive.org/web/20110711231228/http://dinosaur.compilertools.net/yacc/
|url-status=dead
}}</ref> Another, "TWS", was created by Frank DeRemer and Tom Pennello. Today, there are many LALR parser generators available, many inspired by and largely compatible with the original Yacc, for example [[GNU bison]], a pun on the original Yacc/[[Yak]]. See [[Comparison of parser generators#Deterministic context-free languages|Comparison of deterministic context-free language parser generators]] for a more detailed list.
==Overview==
Line 28 ⟶ 26:
The LALR parser and its alternatives, the SLR parser and the [[Canonical LR parser]], have similar methods and parsing tables; their main difference is in the mathematical grammar analysis algorithm used by the parser generation tool. LALR generators accept more grammars than do SLR generators, but fewer grammars than full LR(1). Full LR involves much larger parse tables and is avoided unless clearly needed for some particular computer language. Real computer languages can often be expressed as LALR(1) grammars. In cases where they can't, a LALR(2) grammar is usually adequate. If the parser generator allows only LALR(1) grammars, the parser typically calls some hand-written code whenever it encounters constructs needing extended lookahead.
Similar to an [[SLR parser]] and Canonical LR parser generator, an
==See also==
* [[Comparison of parser generators]]{{spaced
* [http://dl.acm.org/citation.cfm?id=357187 Efficient Computation Of LALR(1) Look-Ahead Sets, DeRemer and Pennello, TOPLAS (1982)]▼
== References ==
{{Reflist}}
* Alfred V. Aho, Ravi Sethi, and Jeffrey D. Ullman. ''[[Compilers: Principles, Techniques, and Tools]]'' Addison—Wesley, 1986. (AKA [[Compilers: Principles, Techniques, and Tools|The Dragon Book]], describes the traditional techniques for building LALR(1) parsers.)
* Richard Bornat ''[[Understanding and Writing Compilers]]'', Macmillan, 1979. (Describes the principles of automated left-to-right parsing and how to construct the parser tables, what a follow set is, etc., ''in English, not mathematics'' – available freely from the author's page at [https://www.eis.mdx.ac.uk/staffpages/r_bornat/].)
==Further reading==
{{refbegin}}
* {{Cite journal | last1 = Knuth | first1 = D. E. | authorlink = Donald Knuth | title = On the translation of languages from left to right | doi = 10.1016/S0019-9958(65)90426-2 | journal = Information and Control | volume = 8 | issue = 6 | pages = 607–639 | date = July 1965 | doi-access = }}
* {{cite thesis
|type=Ph.D.
|title=Practical Translators for LR(k) languages
|url=http://publications.csail.mit.edu/lcs/pubs/pdf/MIT-LCS-TR-065.pdf
|first=Franklin L.
|last=DeRemer
|publisher=MIT
|year=1969
|access-date=2013-08-19
|archive-url=https://web.archive.org/web/20130819012838/http://publications.csail.mit.edu/lcs/pubs/pdf/MIT-LCS-TR-065.pdf
|archive-date=2013-08-19
|url-status=dead
}}
▲* [http://dl.acm.org/citation.cfm?id=357187 Efficient Computation Of LALR(1) Look-Ahead Sets, DeRemer and Pennello, TOPLAS (1982)]
{{refend}}
{{Parsers}}
[[Category:Parser generators]]
|