CIS-IXB-001
UNIVERSIDAD
NACIONAL
DE LOJA
´Area de la Energ´ıa las Industrias y los Recursos Naturales No Renovables
Carrer...
1 Analizador L´exico
Se encarga de buscar los componentes l´exicos o palabras que componen el programa
fuente, seg´un unas...
Figure 2: Interacci´on de un analizador l´exico con el analizador sint´actico
• Reconocer los identificadores de usuario, n...
Donde cada acci´on es un fragmento de programa que describe cual ha de ser la acci´on
del analizador l´exico cuando la sec...
• No terminales: tambi´en llamados variables y que se expanden en partes derechas de
otras reglas.
• Terminales: son token...
{ Operandos de tipos no compatibles
if (x || 5) x = 0;
Error: Ej2.java [7:1] operator || cannot be applied to int,int
El a...
/*** Secci´on de declaraciones ***/
%{
/* C´odigo en C que ser´a copiado */
#include <stdio.h>
%}
/* Esto indica a Flex qu...
3 BIBLIOGRAFIA
References
[1] Juan Marcos Sacrist´an Donoso “Desarrollo de compiladores”. 2008. Ensenanza
informatica.Disp...
Próxima SlideShare
Cargando en…5
×

Analizador Léxico, Analizador Sintáctico

255 visualizaciones

Publicado el

Informe de conceptos básicos de un analizador léxico, sintáctico y adicional la estructura del archivo lex.

Publicado en: Educación
0 comentarios
0 recomendaciones
Estadísticas
Notas
  • Sé el primero en comentar

  • Sé el primero en recomendar esto

Sin descargas
Visualizaciones
Visualizaciones totales
255
En SlideShare
0
De insertados
0
Número de insertados
8
Acciones
Compartido
0
Descargas
2
Comentarios
0
Recomendaciones
0
Insertados 0
No insertados

No hay notas en la diapositiva.

Analizador Léxico, Analizador Sintáctico

  1. 1. CIS-IXB-001 UNIVERSIDAD NACIONAL DE LOJA ´Area de la Energ´ıa las Industrias y los Recursos Naturales No Renovables Carrera de Ingenier´ıa en Sistemas ”ANALIZADOR LEXICO ESTRUCTURA ARCHIVO JFLEX” Tarea 1 Noveno B Autor: • Raul-Gomez Docente: Ing. Henry-Paz, Tarea de C. Por Raul-Gomez is licensed Under a Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 Unported License. Fecha: December 15, 2014 LOJA ECUADOR 1
  2. 2. 1 Analizador L´exico Se encarga de buscar los componentes l´exicos o palabras que componen el programa fuente, seg´un unas reglas o patrones. La entrada del analizador l´exico podemos definirla como una secuencia de caracteres. Figure 1: Estructura Lexica • gram´atica (N, T, P, S) • N S´ımbolos no terminales. • T S´ımbolos terminales • P Reglas de producci´on • S Axioma inicial El analizador l´exico tiene que dividir la secuencia de caracteres en palabras con significado propio y despu´es convertirlo a una secuencia de terminales desde el punto de vista del analizador sint´actico, que es la entrada del analizador sint´actico. El analizador l´exico reconoce las palabras en funci´on de una gram´atica regular de manera que sus NO TERMINALES se convierten en los elementos de entrada de fases posteriores. En LEX, por ejemplo, esta gram´atica se expresa mediante expresiones regulares. 1.1 Funci´on del analizador l´exico. El analizador l´exico es la primera fase de un compilador. Su principal funci´on consiste en leer los caracteres de entrada y elaborar como salida una secuencia de componentes l´exicos que utiliza el analizador sint´actico para hacer el an´alisis. Esta interacci´on, suele aplicarse convirtiendo al analizador l´exico en una subrutina o corrutina del analizador sint´actico. Recibida la orden “Dame el siguiente componente l´exico”del analizador sint´actico, el analizador l´exico lee los caracteres de entrada hasta que pueda identificar el siguiente componente l´exico. • Eliminar los comentarios del programa. • Eliminar espacios en blanco, tabuladores, retorno de carro, etc, y en general, todo aquello que carezca de significado seg´un la sintaxis del lenguaje. 2
  3. 3. Figure 2: Interacci´on de un analizador l´exico con el analizador sint´actico • Reconocer los identificadores de usuario, n´umeros, palabras reservadas del lenguaje, ..., y tratarlos correctamente con respecto a la tabla de s´ımbolos (solo en los casos que debe de tratar con la tabla de s´ımbolos). • Llevar la cuenta del n´umero de l´ınea por la que va leyendo, por si se produce alg´un error, dar informaci´on sobre donde se ha producido. • Avisar de errores l´exicos. Por ejemplo, si @ no pertenece al lenguaje, avisar de un error. • Puede hacer funciones de preprocesador. Adem´as el analizador l´exico es responsable de: • Manejo de apertura y cierre de archivo, lectura de caracteres y gesti´on de posibles errores de apertura. • Eliminar comentarios, espacios en blanco, tabuladores y saltos de l´ınea. • Inclusi´on de archivos y macros. • Contabilizar n´umero de l´ıneas y columnas para emitir mensajes de error. 1.2 Componentes L´exicos, Patrones y Lexemas El analizador lexicogr´afico puede tener la siguiente estructura: Figure 3: Interacci´on de componentes 3
  4. 4. Donde cada acci´on es un fragmento de programa que describe cual ha de ser la acci´on del analizador l´exico cuando la secuencia de entrada coincida con la expresi´on regular. En la fase de an´alisis, los t´erminos componentes l´exicos (token), patr´on y lexema se emplean con significados espec´ıficos. Un analizador l´exico, inicialmente lee los lexemas y le asigna un significado propio. Componente l´exico es la secuencia l´ogica y coherente de caracteres relativo a una categor´ıa: identificador, palabra reservada, literales (cadena/num´erica), operador o car´acter de puntuaci´on, adem´as de que un componente l´exico puede tener uno o varios lexemas. Patr´ones una regla que genera la secuencia de caracteres que puede representar a un determinado componente l´exico (expresi´on regular). Lexema es una cadena de caracteres que concuerda con un patr´on que describe un componente l´exico (valor de cadena). Ejemplo de una cadena de c´odigo: const pi = 3.1416; Ej: 8, 23, 50 ( son lexemas que encajan con el patr´on ( 0 — 1 — 2 — ... — 9) + ). Una vez detectado que un grupo de caracteres coincide con un patr´on, se ha detectado un lexema. A continuaci´on se le asocia un n´umero, que se le pasar´a al sint´actico, y, si es necesario, informaci´on adicional, como puede ser una entrada en la tabla de s´ımbolos. La tabla de s´ımbolos suelen ser listas encadenadas de registros con parte variable: listas ordenadas, ´arboles binarios de b´usqueda, tablas hash, etc. Lexemas Componente l´exico Patr´on const const const = relaci´on ¡ o ¡= o = o ¡¿ o ¿ o ¿= Pi identificador letra seguida de letras o n´umeros 3.1416 n´umero cualquier literal num´erica “hola mundo” literal caracteres entre comillas <identificador, atributo para el s´ımbolo E> <op_asignacion> <identificador, atributo para el s´ımbolo M> <op_multiplica> <identificador, apuntador al s´ımbolo C> <op_exponente> <numero, atributo valor 2> 1.3 Analizador Sint´actico Este analizador se encarga de formar componentes sint´acticos del lenguaje fuente. En definitiva, nos permitir´a saber si un texto concreto pertenece al conjunto de posibles textos de un lenguaje. Para implementar un analizador sint´actico necesitamos una gram´atica que nos proporcione la especificaci´on sint´actica del lenguaje fuente. Una gram´atica est´a formado por una serie de reglas. Cada regla tiene una parte izquierda y una parte derecha. Si se reconoce la parte derecha de una regla, se puede sustituir todo por la parte izquierda de la misma regla. Las reglas est´an formadas por dos tipos de s´ımbolos: 4
  5. 5. • No terminales: tambi´en llamados variables y que se expanden en partes derechas de otras reglas. • Terminales: son tokens de la especificaci´on l´exica. Ejemplo: queremos especificar la sintaxis de operaciones aritm´eticas de n´umeros enteros. Las operaciones en cuesti´on son la suma y la resta. Una primera aproximaci´on podr´ıa ser: E E + E E E – E E nint Los tokens son: +: el signo m´as (suma) -: el signo menos (resta) nint: un n´umero entero, cuya expresi´on regular ser´ıa [0-9]* Sin embargo, esta gram´atica no es v´alida ya que es ambigua. La ambiguedad es un problema bastante importante ya que implica que puede haber m´as de un ´arbol de derivaci´on para encontrar una misma cadena. No se pueden implementar analizadores mediante gram´aticas ambiguas, ya que aparecer´ıan conflictos. Veamos dos ´arboles de derivaci´on con la primera gram´atica para formar la expresi´on 1+1: Figure 4: Comprobacion de un analizador sintaxico La ambiguedad es bastante dif´ıcil de detectar. Para ello se definen una serie de subconjuntos de gram´aticas, y a la hora de dise˜nar el analizador podemos detectar dicha ambiguedad. En nuestro caso interesa usar las gram´aticas SLR a partir de las cuales se pueden implementar analizadores sint´acticos ascendentes. La gram´atica anterior en SLR ser´ıa: E E + T E E - T E T T nint 1.4 Analisis Sem´antico Sem´antica: conjunto de reglas que especifican el significado de cualquier sentencia sint´acticamente correcta y escrita en un determinado lenguaje. El an´alisis sem´antico, a diferencia de otras fases, no se realiza claramente diferenciado del resto de las tareas del compilador. Fase en la que se obtiene informaci´on necesaria para la compilaci´on tras conocer la estructura sint´actica del programa. Completa las fases de an´alisis l´exico y sint´actico incorporando comprobaciones que no pueden asimilarse al mero reconocimiento de una cadena dentro de un lenguaje. Errores sem´anticos de un programa: Conversiones de tipos no permitidas int x; x = 4.32; Error: Ej1.java [6:1] possible loss of precision { Variables usadas y no definidas 5
  6. 6. { Operandos de tipos no compatibles if (x || 5) x = 0; Error: Ej2.java [7:1] operator || cannot be applied to int,int El an´alisis sem´antico se divide en dos categor´ıas: – An´alisis de la exactitud del programa para garantizar una ejecuci´on adecuada. – Algunos lenguajes (Lisp, Smalltallk) pueden no tener an´alisis est´atico. – Por ejemplo, ADA es un lenguaje con fuertes restricciones para que un pro- grama sea ejecutable. – An´alisis para mejorar la eficiencia (optimizaci´on del programa traducido) 2 Jflex Lex es un programa para generar analizadores l´exicos (en ingl´es scanners o lexers). Lex se utiliza com´unmente con el programa yacc que se utiliza para generar an´alisis sint´actico. Lex, escrito originalmente por Eric Schmidt y Mike Lesk, es el analizador l´exico est´andar en los sistemas Unix, y se incluye en el est´andar de POSIX. Lex toma como entrada una especificaci´on de analizador l´exico y devuelve como salida el c´odigo fuente implementando el analizador l´exico en C. Aunque tradicionalmente se trata de software propietario, existen versiones libres de lex basadas en el c´odigo original de ATT en sistemas como OpenSolaris y Plan 9 de los laboratorios Bell. Otra versi´on popular de software libre de lex es Flex. 2.1 Estructura de un archivo de lex La estructura de un archivo de lex es intencionadamente similar a la de un archivo del yacc; los archivos se dividen en tres secciones, separadas por l´ıneas que contienen solamente dos s´ımbolos "%", como sigue: Secci´on de declaraciones %% Secci´on de reglas %% Secci´on de c´odigo en C Lo siguiente es un ejemplo de archivo lex para la versi´on Flex de lex. Reconoce cadenas de n´umeros (n´umeros enteros) en la entrada, y simplemente los imprime en la salida. 6
  7. 7. /*** Secci´on de declaraciones ***/ %{ /* C´odigo en C que ser´a copiado */ #include <stdio.h> %} /* Esto indica a Flex que lea s´olo un fichero de entrada */ %option noyywrap %% /*** Secci´on de reglas ***/ /* [0-9]+ identifica una cadena de uno o m´as d´ıgitos */ [0-9]+ { /* yytext es una cadena que contiene el texto coincidente. */ printf("Encontrado un entero: %sn", yytext); } . { /* Ignora todos los dem´as caracteres. */ } %% /*** Secci´on de c´odigo en C ***/ int main(void) { /* Ejecuta el ’’lexer’’, y despu´es termina. */ yylex(); return 0; } Si se da esta entrada a flex, ser´a convertida en un archivo de C, lex.yy.c. Esto se puede compilar en un ejecutable que encuentre y haga salir cadenas de n´umeros enteros. Por ejemplo, dando la entrada: abc123z.!&*2ghj6 el programa imprimir´a: Encontrado un entero: 123 Encontrado un entero: 2 Encontrado un entero: 6 7
  8. 8. 3 BIBLIOGRAFIA References [1] Juan Marcos Sacrist´an Donoso “Desarrollo de compiladores”. 2008. Ensenanza informatica.Disponible en: http://megazar.tripod.com/compil.pdf [2] Alfred V. Aho,Ravi Sethi,Jeffrey D. Ullman “Compiladores: principios, t´ecnicas y herramientas”. 1998. (impreso en mexico) 53519 Naucalpan de Juares, Edo. Mexico. Disponible en: https://books.google.com.ec/books? id=yG6qJBAnE9UC&pg=PA86&lpg=PA86&dq=compiladores+lexico&source= bl&ots=rsWPT13_jQ&sig=4xTPyW6bjHW0UvLJNCDs6Vo5cco&hl=es&sa=X&ei= UVePVLW8CIueNsCjg7gD&ved=0CFkQ6AEwCQ#v=onepage&q=compiladores% 20lexico&f=false [3] Jeffrey D. Ullaman . ”Traductores, Compiladores e Interpretes. ”. 2012. De- partamento de Lenguajes y Automatas. Universidad de Sevilla. Disponible en: https://www.lsi.us.es/docs/doctorado/memorias/TESINA-Roche.pdf [4] Louden, K.C (2010)Construccion de Compiladores”. Disponible en: http://centrodeartigo.com/articulos-noticias-consejos/article_ 126048.html 8

×