Sunteți pe pagina 1din 14

INSTITUTO POLITECNICO

NACIONAL
UPIICSA

HERRAMIENTAS
AUTOMATIZADAS PARA UN
ANALIZADOR SINTACTICO

EQUIPO 5
Por qu hacer anlisis sintctico?

Podemos proveer una definicin precisa y


fcil de entender

Una gramtica apropiada imparte


estructura a un lenguaje de programacin

Podemos construir automticamente un


parser que determine si el programa es
sintcticamente correcto

Ayuda en el proceso de traduccin

Fcil modificar/aadir al lenguaje


Anatoma de un Compilador
Entrada y Salida de
un Parser
ENTRADA:

Token Stream rbol de Parseo


Implementando un Parser
Implementar un parser para algunas
CFGs puede ser muy difcil
Tenemos que ver el input y elegir una
produccin
No podemos elegir una produccin sin
look ahead

Hay varias tcnicas


Cada una puede manejar algunas CFGs
Categorizacin de las tcnicas
Qu es una herramienta de anlisis
sintctico?

Una herramienta de anlisis


sintctico nos permitir averiguar si
un fichero de entrada cualquiera
respeta las reglas de una
Gramtica concreta.Grammatica
ANT
LR parser
generator
Ejemplos
YAC de ellas GNU
C son: Bison
Java
CC
ANTLR cae dentro de la categora de
meta-programas, por ser un programa
Que es que escribe otros programas.
Partiendo de la descripcin formal de
ANTLR? la gramtica de un lenguaje, ANTLR
genera un programa que determina si
una sentencia o palabra pertenece a
ANTLR(ANother Tool for dicho lenguaje (reconocedor),
Language Recognition; en utilizando algoritmos LL(*) de parsing.
espaol "otra herramienta Si a dicha gramtica, se le aaden
para reconocimiento de acciones escritas en un lenguaje de
lenguajes") es una programacin, el reconocedor se
herramienta creada transforma en un traductor o
principalmente por intrprete.
Terence Parr, que opera Adems, ANTLR proporciona
sobre lenguajes, facilidades para la creacin de
proporcionando un marco estructuras intermedias de anlisis
para construir (como ser ASTs - Abstract Sintax Tree),
reconocedores (parsers para recorrer dichas estructuras, y
),intrpretes,compiladore provee mecanismos para recuperarse
sy traductores de automticamente de errores y realizar
lenguajes a partir de las Cmo
reportes de los mismos.
descripciones ANTLR esfunciona?
un proyecto bajo licencia
gramaticales de los BSD, viniendo con todo el cdigo
GNU Bison C
m
Qu f un
c io
o
es? ? na
Bison convierte la descripcin formal de
GNU bison es un
un lenguaje, escrita como una
programa generador de
gramtica libre de contexto LALR, en un
analizadores sintcticos
programa en C, C++, o Java que realiza
de propsito general
anlisis sintctico. Es utilizado para
perteneciente al proyecto
crear analizadores para muchos
GNU disponible para
lenguajes, desde simples calculadoras
prcticamente todos los
hasta lenguajes complejos. Para utilizar
sistemas operativos, se
Bison, es necesaria experiencia con la
usa normalmente
sintaxis usada para describir
acompaado de flex
gramticas.
aunque los analizadores
GNU bison tiene compatibilidad con
lexicos se pueden
Yacc: todas las gramticas bien escritas
tambin obtener de otras
para Yacc, funcionan en Bison sin
formas.
necesidad de ser modificadas.
Cualquier persona que est
familiarizada con Yacc podra utilizar
Bison sin problemas.
Grammatica es un Se lee un archivo de la gramtica
generador de C # y Java (en un formato Extended Backus
parser (compilador Naur Form) y crea as un comentario
compilador).Mejora en las legible en C # o cdigo fuente de
herramientas similar Java para el analizador. Da una
(como yacc y ANTLR) recuperacin automtica de errores,
creando as, un los mensajes de error de lectura y
comentario y el cdigo una clara separacin entre la
fuente legible, por tener gramtica y el cdigo fuente.
la recuperacin
automtica de errores y
mensajes de error

c a
detallados, y por el apoyo
i t or
Grammatica apoya LL (k) las

a t
para probar y depurar las gramticas con un nmero

m ra
gramticas sin generar ilimitado de fichas de la
m
cdigo fuente.
n e ventaja mirada. Es bastante
r a ge bien probado, y se ha auto-
G r recibimiento desde la versin

rse 0.1.La documentacin

pa contiene una completalista


de caractersticas, as como
unacomparacin con otros
generadores analizador.
JavaCC (Java Compiler
Compiler) es un generador
de analizadores sintcticos
de cdigo abierto para el
lenguaje de programacin
Java. JavaCC es similar a J
Yacc en que genera un
parser para una gramtica a
presentada en notacin
BNF, con la diferencia de
que la salida es en cdigo
v
Java. A diferencia de Yacc,
JavaCC genera analizadores
a En 1996, Sun
Microsystems liber un
descendentes (top-down), lo
parser llamado Jack.
que lo limita a la clase de
Los desarrolladores
gramticas
particular, la
LL(K) (en
recursin C responsables de Jack
crearon su propia
desde izquierda no se
puede usar). El constructor C compaa llamada
Metamata y cambiaron
de rboles que lo
el nombre Jack a
acompaa, JJTree, construye
JavaCC. Metamata se
rboles de abajo hacia
convirti en WebGain.
arriba (bottom-up).
Despus de que
Yacc
Yacc no es directamente un analizador sino un generador de
analizadores. A partir de un fichero fuente en yacc, se genera un
fichero fuente en C que contiene el analizador sintctico. Sin
embargo, un analizador sintctico de yacc no puede funcionar por
s solo, sino que necesita un analizador lxico externo para
funcionar. Dicho de otra manera, el fuente en C que genera yacc
contiene llamadas a una funcin yylex() que debe estar definida y
debe devolver el tipo de lexema encontrado. Adems, es necesario
incorporar tambin una funcin yyerror(), que ser invocada
<Seccin
cuando el analizador sintctico encuentre un smbolo de no
que
Un programa fuente de Yacc se
encaja en la gramtica. definiciones>
parece bastante a uno de lex. La
%%
diferencia principal est en la
<Seccin de reglas>
seccin de reglas, que en vez de
(obligatoria)
expresiones regulares contiene
%%
las reglas de la gramtica:
<Seccin de
rutinas>
LA SECCIN DE DECLARACIONES
puede incluir varias cosas, tal y como ocurra en lex, pero ahora su
funcin principal no es definir expresiones regulares, sino declarar los
smbolos terminales de la gramtica mediante la directriz %token.
Todo lo que no sea un terminal, ser considerado un smbolo no
terminal, y por tanto debe haber un a regla para l:
%token IF,ELSE,LLAVE_AB,LLAVE_CE,IDENT

LA SECCIN DE REGLAS
contiene la gramtica en s. Componentes es una combinacin de
terminales y no terminales que describe al no terminal de la izquierda
de la regla:
no_terminal: componentes {acciones en C}

LA SECCIN DE RUTINAS
tiene la misma funcin que la de lex, pero yacc (dependiendo de su
variante) no define por defecto las funciones main(), yylex() e
yyerror(), as que hay que incluirlas aqu, o bien en otro fichero que se
enlazar en la fase final de la compilacin.
Yacc genera una funcin llamada yyparse() que contiene el
analizador sintctico. Esta funcin se comporta como una
mquina de estados cuya misin es intentar reducir todo el
fichero de entrada al smbolo inicial de la gramtica (el primero
que se haya definido). Si yacc lo consigue, el analizador
sintctico volver sin error, y en caso contrario, se invocar a la
Seccin de Reglas en
Yacc
Una regla de yacc es parecida a una de lex, pero en vez de
un patrn regular, especifica una regla de la gramtica.
Las reglas deben estar dadas de forma que la parte
izquierda conste de un nico smbolo no terminal, y la
parte derecha indique la combinacin de terminales y no
terminales de que puede estar compuesto. Adems, toda
regla debe incluir una accin en C que se ejecutar en
cuanto yacc consiga encontrar los componentes del
smbolo resultado:

smbolo_result: componentes accin_en_C

El smbolo resultado
debe estar situado en la primera posicin de la lnea, es
decir, que no puede haber espacios antes del smbolo
resultado.

Los componentes
son una combinacin de terminales y no terminales
separados por espacios en blanco.
Gracias
por su
atenci

S-ar putea să vă placă și