Vous êtes sur la page 1sur 21

COMPILADORES

ANLISIS SINTCTICO

Objetivos del Tema


Introducir el funcionamiento de un A.
sintctico
Introducir trminos utilizados
Presentar la especificacin en forma
de gramticas
Identificar los tipos de analizadores
sintcticos

ndice General
Introduccin
rboles de anlisis sintctico
Especificacin de un analizador
sintctico
Tipos de analizadores sintcticos

Introduccin

Funcin
Comprobar el orden en que llegan los

tokens
Construir una representacin del programa
fuente
Si es sintacticamente incorrecto generar
error
Siguiente Token()

Fuente

Analizador
Lxico

TOKENS

Tabla de
Smbolo

Analizador
Sintctico

Introduccin

Funcin principal

El parser es la unidad que gua todo


el proceso, o casi todo, de la
compilacin, ya que por un lado va
solicitando al lexer los tokens y al
mismo tiempo va dirigiendo el proceso
de anlisis semntico y generacin de
cdigo intermedio.

Funcionamiento

Programa
fuente

lexer
Tablas de
smbolos
y de tipos

token

Obtienen un rbol terico que permite


expresar el orden de los lexemas,
segn van apareciendo.
Ese rbol debe ser el modelo de donde
sale el anlisis semntico.
Para generar un parser tenemos 2
tecnicas:

Parser

rbol de
anlisis
sintctico

A manos
Mediante herramientas que lo generan
automticamente.

Para que un AS funcione debemos


especificar el lenguaje que debe leer
El lenguaje debe ser formal (tener
reglas bien definida)
Estas reglas se llaman gramticas.

Diseo de gramticas

Ejemplo
E::=E+T|T
T::=T*F|F
F::=id|F|(E)

Si queremos construir una cadena de tokens que


sean generados por una gramtica, podemos
hacerlo aplicando las reglas de la gramtica.
Por ejemplo: dada la siguiente gramtica:
E::=E+E|E*E|num|id|(E)
Intentaremos derivar el tokens: id1+id2*id3
Por la izq: E::=E*E=>E+E*E=>id1+E*E=>id1+id2*E=>id1+id2*id3

Diseo de Gramaticas

Para construir el rbol sintctico


E

id1

id2

id3

Dificultades

La recursividad: se expresa por medio


de una o mas reglas no recursivas
que son la base y una o mas regla
que son recursivas y que permite
hacer crecer la estructura del lenguaje
aplicndose as misma una y otra vez
A::=aAb

Dificultades

La ambigedad: cuando una gramtica


contiene una cadena para la que hay
mas de un rbol de anlisis sintctico se
dice que es ambigua.
Debido a que una gramtica de estas
caracterstica permite que a partir del
mismo cdigo fuente se puedan obtener
diferentes cdigos intermedios, no es
valida para construir un compilador.

Dificultades
La ambigedad
Si una gramtica tiene alguna de estas caracterstica
podremos afirmar que es ambigua
Gramatica con ciclo: S::=A|S::=a|A::=S
Gramatica con alguna regla de la forma: E::=E..E
Gramatica que ofrezcan caminos alternativos
S::=B|S::=C|B::=C
Producciones recursivas en las que las variables no
recursivas de la produccion puedan derivar a la cadena
vacia
S::=ABS|S::=s|A::=a||B::=b|a|

Dificultades

La asociatividad: es cuando se operan tres o


mas operandos
Por ejemplo:6/3/2, si el operador tiene asociatividad por
la izquierda, primero se opera 6/3 y el resultado con /2

La precedencia: indica el orden en el que se


aplicara respecto a los demas operadores en
caso de poder aplicar mas de uno. Es decir si
en una regla podemos aplicar mas de un
operador, comenzaremos aplicando el de mas
precedencia y terminaremos por aplicar el de
menor precedencia

Dificultades

La parentizacion: incluir parntesis a


la hora de evaluar expresiones en una
gramtica, se aade una variable que
produzca expresiones entre
parntesis. Los operandos se ponen a
la mayor distancia posible del smbolo
inicial (porque tiene la mayor
precedencia)

Anlisis Sintctico Lineal

Hay varios algoritmos de anlisis sintctico


(incluso para gramticas ambiguas), pero su
coste computacional es elevado. Si se
consigue eliminar la ambigedad, podemos
utilizar 2 estrategias:
Anlisis descendentes: partimos de la raz del
rbol sintctico y aplicamos las reglas por la
izquierda (LL(k))
Anlisis ascendentes: partimos de la cadena de
entrada y construimos el rbol a partir de las
hojas para llegar a la raz (LR(k))

Tipos de Analizadores
Descendentes

LL(1)
Es predictivo, solo necesita un componente lxico
Se aplica las producciones de izquierda
Orden de lectura de la entrada de izquierda a derecha

Analizadores
Sintcticos

SLR (1)

Ascendentes

LR (1)
LALR (1)

Diagrama de Sintaxis
Son grafos dirigidos donde los
elementos no terminales de la
gramtica aparecen como rectngulos
y los terminales como crculos o
elipses
Todo diagrama de sintaxis se supone
que tiene un origen y un destino
aunque no se dibujan.

Diagrama de sintaxis

Correspondencia entre la notacin


BNF y los diagramas de sintaxis.

BNF
AB
A|B

Diagrama de sintaxis

A
B

A|

Diagrama de Sintaxis
BNF

Diagrama de sintaxis

(A)*
A

(A)+
A

Ejemplos

Secuencia::=(sentencia ;)+
Sentencia

Sentencia::=identificador = Numero

Ejercicios

Disear una gramtica no ambigua para


el lenguaje de las expresiones que se
pueden construir con true y false y los
operadores booleanos or, and, not y
parntesis. La precedencia de mayor o
menor es not and or los dos ltimos son
asociativos por la derecha

Ejercicios

Crear los diagramas de sintaxis para


esta gramtica:

Programa::=Declaraciones Sentencias
Declaraciones::=(Decl ;)+
Decl::=Entero Identificador
Sentencia::=(Asignacion ;)+
Asignacion::=ParteIzq = ParteDer
ParteIzq::=Identificador
ParteDer::=Expresion
Expresion::=(Expresion + Expresion)|(Expresion - Expresion)
Expresion::= (Identificador | Numero)

Vous aimerez peut-être aussi