Você está na página 1de 11

Un compilador sencillo de una

pasada

Universidad de Costa Rica


Facultad de Ciencias de la Computación e Informática
CI-1322 Autómatas y Compiladores
Byron Barquero Chaves
Carné: A50723
e-mail: barquechak@gmail.com
Definición de la sintaxis

ƒ Una gramática describe de forma natural la estructura jerárquica de


muchas construcciones de los lenguajes de programación.

ƒ Reglas como “prop -> if (expr) prop else prop de una lenguaje de
programación se denominan producciones.

ƒ En una producción, los elementos léxicos, como la palabra clave if y


los paréntesis se llaman componentes léxicos.

ƒ Las variables expr y prop representan secuencias de componentes


léxicos y se llaman no terminales.

2
Definición de la sintaxis (cont.)

Una gramática independiente del contexto tiene cuatro componentes:

1. Un conjunto de componentes léxicos, denominados símbolos


terminales.

2. Un conjunto de no terminales.

3. Un conjunto de producciones, en el que cada producción consta de


un no terminal, llamado lado izquierdo de la producción, una flecha
y una secuencia de componentes léxicos y no terminales, o ambos,
llamado lado derecho de la producción.

4. La denominación de uno de los no terminales como símbolo inicial.

3
Definición de la sintaxis (cont.)

Por ejemplo se tiene la siguiente gramática que describe la sintaxis para


expresiones como 9-5+2, 3-1 y 7.

lista -> lista + dígito


lista -> lista – dígito
lista -> dígito
dígito -> 0 | 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9

ƒ Un producción es para un no terminal si el no terminal aparece en le lado


izquierdo de la producción. Un conjunto de no terminales.

ƒ Una cadena de componentes léxicos es una secuencia de cero o más


componentes léxicos. Si la cadena posee cero componentes entonces se dice
que es una cadena vacía y se escribe ε.

ƒ Las cadenas de componentes léxicos derivadas del símbolo inicial forman el


lenguaje que define la gramática.

4
Árboles de análisis sintáctico

ƒ Un árbol de análisis sintáctico indica gráficamente cómo del símbolo inicial


de una gramática deriva una cadena del lenguaje.

X Y Z

ƒ Formalmente, dada una gramática independiente del contexto, un árbol de


análisis sintáctico es un árbol con las siguientes propiedades:

1. La raíz está etiquetada con el símbolo inicial.

2. Cada hoja está etiquetada con un componente léxico o con ε.

3. Cada nodo interior está etiquetado con un no terminal.

4. Si A es el no terminal que etiqueta a algún nodo interior y X1, X2, …, Xn son las etiquetas de los hijos
de ese nodo, de izquierda a derecha, entonces A -> X1X2…Xn es una producción. Aquí, X1,X2,…Xn
representa un símbolo que es un terminal o no terminal. Como caso especial, si A-> ε, entonces un
nodo etiquetado con A tiene sólo un hijo etiquetado con ε.

5
Ambigüedad

ƒ Una gramática puede tener más de un árbol de análisis sintáctico que


genere una cadena dada de componentes léxicos. Esta clase de
gramática se dice que es ambigua.

ƒ Para demostrar que una gramática es ambigua, lo único que se


requiere es encontrar una cadena de componentes léxicos que tenga
más de un árbol de análisis sintáctico.

6
Análisis sintáctico

ƒ El análisis sintáctico es el proceso que determinar si una cadena de


componentes léxicos puede ser generada por una gramática.

ƒ Para cualquier gramática independiente del contexto hay un


analizador sintáctico que toma como máximo un tiempo de O(n³) para
hacer el análisis de una cadena de n componentes léxicos.

ƒ La mayoría de los métodos de análisis sintáctico están comprendidos en


dos clases llamadas métodos descendentes y ascendentes.

ƒ Con los analizadores sintácticos descendentes se pueden construir


manualmente analizadores eficientes con mayor facilidad, sin embargo
los analizadores sintácticos ascendentes pueden manejar una clase
mayor de gramáticas y esquemas de traducción.

7
Análisis sintáctico descendente

ƒ Se presenta el análisis sintáctico descendente considerando una gramática


adecuada para esta clase de método.

type ==> simple


| ^ ID
| ARRAY [ simple ] OF type

simple ==> INTEGER


| CHAR
| NÚM PUNTOPUNTO NÙM

ƒ La construcción descendente de un árbol de análisis sintáctico se hace


empezando por la raíz, etiquetada con el no terminal inicial, y realizando de
forma iterada los dos pasos siguientes:

1. En el nodo n, etiquetado con el no terminal A, selecciónese una de las producciones para A y


constrúyase los hijos de n para los símbolos del lado derecho de la producción.
2. Encuéntrese el siguiente nodo en el que ha de construirse un subárbol.

ƒ El componente léxico analizado en curso en la entrada se denomina símbolo de


preanálisis.

8
Análisis sintáctico descendente (cont.)

9
Análisis sintáctico descendente (cont.)
Análisis sintáctico de la cadena array [ núm puntopunto núm ] of integer

10
Referencias Bibliográficas

ƒ Aho, Alfred V; Sethi, Ravi & Ullman, Jeffrey D. “Compiladores:


Principios, técnicas y herramientas”. Primera Edición. Addison
Wesley Longman de México S.A. de C.V.. México, 1998.

ƒ Notas del curso CI-1322 Autómatas y Compiladores, en la


Universidad de Costa Rica, II Semestre 2007.

11

Você também pode gostar