Informe 5 de Compiladores

July 16, 2019 | Author: Christian M Cueva Ch | Category: Compilador, Lenguaje de programación, Programa de computadora, C++, Programación de computadoras
Share Embed Donate


Short Description

bbbb...

Description

UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN FACULTAD DE INGENIERÍA ESCUELA PROFESIONAL EN INFORMÁTICA Y SISTEMAS

INFORME N° 5:

ANALIZADOR LÉXICO

CURSO:

COMPILADORES Y TEORÍA DE LENGUAJES

 NOMBRE:

LUIS ANTONIO NEYRA MELCHOR CÓDIGO:

2013 –  39078  39078

FECHA DE ELABORACIÓN:

21 DE NOVIEMBRE DE 2016.

FECHA DE ENTREGA:

22 DE NOVIEMBRE DE 2016

TACNA –  PERU  PERU 2016 1

INDICE

1. 2. 3. 4. 5.

OBJETIVOS……………………………………………….…….3 FUNDAMENTO TEORICO………………………………….…3 PROCEDIMIENTO ……………………………………………...4 ANÁLISIS DE RESULTADOS…………………………………8 CONCLUSIONES ……………………………………………….10

2

1. OBJETIVOS  

Estudiar el código fuente de un programa prototipo de análisis léxico. Aplicar el análisis léxico utilizando código en lenguaje C++ creado con Borland C++.

2. FUNDAMENTO TEÓRICO LÉXICO El léxico de un lenguaje de programación u otro lenguaje usado en la informática está constituido por todas las palabras y símbolos que lo componen. En los lenguajes de programación el léxico lo constituyen todos los elementos individuales del lenguaje, denominados frecuentemente “tokens”. Así son tokens:

las palabras reservadas del lenguaje, los símbolos que denotan los distintos tipos de operadores, identificadores (de variables, de funciones, de procedimientos, de tipos, etc), separadores de sentencias, y otros símbolos empleados en las distintas construcciones del lenguaje.

ANÁLISIS LÉXICO Un programa fuente es una serie de símbolos que representan las construcciones del lenguaje tales como variables, etiquetas, palabras reservadas, constantes, operadores, entre otros. El programa fuente se trata inicialmente con el analizador léxico, el cual tiene el propósito de agrupar el texto en los diferentes tipos de patrones que conforman las unidades léxicas como identificadores (de variables, de funciones, de procedimientos, de tipos, de clases), palabras reservadas y operadores. Por razones de eficiencia, a cada token se le asocia un atributo (o más de uno) que se representa internamente por un código numérico o por un tipo enumerado. Por ejemplo a un identificador se le puede dar una representación interna de 1, a una contante de 2, a un operador aritmético un 2,…, cada palabra

reservada tiene su propio código. Así, para la siguiente sentencia de Pascal: IF cuenta = sueldo THEN jefe:= justo ; El analizador léxico la separa en la siguiente secuencia de tokens: IF cuenta = sueldo THEN jefe := justo ;

Y les asigna su atributo, habitualmente por medio de un código numérico cuyo significado se ha definido previamente 3

TOKEN IF cuenta = sueldo THEN  jefe :=  justo ;

ATRIBUTO 20 1 15 1 20 1 10 1 27

OBSERVACIONES Palabra reservada Identificador Operador de comparación Identificador Palabra reservada Identificador Asignación Identificador Separador de sentencias

El análisis léxico es un análisis a nivel de caracteres, su misión es reconocer los componentes léxicos o tokens, enviando al analizador sintáctico los tokens y sus atributos. También se encarga de eliminar los comentarios. El analizador léxico también recibe el nombre de explorador (en inglés scanner).

3. PROCEDIMIENTO Con el objeto de clarificar algunos de los conceptos sobre diseño de compiladores, se desea construir un mini compilador de un lenguaje muy simple (aunque de alto nivel), que se ha denominado SIMPLE. El lenguaje objeto será un lenguaje de bajo nivel denominado ENSAMBLA. La primera parte de este ejercicio consistirá en un programa que simula el análisis léxico de un compilador, que lee desde un archivo de texto el programa fuente. Definición del compilador de SIMPLE: SIMPLE/0

ENSAMBLA/0 C++

Figura 1 Representación simbólica de un compilador para SIMPLE A partir de este diagrama, conteste las siguientes preguntas:

1. ¿Cuál es el lenguaje fuente? El lenguaje es SIMPLE/0 2. ¿Cuál es el lenguaje objeto? El lenguaje es EMSAMBLE/0 3. ¿Cuál es el lenguaje de implementación? El lenguaje de borland c++ 4

Generalmente un compilador toma el programa fuente, lo interpreta y crea un  programa objeto (normalmente en lenguaje máquina). Por ahora nos limitaremos a comprender y analizar una de las formas, de cómo se llevaría a cabo un analizador léxico según las características de un lenguaje.

FICHERO FUENTE Digite un programa en el lenguaje SIMPLE/0, en un archivo de texto, guárdelo como prueba1.txt. Puede utilizar uno de los códigos vistos en la guía 1.

ANÁLISIS LÉXICO A TRAVÉS DEL LENGUAJE INTERMEDIO El análisis léxico debe separar el fichero fuente en componentes léxicos o tokens, y enviarlos al analizador sintáctico (en este guía no se detallará el analizador sintáctico). Habitualmente se envían los componentes léxicos y sus atributos. En este caso solo se enviarán los tokens, ya que el atributo va implícito en el token (tan sólo se tiene el tipo de dato entero). A continuación, se muestra la definición de clase Léxico, la cual contiene las funciones necesarias para poder implementar un análisis léxico adecuado para el lenguaje MUSIM/0. Digite el siguiente código: #include #include #include #include #include #define TAM_BUFFER 100 // define el tamaño de TAM_BUFFER class Lexico {  private: char *nombreFichero; FILE* entrada; int n1; int traza; char buffer[TAM_BUFFER]; int pBuffer;  public: Lexico(char *unNombreFichero, int una_traza=0); ~Lexico(void); char siguienteToken(void); void devuelveToken(char toke); int lineaActual(void) { return n1; }; int existeTraza(void) { if(traza) return 1; else return 0; } }; 5

Lexico::Lexico(char *unNombreFichero, int una_traza) { entrada=fopen(unNombreFichero, "rt"); if((entrada==NULL)) { cout
View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF