You are on page 1of 9

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS

(Universidad del Per, DECANA DE AMERICA)

FACULTAD DE INGENIERA DE SISTEMAS E INFORMTICA


ESCUELA ACADMICO-PROFESIONAL DE INGENIERA DE SOFTWARE

Proyecto Gianmar se
la Come ENTERITA

Lenguajes y Compiladores

Integrantes

Puitiza Lopez, Anthony


Sanchez Valdes, Gianmar
Tarazona Reyes, Braygen

AO ACADMICO 2016
1. INTRODUCCIN:

El analizador lxico es la primera fase de un programa


traductor. Es, por otra parte, el nico que gestiona el fichero de
entrada. Es la parte del compilador que lee los caracteres del
programa fuente y que construye unos smbolos intermedios
(elementos lxicos que llamaremos tokens)que sern
posteriormente utilizados por el analizador sintctico como
entradas.
El analizador sintctico debe obtener una representacin de la
estructura (sintaxis) del programa fuente. Para realizar esta
tarea debera concentrarse solamente en la estructura y no en
otros aspectos menos importantes, como los espacios en blanco
o tabuladores, los cambios de lnea, los comentarios, etc.
Adems, los rboles sintcticos construidos con una gramtica
que genere los programas carcter a carcter no son tiles para
construir una traduccin.
Por qu separar el anlisis lxico del sintctico?

El diseo de las partes posteriores dedicadas al anlisis


queda simplificado.
Con fases separadas, se pueden aplicar tcnicas
especficas y diferenciadas para cada fase, que son ms
eficientes en sus respectivos dominios.
Se facilita la portabilidad. Si se quiere cambiar alguna
caracterstica del alfabeto del lenguaje (por ejemplo para
adaptarlo a determinados smbolos propios de mquinas
distintas) slo tenemos que cambiar el analizador lxico.

Si tomamos por ejemplo las expresiones 6-2*30/7 y 6 - 2*


30/7,
Podemos comprobar que la estructura de ambas expresiones es
equivalente; sin embargo, los caracteres que componen ambas
cadenas no son los mismos. Si tuviramos que trabajar
directamente con los caracteres estaramos dificultando la tarea
de obtener la misma representacin para ambas cadenas. Si
consideramos adems la cadena 8-2*3/5, la estructura de
esta cadena es de nuevo la misma que la de las cadenas
anteriores, lo nico que cambia son los valores concretos de los
nmeros. Por estos motivos (y tambin por eficiencia), el
procesamiento de los caracteres se deja en manos del
analizador lxico que entregar a las sucesivas etapas del
compilador los componentes lxicos (tokens) significativo.

2. OBJETIVOS:

El objetivo de nuestro proyecto es realizar la traduccin de:


void main(void){
conjunto a,b={2,3};
a={1,5};
c=a+b;
b=b+{6,4};
imprime b;
b+7+5-2;
a=b*c;
b={};
elimina b,c;
}
Mediante el uso de un Software, en este caso usamos el Bison.
Adems dar a conocer el uso de este software, que no solo
servir en este proyecto, sino que tambin es aplicable para
diferentes proyectos, de tal manera nutrir los conocimientos de
aquellos que no estn familiarizados con el uso del software.

3. PROCEDIMIENTO:
Primero que nada tenemos qye crear la gramtica, ya que es
necesario, la cual lo debemos crear en un bloc de notas, con la
extensin y:

E ingresamos:

Luego pasamos a crear las expresiones Regulares:


%{
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include "s.tab.h"
int linea=0;
%}
%option noyywrap
%option yylineno
ignora " "|\t|\r|\f
caracter [A-Za-z]
digito [0-9]
%%
{ignora}+
{;}
"conjunto"
{printf("Palabra reservada
conjunto\n");return CONJUNTO;}
"void"
{printf("void\n");return VOID;}
"main"
{printf("main\n");return MAIN;}

"imprime"
{printf("Palabra reservada
para\n");return IMPRIME;}
"elimina"
{printf("Palabra reservada
para\n");return ELIMINA;}
"{"
{printf("{\n");return CI;}
"}"
{printf("}\n");return CF;}
";"
{printf(";\n");return PC;}
","
{printf(",\n");return COMA;}
")"
{printf(")\n");return PF;}
"("
{printf("(\n");return PI;}
"+"
{printf("+\n");return SUMA;}
"-"
{printf("-\n");return RESTA;}
"*"
{printf("*\n");return MULT;}
"="
{printf("=\n");return ASIGNADOR;}
{digito}+
{printf("Entero\n");return ENTERO;}
{caracter}({caracter}|(digito))*
{printf("Nombre\n");return
NOMBRE;}
"\n"
{linea++;}
.
{printf("Error en linea: %d\n",linea);}
%%
yyerror(char * msg){
printf("%s\n",msg);
}
int main(void)
{
char NombreArchivo[50];
printf("Ruta del archivo: ");
gets(NombreArchivo);
yyin=fopen(NombreArchivo,"rt");
if(yyin==NULL)
printf("\nNo se puede leer el archivo");
else
yyparse();
fclose(yyin);
getch();
}
Quedar de la siguiente forma:

Una vez, ejecutamos media CMD:

Una vez terminado, vamos a crear un proyecto nuevo en Devc++


(Software que utilizamos):

Y
aadimos al proyecto creado, lo que desarrollamos
anteriormente, tanto la gramtica, expresiones regulares:

Lo compilamos y ejecutamos, y nos aparecer una ventana:

Tambin creamos un texto, en el cual aadiremos lo siguiente:

Una vez hagamos eso, simplemente escribimos en la consola, y


nos dar el resultado:

You might also like