Você está na página 1de 21

Introduccin al anlisis sintctico

Parte I

Esquema General
Limitaciones de los lenguajes regulares
Resumen del anlisis sintctico Gramticas libres de contexto Derivaciones

Lenguajes y Autmatas
Los lenguajes Formales son muy importantes en Ciencias de la Computacin.
Especialmente en los lenguajes de programacin

Lenguajes Regulares
Aunque es el lenguaje formal ms simple, es el ms usado. Muchas aplicaciones (buscadores, circuitos, etc.)

Pero tambin, estudiaremos lenguajes libres de contexto.

Limitaciones de los lenguajes Regulares


Intuicin: Un autmata finito que se ejecuta por un tiempo prolongado debe repetir estados Un autmata finito no puede recordar el nmero de veces que ha visitado un estado en particular. Un autmata finito tiene memoria finita
Memoria para almacenar en que estado esta. nicamente puede contar hasta un lmite.

Por ejemplo, el lenguaje de los parntesis balanceados no es regular {(i)i| i>=0}

Recordando la estructura de un Compilador

La funcionalidad de un Parser (rbol sintctico)


Entrada: Secuencia de tokens de un analizador lxico
Salida: el rbol sintctico de un programa

Ejemplo
Fragmento de programa en CIf x==y 1 else 2

Entrada al Parser
IF ID == ID INT ELSE INT

Salida del Parser


IF--ELSE == ID ID INT INT

Comparacin con el analizador lxico


Fase Entrada Salida

Lexer

Secuencia de caracteres Secuencia de tokens

Secuencia de tokens rbol Sintctico

Parser

El rol del Parser


No todas las secuencias de tokens son programas El parser debe distinguir entre secuencias de tokens vlidos y no vlidos. Necesitamos
Un lenguaje para describir secuencias de tokens vlidas. Un mtodo para distinguir entre secuencias de tokens vlidas y no vlidas.

Estructura de un lenguaje de programacin


Los lenguajes de programacin tienen estructuras recursivas Considere el lenguaje de las expresiones aritmticas con: enteros, +,*, ( y ) Una expresin es cualquiera de:
Un entero Una expresin seguida de + seguida de otra expresin. Una expresin seguida de * seguida de otra expresin. Un ( seguido de una expresin seguido de un )

Ejemplos
int
int + int (int + int ) * int Son expresiones.

Notacin para lenguajes de programacin


Una notacin alternativa
E int EE+E EE*E E (E)

Podemos pensar en estas reglas como reglas de reescritura.


Comenzamos con E y reemplazamos ocurrencias de E con alguna regla que esta a la derecha. E E * E (E) * E (E + E) * E (int + int) * int

Observaciones
Todas las expresiones aritmticas se pueden obtener por una secuencia de reemplazos Cualquier secuencia de reemplazos forma una expresin aritmtica vlida Esto significa que no podemos obtener ( int )) mediante reemplazos. Porqu? Esta notacin es una gramtica libre de contexto

Gramticas libres de contexto


Una gramtica libre de contexto consiste de:
Un conjunto de no terminales N
Por convencin, se escriben con letras maysculas en estas notas

Un conjunto de terminales T
Por convencin se escriben con nombres de letras minsculas o puntuacin.

Un smbolo inicial S (un no terminal) Un conjunto de producciones de la forma


E ,o E Y1Y2 Yn donde E N donde Yi NT

Ejemplo de GLC
Expresiones aritmticas simples
E int EE+E EE*E E(E)

Un no terminal: E Varios terminales: int, +, *, (, )


Llamados terminales por que nunca se reemplazan

Por convencin el primer no terminal para la primera produccin es el smbolo inicial.

El lenguaje de una GLC


Las producciones se leen como reglas de reemplazo
X Y1 Yn
Significa X se puede reemplazar por Y1 Yn

X
Significa X puede ser borrada (reemplazada por la cadena vaca)

Idea Clave
1. Comenzar con una cadena que consiste del smbolo inicial S 2. Reemplaza cualquier no terminal X en la cadena por una del lado derecho de alguna produccin
X Y1 Yn

3. Repite (2) hasta que haya nicamente terminales en la cadena.

El lenguaje de una GLC (Cont)


De manera formal, escribimos
X1Xi-1XiXi+1Xn X1Xi+1Y1YmXi+1Xn

Si hay una produccin


Xi Y1 Ym

El lenguaje de una GLC (Cont)


Escribimos
X1 Xn * Y1 Ym

Si
X1 Xn Y1 Ym

En 0 ms pasos

El lenguaje de una GLC


Sea G una GLC con smbolo inicial S. Entonces el lenguaje de G es:
a1an S *a1an y cada ai es un terminal

Ejemplo
S0 tambin se escribe como S 0 1 S1 Genera el lenguaje {0,1}
La gramtica S 1A A 0 1 La gramtica S 1A A 0 1A La gramtica S (S)

Você também pode gostar