Download - 1er Informe - Analizador Sintactico
-
UNIVERSIDAD NACIONAL MAYOR DE
SAN MARCOS
(Universidad del Per, DECANA DE AMRICA)
LENGUAJES Y TRADUCTORES INFORME N1
PROFESOR : JAIME PARIONA
INTEGRANTES:
Espinoza Benavides Cesar Augusto 08200096
Soria Linares, Hctor J. 10200230
Ciudad Universitaria, Junio 2013
-
U.N.M.S.M
INFORME DE LENGUAJES Y TRADUCTORES
ELABORACION DE UN ANALIZADOR LEXICOGRAFICO Y SINTACTICO PARA UN
LENGUAJE DEFINIDO USANDO LA HERRAMIENTA JAVACC
TRADUCTOR
Un traductor es un programa que toma como entrada un texto escrito en un lenguaje, llamado fuente, y da
como salida otro texto en un lenguaje denominado objeto.
Si el lenguaje fuente es un lenguaje de programacin de alto nivel y el objeto es un lenguaje de bajo nivel
(ensamblador o cdigo de maquina), a dicho traductor se le denomina compilador.
Un ensamblador es un compilador cuyo lenguaje fuente es el lenguaje ensamblador. Un intrprete no
genera un programa equivalente, sino que toma una sentencia del programa fuente en un lenguaje de alto
nivel y la traduce al cdigo equivalente y al mismo tiempo lo ejecuta.
Una tarea frecuente en las aplicaciones de las computadoras es el desarrollo de programas de interfaces e
intrpretes de comandos, que son ms pequeos que los compiladores pero utilizan las mismas tcnicas.
En los traductores, en forma general, se deben seguir una serie de etapas que difieren muy poco con
respecto a las etapas de un compilador; solo en la etapa de sntesis puede haber variaciones porque la
traduccin final no siempre es hacia un bajo nivel.
FASES Y ETAPAS DEL COMPILADOR
En general todo compilador debe tener una etapa de anlisis y una de sntesis. La primera realiza toda la
evolucin y verificacin del cdigo fuente y la sntesis es donde se realiza la traduccin final (Ver Figura
1).
En la fase de anlisis lxico se revisa o se examina el programa fuente como una cadena de izquierda a
derecha y se generan los componentes lxicos o token a partir de una secuencia de caracteres que tenga
un significado valido.
Luego, en la fase de anlisis sintctico, recibe todos los componentes lxicos reconocidos en la etapa
anterior y los agrupa en forma jerrquica a travs de la gramtica independiente del contexto (define si
est bien escrito). Seguidamente, en la etapa de anlisis semntico, el compilador intenta detectar
construcciones que tengan la estructura sintctica correcta pero que no tengan significado para la
operacin implicada y por ltimo en la generacin de cdigo se toma el programa y se crea un cdigo
intermedio que generalmente lo traen todos los compiladores.
La fase de anlisis lxico se constituye en la fase de estudio necesaria para la construccin del analizador
lexicogrfico en cuestin.
Figura 1. Fases de un Compilador
JAVACC (Java Compiler Compiler Meta Compilador en Java )
Se trata de una herramienta que facilita la construccin de analizadores lxico y sintctico por el mtodo
de las funciones recursivas, aunque permite una notacin muy relajada parecida a la BNF (abreviatura en
ingls de Forma de Backus Naur). De esta manera, los analizadores generados utilizan la tcnica
descendente a la hora de obtener el rbol sintctico.
JavaCC integra en una misma herramienta al analizador lexicogrfico y al sintctico, y el cdigo que
genera es independiente de cualquier biblioteca externa, lo que le confiere una interesante propiedad de
independencia respecto al entorno.
A grandes rasgos, sus principales caractersticas son las siguientes:
-
U.N.M.S.M
INFORME DE LENGUAJES Y TRADUCTORES
Las especificaciones lxicas y sintcticas se ubican en un solo archivo.
Admite el uso de estados lxicos y la capacidad de agregar acciones lxicas incluyendo un
bloque de cdigo Java para el identificador de un token.
Incorpora distintos tipos de tokens: normales (TOKEN), especiales (SPECIAL_TOKEN),
espaciadores (SKIP) y de continuacin (MORE). Ello facilita trabajar con especificaciones ms
claras, a la vez que permite una mejor gestin de los mensajes de error y advertencia por parte de
JavaCC en tiempo de metacompilacin.
La especificacin lxica puede definir tokens de manera tal que no se diferencien las maysculas
de las minsculas bien a nivel global, bien en un patrn concreto.
Tambin es considerado altamente eficiente, lo que lo hace apto para entornos profesionales y lo
ha convertido en uno de los metacompiladores ms extendidos (quizs el que ms, por encima de
JFlex/Cup).
La estructura bsica de un programa en JavaCC es como se aprecia en la Figura 2.
Figura 2. Estructura de un programa en JavaCC
LENGUAJE PROPUESTO
int a = 2 , b
double c = 1
complejo x (2 , 3) , y
complejo r
imprime x , y
y = x + (4 , 3)
x = x + y
y = x * r
if ( a > 1)
imprime x
endif
while (c < 3)
y = y + (2 , 4)
imprime y
wend
-
U.N.M.S.M
INFORME DE LENGUAJES Y TRADUCTORES
1
4 3 2
0
8 7 6 5
11
9
10
13
12
25 24
16 15
14
21 22
18 17
19 20
23
=
$
,
,
,
,
,
(
(
)
)
=
+
*
$
$
$
$ $ $
$ ,
,
imprime
-
U.N.M.S.M
INFORME DE LENGUAJES Y TRADUCTORES
GRAMATICA
< decl>
if else endif
while wend
( )
,
< id >
< id > =
complejo
,
< id >
< id > ( , )
imprime
< id >
, < id >
< id >
+
* < id >
-
U.N.M.S.M
INFORME DE LENGUAJES Y TRADUCTORES
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
< id >
< id >
int | float | double
< | > | =
< id >
a | b | c .. | z
ESTRUCTURA DEL PROGRAMA EN JAVACC
Los programas en JavaCC siguen esta estructura general:
options{
...
}
PARSER_BEGIN( Nombre )
public class Nombre{
...
...
}
PARSER_END( Nombre )
Produccin
En la parte de options se colocan las opciones de JavaCC, es opcional, a partir
de PARSER_BEGIN hasta PARSER_END es la declaracin del programa en Java, por
ltimo, en la parte de produccin se colocan las Gramticas y Expresiones Regulares.
PARSER_BEGIN (Complejos)
// Aqu estar la clase main que va crear el objeto parser, ac tambin se ingresaran las lneas de
sentencias y se ejecutara la clase programa definida en la gramtica.
PARSER_END (Complejos)
// Ac estarn las clases y las reglas de produccin definidas en la gramtica, Estarn clases
para crear numero complejo, imprimir y las operaciones de suma y multiplicacin entre
complejos, cada una con su regla de produccin respectiva.