You are on page 1of 9

TECNOLGICO DE ESTUDIOS

SUPERIORES DE COACALCO
ISC

COMPILADOR YEHEJA

CASTILLEJA HERNANDEZ YETZEEL


VALENZUELA CRUZ ALEXIS JAIR
MEDINA ROMERO HCTOR JAVIER

LENGUAJES Y AUTOMATAS I

GRUPO: 3711

COACALCO DE BERRIOZABAL A: martes,


11 de julio de 2017
Objetivo:

Realizar un programa en java que pueda simular el anlisis semantico


con un lenguaje diferente al existente.
Marco Terico:

El anlisis sintctico convierte el texto de entrada en otras estructuras (comnmente


rboles), que son ms tiles para el posterior anlisis y capturan la jerarqua
implcita de la entrada. Un analizador lxico crea tokens de una secuencia de
caracteres de entrada y son estos tokens los que son procesados por el analizador
sintctico para construir la estructura de datos, por ejemplo, un rbol de anlisis o
rboles de sintaxis abstracta.

El anlisis sintctico tambin es un estado inicial del anlisis de frases de lenguaje


natural. Es usado para generar diagramas de lenguajes que usan flexin gramatical,
como los idiomas romances o el latn. Los lenguajes habitualmente reconocidos por
los analizadores sintcticos son los lenguajes libres de contexto. Cabe notar que
existe una justificacin formal que establece que los lenguajes libres de contexto
son aquellos reconocibles por un autmata de pila, de modo que todo analizador
sintctico que reconozca un lenguaje libre de contexto es equivalente en capacidad
computacional a un autmata de pila.

Los analizadores sintcticos fueron extensivamente estudiados durante los aos


1970, detectndose numerosos patrones de funcionamiento en ellos, cosa que
permiti la creacin de programas generadores de analizadores sintticos a partir
de una especificacin de la sintaxis del lenguaje en forma Backus-Naur por ejemplo,
tales como yacc, GNU bison y javaCC.

La principal tarea del analizador sintctico no es comprobar que la sintaxis del


programa fuente sea correcta. El analizador sintctico (A.S.) comprueba que el
orden en que el analizador lxico le va entregando los tokens es vlido. Si esto es
as significar que la sucesin de smbolos que representan dichos tokens puede
ser generada por la gramtica correspondiente al lenguaje del cdigo fuente
La forma ms habitual de representar la sintaxis de un programa es el rbol de
anlisis sintctico, y lo que hacen los analizadores sintcticos es construir una
derivacin por la izquierda o por la derecha del programa fuente, que en realidad
son dos recorridos determinados del rbol de anlisis sintctico SUS FUNCIONES
SON: Aceptar lo que es vlido sintcticamente y rechazar lo que no lo es. Hacer
explcito el orden jerrquico que tienen los operadores en el lenguaje de que se
trate. Por ejemplo, la cadena A/B*C es interpretada como (A/B)*C en FORTRAN y
como/(B*C) en APL. Guiar el proceso de traduccin (traduccin dirigida por la
sintaxis).

ANLISIS LXICO Es la primera fase del compilador que se encarga de leer el


cdigo fuente y procesarlo, tambin es conocido como escaneo Durante este
proceso se realizan operaciones bsicas de manejo de cadenas de acuerdo a
ciertas reglas del lenguaje, estas reglas las conocemos en teora computacional
como expresiones regulares.

ANLISIS SINTCTICO La siguiente fase de compilacin es el analizador


sintctico, en donde se analiza la estructura gramatical del lenguaje fuente, estas
reglas son representadas por las gramticas libres del contexto y su escaneo con
los rboles sintcticos.

ANLISIS SEMNTICO En la tercera etapa an se analiza el cdigo fuente para


verificar las reglas semnticas, estas reglas estn representadas por la
correspondencia de los tipos de datos que se manejen en el lenguaje.

GENERADOR DE CDIGO INTERMEDIO Una vez analizado el cdigo fuente y sin


haber encontrado algn error durante las fases anteriores, el compilador genera un
cdigo intermedio para prepararlo al cdigo destino.

GENERADOR DE CDIGO La quinta etapa del compilador tambin conocida como


generador de cdigo o back-end, es el proceso encargado de traducir el lenguaje
intermedio a un cdigo mquina, el cual depender de la arquitectura de la misma.
OPTIMIZADOR DE CDIGO El ltimo proceso de un compilador es opcional, ya
que la optimizacin de cdigo depende de la arquitectura de la mquina, si sta
acepta paralelismo y que tipo de paralelismo, adems de que no es posible saber a
ciencia cierta si un cdigo optimizado es mejor que el cdigo ingresado por el
programador.

Resultados:

Tenemos la interfaz donde tenemos varios botones los cuales, por ejemplo: se va
poder crear el proyecto, se podr abrir uno ya realizado, el botn de guardar los
cambios y el de borrar.

Como primera comprobacin tenemos que al declarar un entero y una cadena si


estos al momento de utilizarlos no son los correctos al momento de compilarlo
enviara un mensaje
Como segunda comprobacin tenemos al no declarar una variable de tipo entero y
posteriormente utilizarla en en una suma por lo cual va generar el error de que no
se ha declarado correctamente
Como ultimo tenemos la realizacin de la suma en la cual se va declarar dos
nmeros y posteriormente se van a sumar o hacer cualquier operacin bsica al
compilarlo llamara las liberias del ensamblador que se conectaron en la codificacin
del compilador esto resultara que va actuar como el intermedio para la generacin
del resultado de la operacin.
Tabla de tokens
ID TOKEN LEXEMA PATRON NOTACION BACKUS-NAUR
1 Letra a,b,c,d,e [a-z] [A-Z] <letra>;;a|b|cA|B|C.|Z|||
2 Entero 1,3,4,7 [0-9] <digito>;;0|1|2|3|4|5|6|7|8|9
3 palabra Hola (Letra|digito) <palabra>::=<letra>|<digito>
mundo
4 Car_esp |!|"||?|#|$|%|&|(|)|{|}|,|.|;|: <car_esp>::=|!|"||?|#|$|%|&|(|)|{|}|
# ,|.|;|:
$
5 Operador_l < <|>|==|!=|<=|>= <operador_log>::=<|>|<|>|==|!=|<=
og > |>=
6 Operador_ + +|-|*|/ <operador_ar>::=+|-|*|/
ar -
*
/
7 Cadena abc+123 "(letter|number|character| <cadena>::="(<letra>|<digito>|<ca
)*" dena>|< >|)*"
8 Declara Int suma; Var id; var asig: <var>::="<id>;<var>::="<asig>;
9 Impresin Info(hola Info(palabra|id); <info>::=(<palabra>|<id>);
mundo)
10 Operacin A+b Id operacin id* <operacion>::=(<id>|<numero>)<o
perador_ar>(<var>|<numero>)
11 Id A Palabra(palabra|numero)* <id>::=(<palabra>|<numero>)*
B
12 Entrada Entrada() Entrada() <entrada>::=entrada()
13 Fin Fin() Fin() <fin>::=fin()
14 Var Nombre letra(letra|numero)* <var>::=<letra>(<letra>|<numero
>)*
15 infoDialog infoDialog infoDialog(palabra+(oper <infoDialog::=(palabra+(<operaci
(ingresa acin)); n>))
la edad);
16 Cuando cuando(v cuando((var|numero)(op <cuando>::=cuando((<var>|<num
ar1>=var2 erado_log|>=|<=|!=|==)( ero>)(<operador_log>|>=|<=|!=|
) var|numero)) ==)(<var>|<numero>))
17 Numero 123 (digito)* <numero>::=(<digito>)+
18 Cuando_ne Cuando_n "cuando_neg{" <cuando_neg>::=cuando<condic
g eg (condicion)+ "}" ion)})
{var1+var
2}

Conclusiones:

El objetivo de este compilador es poder ver el proceso que pasa al codificar en una
interfaz y como en las diferentes etapas que vimos a lo largo de los cursos en cada
una de ellas se va haciendo comprobaciones diferentes hasta generar el cdigo

Referencias:
Referencias:

Sierra M. (2013). Traductores compiladores. Julio 22, 2016, de LLC Sitio web:
http://www.lcc.uma.es/~galvez/ftp/tci/tictema3.pdf

Gonzaga E. (2010). Compiladores. Julio 22, 2016, de Linguakit Sitio


web:
http://www.cva.itesm.mx/biblioteca/pagina_con_formato_version_oct/apaweb.htm
l Villaez A. (2013). Analizador sintctico. Julio 22 2016, de Slideshare Sitio
web: http://es.slideshare.net/alexisdario/analizador-sintactico-20951453