SlideShare uma empresa Scribd logo
1 de 8
Baixar para ler offline
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
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
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
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
• 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
{ 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
/*** 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
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

Mais conteúdo relacionado

Mais procurados

Analizador LÉxico
Analizador LÉxicoAnalizador LÉxico
Analizador LÉxico
FARIDROJAS
 
Analisis semantico
Analisis semanticoAnalisis semantico
Analisis semantico
Areli Gómez
 
Analisis Lexico
Analisis LexicoAnalisis Lexico
Analisis Lexico
FARIDROJAS
 
Analizador sintactico
Analizador sintacticoAnalizador sintactico
Analizador sintactico
alexisdario
 
Análisis Semántico con Cup
Análisis Semántico con CupAnálisis Semántico con Cup
Análisis Semántico con Cup
LAUNASA NOVENO B
 
Analisis lexico 2
Analisis lexico 2Analisis lexico 2
Analisis lexico 2
perlallamas
 

Mais procurados (20)

Analizador LÉxico
Analizador LÉxicoAnalizador LÉxico
Analizador LÉxico
 
Analizador Sintactico
Analizador SintacticoAnalizador Sintactico
Analizador Sintactico
 
Analisis semantico
Analisis semanticoAnalisis semantico
Analisis semantico
 
Clase6 conceptos del analisis lexico
Clase6 conceptos del analisis lexicoClase6 conceptos del analisis lexico
Clase6 conceptos del analisis lexico
 
Analizador Sintáctico
Analizador SintácticoAnalizador Sintáctico
Analizador Sintáctico
 
Compiladores analizadores gramática y algo mas
Compiladores analizadores gramática y algo masCompiladores analizadores gramática y algo mas
Compiladores analizadores gramática y algo mas
 
AnáLisis LéXico
AnáLisis LéXicoAnáLisis LéXico
AnáLisis LéXico
 
Automatas y compiladores analisis sintactico
Automatas y compiladores analisis sintacticoAutomatas y compiladores analisis sintactico
Automatas y compiladores analisis sintactico
 
Analisis Lexico
Analisis LexicoAnalisis Lexico
Analisis Lexico
 
Claselexico
ClaselexicoClaselexico
Claselexico
 
ANALIZADOR SINTACTICO: INTRODUCION, CONCEPTOS, CARACTERISTICAS
ANALIZADOR SINTACTICO: INTRODUCION, CONCEPTOS, CARACTERISTICAS ANALIZADOR SINTACTICO: INTRODUCION, CONCEPTOS, CARACTERISTICAS
ANALIZADOR SINTACTICO: INTRODUCION, CONCEPTOS, CARACTERISTICAS
 
Analizador sintactico
Analizador sintacticoAnalizador sintactico
Analizador sintactico
 
Clase analisis lexico
Clase analisis lexicoClase analisis lexico
Clase analisis lexico
 
Analisis sintactico
Analisis sintacticoAnalisis sintactico
Analisis sintactico
 
Clase6 ejemplo analisis lexico dev cpp
Clase6 ejemplo analisis lexico dev cppClase6 ejemplo analisis lexico dev cpp
Clase6 ejemplo analisis lexico dev cpp
 
Software de programación lógica
Software de programación lógicaSoftware de programación lógica
Software de programación lógica
 
Análisis Semántico con Cup
Análisis Semántico con CupAnálisis Semántico con Cup
Análisis Semántico con Cup
 
Materia unidad compiladores
Materia unidad compiladoresMateria unidad compiladores
Materia unidad compiladores
 
Unidad4 analisis-semantico
Unidad4 analisis-semanticoUnidad4 analisis-semantico
Unidad4 analisis-semantico
 
Analisis lexico 2
Analisis lexico 2Analisis lexico 2
Analisis lexico 2
 

Destaque (7)

Tds
TdsTds
Tds
 
Compiladores1
Compiladores1Compiladores1
Compiladores1
 
Cuadro sinóptico sistema de información integral
Cuadro sinóptico sistema de información integralCuadro sinóptico sistema de información integral
Cuadro sinóptico sistema de información integral
 
Automatas finitos
Automatas finitosAutomatas finitos
Automatas finitos
 
Actividad 2 Analizador léxico, sintáctico y semántico
Actividad 2 Analizador léxico, sintáctico y semántico Actividad 2 Analizador léxico, sintáctico y semántico
Actividad 2 Analizador léxico, sintáctico y semántico
 
Sistemas De Información Gerencial
Sistemas De Información GerencialSistemas De Información Gerencial
Sistemas De Información Gerencial
 
DiseñO De Compilador
DiseñO De CompiladorDiseñO De Compilador
DiseñO De Compilador
 

Semelhante a Analizador Léxico, Analizador Sintáctico

Capítulo 2 compiladores (willian gallo -------boris chungandro)
Capítulo 2 compiladores (willian gallo -------boris chungandro)Capítulo 2 compiladores (willian gallo -------boris chungandro)
Capítulo 2 compiladores (willian gallo -------boris chungandro)
MARCO POLO SILVA SEGOVIA
 
Lenguajes y Automatas.pptx
Lenguajes y Automatas.pptxLenguajes y Automatas.pptx
Lenguajes y Automatas.pptx
danielloria1024
 

Semelhante a Analizador Léxico, Analizador Sintáctico (20)

Actividad 4.4 y 4.5 Lenguajes y Autómatas Edinson Yahir Sánchez Velázquez.pptx
Actividad 4.4 y 4.5 Lenguajes y Autómatas Edinson Yahir Sánchez Velázquez.pptxActividad 4.4 y 4.5 Lenguajes y Autómatas Edinson Yahir Sánchez Velázquez.pptx
Actividad 4.4 y 4.5 Lenguajes y Autómatas Edinson Yahir Sánchez Velázquez.pptx
 
investigacion.pdf
investigacion.pdfinvestigacion.pdf
investigacion.pdf
 
diaposichap.pptx
diaposichap.pptxdiaposichap.pptx
diaposichap.pptx
 
lexico.pptx
lexico.pptxlexico.pptx
lexico.pptx
 
TALLER ANALISIS LEXICO
TALLER ANALISIS LEXICOTALLER ANALISIS LEXICO
TALLER ANALISIS LEXICO
 
investigacion 4.4 y 4.5.pdf
investigacion 4.4 y 4.5.pdfinvestigacion 4.4 y 4.5.pdf
investigacion 4.4 y 4.5.pdf
 
Capítulo 2 compiladores (willian gallo -------boris chungandro)
Capítulo 2 compiladores (willian gallo -------boris chungandro)Capítulo 2 compiladores (willian gallo -------boris chungandro)
Capítulo 2 compiladores (willian gallo -------boris chungandro)
 
Lenguajes y Automatas.pptx
Lenguajes y Automatas.pptxLenguajes y Automatas.pptx
Lenguajes y Automatas.pptx
 
Analisis semantico
Analisis semanticoAnalisis semantico
Analisis semantico
 
Analisis lexico
Analisis lexicoAnalisis lexico
Analisis lexico
 
ERRORES LEXICOS Y GENERADORES DE ANALISIS LEXICOS.pptx
ERRORES LEXICOS Y GENERADORES DE ANALISIS LEXICOS.pptxERRORES LEXICOS Y GENERADORES DE ANALISIS LEXICOS.pptx
ERRORES LEXICOS Y GENERADORES DE ANALISIS LEXICOS.pptx
 
ANALISIS SEMANTICO
ANALISIS SEMANTICO ANALISIS SEMANTICO
ANALISIS SEMANTICO
 
Curso prog sist
Curso prog sistCurso prog sist
Curso prog sist
 
Analisis lexico
Analisis lexicoAnalisis lexico
Analisis lexico
 
Compiladores
CompiladoresCompiladores
Compiladores
 
Compiladores analisis lexico
Compiladores analisis lexicoCompiladores analisis lexico
Compiladores analisis lexico
 
Taller de actividades de compiladores 06 06 2019
Taller de actividades de compiladores 06 06 2019Taller de actividades de compiladores 06 06 2019
Taller de actividades de compiladores 06 06 2019
 
Analisis sintactico actividad 15
Analisis sintactico actividad 15Analisis sintactico actividad 15
Analisis sintactico actividad 15
 
Compilador2
Compilador2Compilador2
Compilador2
 
Análisis Sintáctico Ascendente - Descendente
Análisis Sintáctico Ascendente - DescendenteAnálisis Sintáctico Ascendente - Descendente
Análisis Sintáctico Ascendente - Descendente
 

Último

NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdfNUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
UPTAIDELTACHIRA
 
6°_GRADO_-_MAYO_06 para sexto grado de primaria
6°_GRADO_-_MAYO_06 para sexto grado de primaria6°_GRADO_-_MAYO_06 para sexto grado de primaria
6°_GRADO_-_MAYO_06 para sexto grado de primaria
Wilian24
 
Concepto y definición de tipos de Datos Abstractos en c++.pptx
Concepto y definición de tipos de Datos Abstractos en c++.pptxConcepto y definición de tipos de Datos Abstractos en c++.pptx
Concepto y definición de tipos de Datos Abstractos en c++.pptx
Fernando Solis
 

Último (20)

TIENDAS MASS MINIMARKET ESTUDIO DE MERCADO
TIENDAS MASS MINIMARKET ESTUDIO DE MERCADOTIENDAS MASS MINIMARKET ESTUDIO DE MERCADO
TIENDAS MASS MINIMARKET ESTUDIO DE MERCADO
 
Análisis de los Factores Externos de la Organización.
Análisis de los Factores Externos de la Organización.Análisis de los Factores Externos de la Organización.
Análisis de los Factores Externos de la Organización.
 
Power Point: Fe contra todo pronóstico.pptx
Power Point: Fe contra todo pronóstico.pptxPower Point: Fe contra todo pronóstico.pptx
Power Point: Fe contra todo pronóstico.pptx
 
Interpretación de cortes geológicos 2024
Interpretación de cortes geológicos 2024Interpretación de cortes geológicos 2024
Interpretación de cortes geológicos 2024
 
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESOPrueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESO
 
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdfNUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
 
Revista Apuntes de Historia. Mayo 2024.pdf
Revista Apuntes de Historia. Mayo 2024.pdfRevista Apuntes de Historia. Mayo 2024.pdf
Revista Apuntes de Historia. Mayo 2024.pdf
 
Tema 19. Inmunología y el sistema inmunitario 2024
Tema 19. Inmunología y el sistema inmunitario 2024Tema 19. Inmunología y el sistema inmunitario 2024
Tema 19. Inmunología y el sistema inmunitario 2024
 
Tema 10. Dinámica y funciones de la Atmosfera 2024
Tema 10. Dinámica y funciones de la Atmosfera 2024Tema 10. Dinámica y funciones de la Atmosfera 2024
Tema 10. Dinámica y funciones de la Atmosfera 2024
 
6°_GRADO_-_MAYO_06 para sexto grado de primaria
6°_GRADO_-_MAYO_06 para sexto grado de primaria6°_GRADO_-_MAYO_06 para sexto grado de primaria
6°_GRADO_-_MAYO_06 para sexto grado de primaria
 
Infografía EE con pie del 2023 (3)-1.pdf
Infografía EE con pie del 2023 (3)-1.pdfInfografía EE con pie del 2023 (3)-1.pdf
Infografía EE con pie del 2023 (3)-1.pdf
 
Factores que intervienen en la Administración por Valores.pdf
Factores que intervienen en la Administración por Valores.pdfFactores que intervienen en la Administración por Valores.pdf
Factores que intervienen en la Administración por Valores.pdf
 
CONCURSO NACIONAL JOSE MARIA ARGUEDAS.pptx
CONCURSO NACIONAL JOSE MARIA ARGUEDAS.pptxCONCURSO NACIONAL JOSE MARIA ARGUEDAS.pptx
CONCURSO NACIONAL JOSE MARIA ARGUEDAS.pptx
 
TRABAJO FINAL TOPOGRAFÍA COMPLETO DE LA UPC
TRABAJO FINAL TOPOGRAFÍA COMPLETO DE LA UPCTRABAJO FINAL TOPOGRAFÍA COMPLETO DE LA UPC
TRABAJO FINAL TOPOGRAFÍA COMPLETO DE LA UPC
 
Feliz Día de la Madre - 5 de Mayo, 2024.pdf
Feliz Día de la Madre - 5 de Mayo, 2024.pdfFeliz Día de la Madre - 5 de Mayo, 2024.pdf
Feliz Día de la Madre - 5 de Mayo, 2024.pdf
 
Concepto y definición de tipos de Datos Abstractos en c++.pptx
Concepto y definición de tipos de Datos Abstractos en c++.pptxConcepto y definición de tipos de Datos Abstractos en c++.pptx
Concepto y definición de tipos de Datos Abstractos en c++.pptx
 
Sesión de clase: Fe contra todo pronóstico
Sesión de clase: Fe contra todo pronósticoSesión de clase: Fe contra todo pronóstico
Sesión de clase: Fe contra todo pronóstico
 
Supuestos_prácticos_funciones.docx
Supuestos_prácticos_funciones.docxSupuestos_prácticos_funciones.docx
Supuestos_prácticos_funciones.docx
 
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).pptPINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
 
SESION DE PERSONAL SOCIAL. La convivencia en familia 22-04-24 -.doc
SESION DE PERSONAL SOCIAL.  La convivencia en familia 22-04-24  -.docSESION DE PERSONAL SOCIAL.  La convivencia en familia 22-04-24  -.doc
SESION DE PERSONAL SOCIAL. La convivencia en familia 22-04-24 -.doc
 

Analizador Léxico, Analizador Sintáctico

  • 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. 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. 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. 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. • 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. { 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. /*** 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. 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