You are on page 1of 17

UNIVERSIDAD TCNICA

DEL NORTE
ANALIZADORES SINTCTICOS
INTEGRANTES: ANDRS SALGADO, CRISTIAN TAYAN

Analizadores sintcticos
se encarga de chequear el texto de entrada en base a una
gramtica dada. Y en caso de que el programa de entrada
sea vlido, suministra el rbol
sintctico que lo reconoce.

En teora, se supone que la salida del analizador


sintctico es alguna representacin del
rbol sintctico que reconoce la secuencia de
tokens suministrada por el analizador lxico.

Tokens: o tambin llamado


componente lxico es una cadena de
caracteres que tiene un significado
coherente en cierto lenguaje de
programacin. Ejemplos de tokens
podran ser palabras clave (if, else,
while, int, ...), identificadores,
nmeros, signos, o un operador de
varios caracteres, (por ejemplo, :=).

Errores sintcticos
Los errores en la programacin pueden ser de los
siguientes tipos:
Lxicos, producidos al escribir mal un identificador,
una palabra clave o un operador.
Sintcticos, por una expresin aritmtica o parntesis
no equilibrados.
Semnticos, como un operador aplicado a un
operando incompatible.
Lgicos, puede ser una llamada infinitamente
recursiva.
OBJETIVOS

El manejo de errores de
sintaxis es el ms complicado
desde el punto de vista de la
creacin de compiladores

Indicar los errores de forma


clara y precisa. Aclarar el tipo
de error y su localizacin.
Recuperarse del error, para
poder seguir examinando la
entrada.
No ralentizar significativamente
la compilacin.

Visin general del proceso

El primer estado es la generacin de tokens o anlisis lxico, en este proceso


la cadena de entrada se parte en smbolos con significado definidos por una
gramtica de expresiones regulares, por ejemplo, un programa calculador con
la siguiente entrada:

"12*(3+4) ^2",

la dividira en los siguientes tokens 12, *, (, 3, +, 4,), ^ y 2,

cada uno de estos smbolos tiene un significado en el contexto de la expresin


aritmtica. El analizador contendr reglas para indicar que los smbolos *, +,
^, (y) indican el comienzo de un nuevo token, de modo que otros tokens que
no tendran sentido como 12 o 13 no se generarn.

Visin general del proceso

El siguiente estado es el anlisis sintctico lo que significa comprobar que los


tokens forman una expresin vlida, esto se hace usualmente usando una
gramtica libre de contexto que define recursivamente componentes que
pueden aparecer en una expresin y el orden en que estos deben aparecer.

La fase final es el anlisis semntico, que trabaja en las implicaciones de la


expresin ya validada y realiza las actuaciones pertinentes. En el caso de la
calculadora, la accin es evaluar la expresin. Un compilador por el contrario
generar cdigo. Las gramticas de atributos pueden ser usadas tambin para
definir estas acciones.

Tipo de gramticas que acepta un


analizador sintactico

Gramtica: G (N, T, P, S)
N = No terminales.
T = Terminales.
P = Reglas de Produccin.
S = Axioma Inicial.
Ejemplo: Se considera la
gramtica que reconoce
las operaciones
aritmticas.

En el que: N = {E, T, F}
estn a la izquierda de
la regla.
T = {ID, NUM, ( ,) ,+ ,*}
P = Son las siete reglas
de produccin.
S = Axioma inicial.
Podra ser cualquiera,
en este caso es E.

Tipo de gramticas que acepta un


analizador sintactico

Derivaciones: La idea central es que se considera una produccin como una regla de
reescritura, donde el no terminal de la izquierda es sustituido por la cadena del lado
derecho de la produccin.
Constryase una
derivacin por la
izquierda y por la
derecha para la
siguiente frase:

a*c+b
( id1 * id2 + id3)

Derivacin a la izquierda

Derivacin a la derecha

Tipo de gramticas que acepta un


analizador sintactico
rbol sintctico de una sentencia de un lenguaje
Es una representacin que se utiliza para describir el proceso de derivacin de dicha sentencia.
Como nodos internos del rbol, se sitan los elementos no terminales de las reglas de
produccin que vayamos aplicando, y tantos hijos como smbolos existan en la parte derecha
de dichas reglas.
Veamos un ejemplo: Sea la gramtica anterior.

Supongamos que hay que reconocer: ( a + b ) * a + b

ANALISIS SINTACTICO DESCENDENTE

ANALISIS SINTACTICO DESCENDENTE

Anlisis Sintctico Descendente El


anlisis
sintctico descendente (ASD) intenta encontrar
entre las producciones de la gramtica la
derivacin por la izquierda del smbolo inicial
para una cadena de entrada.

ANALISIS SINTACTICO DESCENDENTE

Se llama descendente porque parte del smbolo inicial (la raz del rbol de
derivacin) y trata de llegar a la cadena de terminales (las hojas del rbol)

Para que se pueda usar en un compilador, el analizador sintctico debe tener


un coste temporal lineal, O(n)

Trata de, leyendo la cadena de entrada de izquierda a derecha (left-to-right),


obtener la derivacin vlida por la izquierda de la cadena de entrada
(leftmost derivation).

ANALISIS SINTACTICO
DESCENDENTE
Ejemplo:
Analizar la cadena de entrada cad
dada la gramtica siguiente:

cad, se toma la primera produccin

ANALISIS SINTACTICO DESCENDENTE

cad, se toma la segunda produccin.

siguiente hoja del rbol A cabd

ANALISIS SINTACTICO DESCENDENTE

cad se compara con la siguiente hoja del rbol etiquetada con b.


Como no concuerda, se indica el error y se vuelve a A para ver si hay otra
alternativa no intentada.

ANALISIS SINTACTICO DESCENDENTE

cad, se toma la siguiente alternativa que comienza por a.

siguiente hoja del rbol A, cad

ANALISIS SINTACTICO DESCENDENTE

cad, coincide d con d anlisis exitoso