Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Prólogo
Lo que Chomsky hizo fue encontrar la explicación matemática del mecanismo del
lenguaje, partiendo de estudios de lingüística que se habían realizado hasta ese momento.
1 de 29
Un Mecanismo Finito para Generar un Número Infinito de Oraciones
2 de 29
las gramáticas particulares: éstas deben tener en cuenta la TG para ser adecuadas.
Dato: Corpus
T.G.
Corpus
Datos: T.G.
Gramática
3. La TG puede, por último, ante dos gramáticas (o más) y un corpus, decir cuál de las
dos es la más adecuada. Se le llama entonces "procedimiento de evaluación de las
gramáticas".
3 de 29
Corpus
Datos: Gramática 1 Respuesta: la mejor
T.G. gramática es...
Gramática 2
La primera es la más exigente, pero no la más difícil, viene a pedir a la teoría que
diga qué forma debe tener la gramática de cada lengua. Esta pregunta es difícil de
responder, por lo tanto no se está en condiciones de construir un procedimiento general de
descubrimiento de las gramáticas. Pero lo que si se puede, es usar ciertos criterios para
construir una gramática para un corpus dado.
La segunda es un poco menos exigente, puesto que sólo se trata de verificar si las
oraciones del corpus pueden ser generadas por la gramática, en otras palabras, que se las
pueda analizar sintácticamente por medio de la gramática.
Gramaticalidad e Interpretabilidad
La Gramaticalidad es otro concepto importante. Para tener una visión más clara de lo
que es la gramaticalidad, es preciso oponerla a la interpretabilidad.
El padre del primo del tío del abuelo del vecino de la hermana mayor de la segunda mujer del
escribano vino ayer a verme.
Sin duda, esta oración es ininterpretable cuando se accede a ella por primera vez,
pero es gramaticalmente correcta, y obedece a una de las reglas que subyacen en la
competencia de la que se ha hablado anteriormente.
4 de 29
2. Gramaticales e ininterpretables. Ejemplo:
Pedro, cuyo amigo cuyo hermano bebe está borracho ha comido chocolate.
Una teoría de la competencia, por el contrario, es una teoría del mecanismo del
lenguaje, y debe, pues, dar cuenta de las oraciones gramaticales y excluir las
agramaticales. La noción de gramaticalidad no puede ni debe confundirse con la aparición
en un corpus, ni con la probabilidad estadística de aparición, ya que un buen número de
oraciones que se pronuncian no son totalmente gramaticales, y las que son gramaticales en
algunos casos nunca se pronuncian.
5 de 29
La Gramática Generativa
6 de 29
generativa: las primeras describen los hechos lingüísticos que la segunda explica.
Sincronía / Diacronía
7 de 29
Esa oración tiene sujeto y predicado, que son los dos constituyentes inmediatos de la
oración.
o bien:
O
S P
MD N V OD
MD N V MD N
MD N V MD N
El caballo salta el alambrado
8 de 29
O
S P
MD N V OD
MD N
En el corpus, las oraciones estaban formadas por sujetos (S) y predicados (P). Se
puede, entonces, formular una regla que diga más o menos lo siguiente: si se está en
presencia del símbolo O (oración), rescríbalo en S P (es decir, la concatenación de las
nociones sujeto y predicado). Esta regla tendrá la forma:
O ---> S P
La regla dada indica cómo pasar del paso 1 al 2 en el análisis realizado arriba, es
decir, dice cuáles son los constituyentes de la noción O (oración). Se puede así escribir el
conjunto de reglas:
O ---> S P
S ---> MD N
P ---> V OD
OD ---> MD N
(Se debe tener en cuenta que en este ejemplo no se consideran aspectos semánticos y
morfológicos.)
9 de 29
Estas reglas no son suficientes para generar verdaderamente las oraciones. Hay que
añadirles otra serie de reglas llamadas reglas léxicas:
MD ---> el | la
N ---> caballo | alambrado | gato | leche | perro | carne | reloj |
hora | niña | lengua
V ---> salta | toma | come | marca | saca
Se debe observar que las reglas lexicales se rescriben en nociones (o símbolos) que
pertenecen al lenguaje. Dichas nociones o símbolos se denominan nociones terminales o
símbolos terminales. Las nociones o símbolos que en este ejemplo se escribieron con
mayúsculas, son utilizadas para describir al lenguaje que se está estudiando, y reciben el
nombre de metanociones o símbolos no terminales. Al lenguaje utilizado para describir un
lenguaje se lo denomina metalenguaje.
Para mostrar más específicamente por qué se dice que la gramática es generativa, se
partirá desde O, y se realizarán derivaciones sucesivas hasta llegar a obtener símbolos
terminales en las hojas del árbol de derivación. Una posibilidad sería la siguiente:
S P
MD N V OD
MD N
10 de 29
Por supuesto que si se hubieran elegido otras reglas léxicas se habría llegado a una oración
como "El gato come el alambrado", lo cual no tiene sentido. La solución a este problema
puede ser agregar más reglas que no permitan tal combinación. Igualmente, la
concordancia en género y número del núcleo con el modificador directo se puede resolver
agregando reglas que restrinjan el uso de ellos.
Obsérvese que las reglas "S ---> N MD" y "OD ---> N MD" tienen la misma
secuencia de símbolos en la parte derecha de la flecha. Debido a que la gramática sólo
explica la estructura y no el significado, esas dos reglas se pueden resumir en una sola,
obteniéndose así una gramática mas pequeña.
Por último se puede decir que, si se tiene la descripción del lenguaje (corpus), es
probable que se pueda encontrar una gramática generativa que describa la estructura del
mismo. Lo de probable viene del hecho de que la teoría general no tiene un procedimiento
para escribir las reglas de la gramática, por lo que el lingüista debe usar mucho su
intuición.
La explicación del concepto de recursividad y del por qué es posible generar infinitas
oraciones con un número finito de reglas se da en la sección siguiente de este trabajo.
11 de 29
Introducción a la Teoría de los Lenguajes Formales
Introducción
Lenguajes y Gramáticas
Alfabeto
Lenguaje
12 de 29
Se denomina semántica al estudio del significado de las oraciones y frases de un
lenguaje, y su interpretación.
Noción de Gramática
G=(N,T,R,O)
donde:
N: es el conjunto de símbolos no terminales usados para construir las reglas de la
gramática y no figuran en las oraciones del lenguaje. A veces se los denomina como no
terminales o metanociones.
T: es el conjunto de símbolos terminales . Cualquier oración del lenguaje debe ser una
cadena de símbolos de T, según la estructura que especifiquen las reglas. A veces pueden
ser llamados directamente terminales o nociones.
R: es el conjunto de las reglas de rescritura de la gramática. Tienen la forma cadena1 -->
Cadena2.
O: es el símbolo más importante del conjunto N, se denomina símbolo inicial, axioma,
símbolo distinguido o cabeza de lenguaje. Se usa para comenzar las derivaciones en el
análisis sintáctico de las oraciones.
Al lenguaje L generado por la gramática G está formado por todas las oraciones
tales que se puede encontrar a partir de O, por medio de aplicaciones sucesivas de las
reglas de la gramática. Se denota por
L(G) = { ε / O -*-> ε }
13 de 29
El conjunto de Reglas y la Clasificación de Chomsky
A las gramáticas del Tipo 0 y del Tipo 1 se las suele denominar gramáticas
generativas trasnformacionales. Lo de transformacional hace referencia al hecho de que
transforman una secuencia de caracteres en otra secuencia de caracteres en un solo paso.
Este tipo engloba a todos los otros 3 tipos de gramática. Actualmente no se publicó
un trabajo en el que se haya presentado un analizador sintáctico que trabaje con una
gramática de éste tipo.
Se dice que la Máquina de Turing puede tratar este tipo de gramática. Las máquinas
de Turing son bidireccionales (pueden ir hacia adelante o hacia atrás en la examinación de
los caracteres de entrada).
αA β ---> α γ β
Se llama sensible al contexto por que cambia A por gamma sólo en el contexto
formado por alfa ... beta.
Aquí se puede observar que el problema de número que tenemos al trabajar con
lenguajes naturales (los que hablamos los humanos) puede ser tratado con gramáticas de
este tipo (por ejemplo, la concordancia del número del verbo con el del sujeto).
14 de 29
La forma de las reglas es:
Este tipo de gramáticas son las que se usan para los lenguajes de computación.
Cuando se utilice el término gramática en capítulos siguientes, se quiere decir gramáticas
de Tipo 2 o 3.
A ---> a B o bien
A ---> a
donde A y B son de N y a de T.
Tres años antes de la presentación de esta clasificación, Kleene estudió por primera
vez a las expresiones regulares. Resultó ser que las expresiones regulares es otra forma
muy compacta de escribir una gramática del Tipo 4.
Veamos un ejemplo sencillo: sea el lenguaje cuyas oraciones son números enteros
según la siguiente descripción dada por extensión:
15 de 29
Para construir las reglas de la gramática que den cuenta de la estructura de este
lenguaje se podrían dar las siguientes reglas:
N ---> D
N ---> D D
N ---> D D D
D ---> 0 | 1 | 2 | ... | 9
N ---> N D
N ---> D
D ---> 0 | 1 | 2 | ... | 9
Arbol sintáctico
Un árbol sintáctico puede construirse a partir del análisis sintáctico del texto de
entrada.
La definición de árbol sintáctico dada aquí es la que sirve a los efectos de este
trabajo y puede no coincidir con alguna definición que se encuentre en la bibliografía
sobre compiladores. En términos de esta definición, cualquier árbol que se diga ser árbol
sintáctico y que tenga nodos con no terminales será considerado simplemente árbol.
16 de 29
Ambigüedad de una Gramática
Una gramática es ambigua si el lenguaje definido por la misma tiene alguna oración
que tenga más de un árbol de análisis sintáctico.
Una gramática que es tratable con la técnica LR(k) o con la técnica LL(k) no es
ambigua, por lo que resulta un buen método de determinar la ambigüedad.
Existen varias técnicas de análisis sintácticos entre las que se destacan 2 grupos
principales: la técnica LR y la LL.
17 de 29
Comparación del número de gramáticas tratables con la técnica LR y el
número de gramáticas tratables con la técnica LL.
Esquemas de Traducción
Se define un esquema de traducción como un sistema formal del tipo:
18 de 29
EDT = { N, Te, Ts, R, O }
donde
donde
A pertenece a N
α pertenece a ( N U Te)*
β pertenece a ( N U Ts)*
O: es el símbolo inicial.
Gs = { N, Ts, P, O }
donde
N: es el conjunto de símbolos no terminales del lenguaje fuente. O es un elemento de este
conjunto.
Ts: es el mismo conjunto de símbolos terminales del esquema de traducción.
P: es el conjunto de reglas de la gramática, cuyos elementos son las reglas que:
P = { A ---> β / (A ---> α , β) era una regla de traducción del esquema }
19 de 29
analizadores sintácticos. Los términos rutinas semánticas no son utilizados en ese libro.
A los efectos de unificar conceptos, en este trabajo se tomarán como sinónimos a los
términos acciones semánticas y rutinas semánticas, fundamentado en que existe una
analogía entre un analizador sintáctico y un autómata finito.
A ---> α , β
20 de 29
Un poco de Historia
Chomsky [1956] introdujo las gramáticas independientes del contexto como parte
de un estudio sobre lenguajes naturales. La utilización de este tipo de gramáticas para la
especificación de la sintaxis de los lenguajes de programación surgió independientemente.
El lingüista Panini diseñó una notación sintáctica equivalente para especificar las reglas de
la gramática del sánscrito de entre el 400 a.C. y el 200 a.C. (Ingerman [1967]).
En una carta de Knuth [1964], está contenida la propuesta de que BNF, que
comenzó como una abreviatura de Backus Normal Form (forma normal de Backus), se
leyera Backus-Naur Form (forma de Backus-Naur), para reconocer las contribuciones de
Naur como editor del informe de ALGOL 60 (Naur [1963]).
Las definiciones dirigidas por la sintaxis son una forma de definición inductiva, en
la cual la inducción se encuentra en la estructura sintáctica. Como tales, han sido muy
utilizadas en matemática. Su aplicación a los lenguajes de programación se introdujo con
el uso de una gramática para estructurar el informe de ALGOL 60. Poco tiempo después,
Irons [1961] construyó un compilador dirigido por la sintaxis.
Las ventajas de dividir un compilador en una etapa inicial y otra final se analizaron
en un informe del comité de Strong y colaboradores [1958]. El informe acuño el término
UNCOL (del inglés universal computer oriented language, lenguaje orientado a un
computador universal) para un lenguaje intermedio universal. El concepto ha quedado
como un ideal.
21 de 29
determinadas por el ambiente en que se creó el lenguaje. Cuando se diseñó FORTRAN en
1954, las tarjetas perforadas eran un medio común de entrada. En FORTRAN se ignoraron
los espacios en blanco debido en parte a que los perforistas, que preparaban las tarjetas a
partir de notas escritas a mano, tendían a equivocarse al contar los espacios en blanco
(Backus [1981]). La separación en ALGOL 58 de la representación en hardware a partir del
lenguaje de referencia fue un acuerdo alcanzado debido a que un miembro del comité de
diseño insistió: "No, nunca usaré un punto para el signo decimal". (Wegstein [1981]).
Knuth [1973] presenta otras técnicas para manejar la entrada con buffers. Feldman
[1979b] analiza las dificultades prácticas del reconocimiento de componentes léxicos en
FORTRAN 77.
Las expresiones regulares fueron estudiadas por primera vez por Kleene [1956], que
estaba interesado en describir los acontecimientos que se podían representar con el
modelo de autómata finito de actividad nerviosa de McCulloch y Pitts [1943]. La
minimización de los autómatas finitos fue estudiada por primera vez por Huffman [1954]
y Moore [1956]. La equivalencia entre autómatas determinísticos y no determinísticos en
cuanto a su capacidad para reconocer lenguajes fue mostrada por Rabin y Scott [1959].
McNaughton y Yamada [1960] describen un algoritmo para construir un AFD
directamente a partir de una expresión regular, que es el que se implementa en este
trabajo.
Las expresiones regulares y los autómatas finitos se han utilizado para muchas
aplicaciones, además de para la compilación. Muchos editores de texto usan expresiones
regulares para búsquedas dentro del texto. El sistema UNIX tiene tres programas de
búsqueda de propósito general basados en expresiones regulares: grep, egrep y fgrep. El
programa grep no permite unión o paréntesis para agrupar en sus expresiones regulares,
pero si una forma limitada de referencia hacia atrás como en SNOBOL. Actualmente, grep
se encuentra en casi todos los sistemas operativos de computadoras personales. También
se utilizan las expresiones regulares en lenguajes de consultas de bases de datos y en
lenguajes para procesamiento de archivos, como AWK (Aho, Kernighan y Weinberger
[1979]). Jarvis [1976] utilizó expresiones regulares para describir rasgos distintivos en
circuitos impresos.
22 de 29
desarrollo de las gramáticas independientes del contexto. Se inventaron diversas técnicas
generales para analizar cualquier gramática independiente del contexto. Una de las
primeras es la técnica de programación dinámica descubierta independientemente por
Younger [1967] y Kasami [1965]. Como tesis doctoral, Earley [1970] también desarrolló un
algoritmo de análisis sintáctico universal para todas las gramáticas independientes del
contexto.
Las gramáticas LL fueron estudiadas por Lewis y Stearns [1968] y sus propiedades
se desarrollaron en Rosenkrantz y Stearns [1970]. Los analizadores sintácticos predictivos
fueron estudiados a fondo por Knuth [1971]. Lewis, Rosenkrantz y Stearns [1976]
describen el uso de los analizadores sintácticos predictivos en los compiladores. En
Tamagnini [1994] se presenta un generador de tablas para el análisis sintáctico LL(1). Los
algoritmos para convertir gramáticas a la forma LL(1) se introducen en Foster [1968],
Wood [1969], Stearns [1971] y Soisalon-Soininen y Ukkonen [1979].
Watt [1977] utilizó no terminales marcadores para garantizar que los valores de los
atributos heredados aparezcan en una pila durante el análisis sintáctico ascendente. Las
23 de 29
posiciones en los lados derechos de las reglas donde se pueden insertar los no terminales
marcadores sin perder la propiedad LR(1) son estudiadas por Purdom y Brown [1980].
24 de 29
Bibliografía
Faltan agregar varios libros, pero las utilizadas hasta el momento son las siguientes, por
orden de importancia.
Bibliografía Principal
Alfred Aho - Ravi Sethi - Jeffrey Ullman [1990]. "Compiladores: Principios Técnicas y
Herramientas". Addison-Wesley Iberoamericana.
Sanchis Llorca - Galán Pascual [1986]. "Compiladores: Teoría y Construcción". Paraninfo.
Alfred Aho - Jeffrey Ullman [1977]. "Principles of Compiler Design". Addison-Wesley.
Manuales del Programador del Sistema Operativo XENIX. Microsoft Corp.
Bjarne Stroustrup [1992]. "The C++ Programming Language - 2nd Edition". Addison-
Wesley.
Manuales del Programador del Borland C++ 4.02 para Windows. Borland Intl. Inc.
Manuales del Programador del Borland C++ 2.0 para OS/2. Borland Intl. Inc.
Manuales del Programador del Borland C++ 4.5 para Windows. Borland Intl. Inc.
Manuales del Programador de Paradox 4.5 para Windows. Borland Intl. Inc.
Manuales del Programador de dBase V para Windows. Borland Intl. Inc.
"Reference Guide" del Borland Visual Solutions Pack Volume 1 para Windows. Capítulo
51: "SQL Primer", págs. 665 a 674. Borland Intl. Inc.
J. Tamagnini [1994]. "Un generador de analizadores sintácticos recursivos descendentes".
Tesis de Grado. Universidad Católica de Santiago del Estero.
Allen Holub [1990]. "Compiler Design in C". Prentice Hall.
Christian Nique [1985]. "Introducción metódica a la gramática generativa". Ediciones
Cátedra.
Bjarne Stroustrup [1994]. "The design and Evolution of C++". Addison Wesley. Págs. 337
a 381.
A. V. Aho y S. C. Johnson [1974]. "LR Parsing". Computing Surveys 6:2, págs 99-124.
A. V. Aho, S. C. Johnson y J. D. Ullman [1977]. "Code generation for expressions with
common subexpressions". Journal ACM 14:1, págs. 146-160.
A. V. Aho, B. W. Kernighan y P. J. Weinberger [1979]. "AWK - a pattern scanning and
25 de 29
processing language". Software - Practice and Experience 9:4, págs. 267-280.
A. V. Aho y J. D. Ullman [1972]. "The Theory of Parsing, Translation and Compiling, Vol
I: Parsing". Prentice-Hall.
A. V. Aho y J. D. Ullman [1973a]. "The Theory of Parsing, Translation and Compiling, Vol
II: Compiling". Prentice-Hall.
A. V. Aho y J. D. Ullman [1973b]. "A technique for speeding up LR(k) parsers". SIAM J.
Computing 2:2, págs. 106-127.
T. Anderson, J. Eve y J. J. Horning [1973]. "Efficient LR(1) Parsers". Acta Informatica 2:1,
págs. 12-39.
R. C. Backhouse [1976]. "An alternative aproach to the improvement of LR parsers". Acta
Informatica 6:3, págs. 277-296.
J. W. Backus [1981]. "Transcript of presentation on the history of Fortran I, II and III". En
Wexelblat [1981], págs 45-66.
F. L. Bauer [1976]. "Historical remarks on compiler construction". en Bauer y Eichel [1976],
págs 603-621. Suplemento de Ershov. A. P. págs 622-626.
F. L. Bauer y J. Eichel [1976]. "Compiler Construction: An Advanced Course". 2da
Edición. Lecture Notes in Computer Science 21, Springer-Verlag, Berlín.
B. M. Brosgol [1974]. "Deterministic Translation Grammars". Tesis doctoral, TR 3-74.
Universidad de Harvard, Cambridge, Massachusetts.
Noam Chomsky [1956]. "Three models for the description of language". IRE Trans. on
Information Theory IT-2:3, págs. 113-124.
M. E. Conway y W. L. Maxwell [1963]. "CORC - the Cornell computing language". Comm.
ACM 6:6, págs. 317-321.
M. E. Conway y T. R. Wilcox [1973]. "Design and implementation of a diagnostic compiler
for PL/I". Comm. ACM 16:3, págs. 169-179.
A. J. Demers [1975]. "Elimination of single productions and merging of nonterminal
symbols in LR(1) grammars". Journal of Computer Languages 1:2, págs. 105-119.
F. DeRemer [1969]. "Practical Translators for LR(k) Languages". Tesis doctoral, M.I.T.,
Cambridge, Massachusetts.
F. DeRemer [1971]. "Simple LR(k) grammars". Comm. ACM 14:7, págs. 453-460.
J. Earley [1970]. "An efficient context-free parsing algorithm". Comm. ACM 13:2, págs. 94-
102.
J. Earley [1975]. "Ambiguity and precedence in syntax description". Acta Informática 4:2,
págs. 183-192.
S. I. Feldman [1979]. "Implementation of a portable Fortran 77 compiler using modern
tools". ACM SIGPLAN Notices 14:8, págs 255-265.
J. M. Foster [1968]. "A syntax improving program". Computer Journal 11:1, págs. 31-34.
C. A. R. Hoare [1962]. "Report on the Elliott ALGOL translator". Computer Journal 5:2,
26 de 29
págs. 127-129.
D. A. Huffman [1954]. "The synthesis of sequential machines". J. Franklin Inst. 257, págs.
3-4, 161, 190, 275-303.
P. Z. Ingerman [1967]. "Panini-Backus form suggested". Comm. ACM 10:3, pág. 137.
E. T. Irons [1961]. "A syntax directed compiler for ALGOL 60". Comm. ACM 4:1, págs 51-
55.
J. F. Jarvis [1976]. "Feature recognition in line drawings using regular expressions". Proc.
3rd Intl. Joint Conf. on Pattern Recognition, págs. 189-192.
W. L. Johnson, J. H. Porter, S. I. Ackley y D. T. Ross [1968]. "Automatic generation of
efficient lexical processors using finite state techniques".
M. L. Joliat [1976]. "A simple technique for partial elimination of unit productions from
LR(k) parser tables". IEEE Trans. on Computers C-25:7, págs. 763-764.
T. Kasami [1965]. "An efficient recognition and syntax analysis algorithm for context-free
languages". AFCRL-65-758, Air Force Cambridge Research Laboratory, Bedford,
Massachusetts.
B. W. Kernigan y R. Pike [1984]. "The UNIX Programming Environment". Prentice-Hall.
S. C. Kleene [1956]. "Representation of events in nerve nets". en Shannon y McCarthy
[1956], págs. 3-40.
D. E. Knuth [1964]. "Backus Normal Form vs. Backus Naur Form". Comm. ACM 7:12,
págs. 735 y 736.
D.E. Knuth[1965]. "On the translation of languages from left to right". Information and
Control 8:6, págs. 607-639.
D.E. Knuth [1971]. "Top-down syntax analysis". Acta Informatica 1:2, págs. 79-110.
D.E. Knuth [1973]. "The Art of Computer Programming: Vol 1 2nd Edition, Fundamental
Algorithms", Addison-Wesley.
A. J. Korenjak [1969]. "A practical method for constructing LR(k) processors". Comm
ACM 12:11, págs. 613-623.
M. E. Lesk [1975]. "Lex - a lexical analyzer generator". Computing Science Technical
Report 39, AT&T Bell Laboratories.
J. K. Levy [1975]. "Automatic correction of syntax errors in programming languages". Acta
Informatica 4, págs. 271-292.
P. M. Lewis II, D. J. Rosenkrantz y R. E. Stearns [1976]. "Compiler Design Theory".
Addison-Wesley.
P. M. Lewis II y R. E. Stearns [1968]. "Syntax-directed transduction". J. ACM 15:3, págs.
465-488.
P. Lucas [1961]. "The structure of formula translators". Elektronische Rechenanlagen 3,
págs 159-166.
J. McCarthy [1963]. "Towards a mathematical science of computation". Information
27 de 29
Processing 1962, págs 21-28.
R. M. McClure [1965]. "TMG - a syntax-directed compiler". Proc. 20th ACM National
Conf., págs. 262-274.
W. S. McCullough y W. Pitts [1943]. "A logical calculus of the ideas immanent in nervous
activity". Bulletin of Math. Biophysics 5, págs. 115-133.
R. McNaughton y H. Yamada [1960]. "Regular expressions and state graphs for
automata". IRE Trans. on Electronic Computers EC-9:1, págs. 38-47.
E. F. Moore [1956]. "Gedanken experiments in sequential machines". En Shannon y
McCarthy [1956], págs 129-153.
P. G. Moulton y M. E. Muller [1967]. "DITRAN - a compiler emphasizing diagnostics".
Comm. ACM 10:1, págs. 52-54.
P. Naur [1963]. "Revised report on the algorithmic language ALGOL 60". Comm. ACM 6:1,
págs. 1-17.
D. Pager [1977]. "Eliminating unit productions from LR(k) parsers". Acta Informatica 9,
págs. 249-268.
V. R. Pratt [1973]. "Top-down operator precedence". ACM Symposium on Principles of
Programming Languages, págs. 41-51.
P. Purdom y C. A. Brown [1980]. "Semantic routines and LR(k) parsers". Acta Informatica
14:4, págs. 299-315.
M. O. Rabin y D. Scott [1959]. "Finite automata and their decision problems". IBM Journal
of Research and Development 3:2, págs. 114-125.
J. Röhrich [1980]. "Methods for the automatic construction of error correcting parsers".
Acta Informatica 13:2, págs. 115-139.
D. J. Rosenkrantz y R. E. Stearns [1970]. "Properties of Deterministics top-down
grammars". Information and Control 17:3, págs. 226-256.
D. V. Schorre [1964]. "Meta-II: a syntax-oriented compiler writing language". Proc. 19th
ACM National Conf., DI., 3-1 - DI. 3-11.
C. Shannon y J. McCarthy [1956]. "Automata Studies". Princeton University Press.
E. Soisalon-Soininem [1980]. "On the space optimizing effect of eliminating single
productions from LR parsers". Acta Informatica 12, págs. 157-174.
E. Soisalon-Soininem y E. Ukkonen [1979]. "A method for transforming grammars into
LL(k) form". Acta Informatica 12, págs. 339-369.
R. E. Stearns [1971]. "Deterministic top-down parsing". Proc. 5th Annual Princeton Conf.
on Information Sciences and Systems, págs. 182-188.
J. Strong, J. H. Wegstein, A. Tritter, J. Olsztyn, O. Mock y T. Steel [1958]. "The problem
of programming communication with changing machines: a proposed solution". Comm.
ACM 1:8
28 de 29
(agosto), págs 12-18. Segunda parte 1:9 (setiembre), págs 9-15. Informe del Comité sobre
lenguas universales.
K. C. Tai [1978]. "Syntactic error correction in programming languages". IEEE Trans.
Software Engineering SE-4:5, págs. 414-425.
T. Tokuda [1981]. "Eliminating unit reductions from LR(k) parsers using minimum
contexts". Acta Informatica 15, págs. 447-470.
D. A. Watt [1977]. "The parsing problem for affix grammars". Acta Informatica 8, págs. 1-
20.
J. H. Wegstein [1981]. "Notes on ALGOL 60". en Wexelblat [1981], págs. 126-127.
R. L. Wexelblat [1981]. "History of Programming Languages". Academic Press. New
York.
D. Wood [1969]. "The Theory of left factored languages". Computer Journal 12:4, págs.
349-356.
D. H. Younger [1967]. "Recognition and parsing of context-free languages in time n3 ".
Information and Control 10:2, págs. 189-208.
29 de 29