Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Make your likes visible on Facebook?

Connect your Facebook account to Prezi and let your likes appear on your timeline.
You can change this under Settings & Account at any time.

No, thanks

GENERADOR DE ANALIZADORES LÉXICOS

No description
by

Gabriela Luevano

on 22 February 2014

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of GENERADOR DE ANALIZADORES LÉXICOS

LENGUAJES Y AUTÓMATAS
ANALIZADOR LÉXICO
Un analizador léxico es un módulo destinado a leer caracteres del archivo de entrada, donde se encuentra la cadena a analizar, reconocer subcadenas que correspondan a símbolos del lenguaje y retornar los tokens correspondientes y sus atributos.
GENERADORES DE ANALIZADORES LÉXICOS
FLEX
LEX
JTLex
GENERADOR LEX
Es un programa para generar analizadores léxicos (en inglés scanners o lexers), se utiliza comúnmente con el programa yacc que se utiliza para generar análisis sintáctico, escrito originalmente por Eric Schmidt y Mike Lesk, es el analizador léxico estándar en los sistemas Unix, y se incluye en el estándar de POSIX. Lex toma como entrada una especificación de analizador léxico y devuelve como salida el codigo fuente implementando el analizador léxico en C.
Aunque tradicionalmente se trata de software propietario, existen versiones libres de lex basadas en el código originalde AT&T en sistemas como OpenSolaris y Plan 9 de los laboratorios Bell. Otra versión popular de software libre de lex es Flex.

GENERADOR FLEX
Es una herramienta para la generación de programas que realizan concordancia de patrones en texto, es una herramienta para generar escáneres. programas que reconocen patrones léxicos en un texto, es una reescritura de la herramienta LEX del Unix de AT&T (aunque lasdos implementaciones no comparten ningún código), con algunas extensionese incompatibilidades, de las que ambas conciernen a aquellos que desean escribir analizadores aceptables por cualquier implementación.FLEX lee los archivos de entrada dados, o la entrada estándar si no se le haindicado ningún nombre de archivo, con la descripción de un escáner agenerar. La descripción se encuentra en forma de parejas de expresionesregulares y código C, denominadas reglas.
GENERADOR DE ANALIZADORES LÉXICOS JTLex
JTLex en cambio permite expresar conjuntamente sintaxis y semántica al estilo de los esquemas de traducción. A su vez el proceso de computo de atributos es implementado por JTLex por un autómata finito traductor con las ventajas de eficiencia que esto supone.

Una especificación JTLex permite no sólo asociar un procedimiento, o acción, a cada expresión
regular, sino también a cada ocurrencia de un símbolo dentro de la expresión.

INSTITUTO TECNOLÓGICO SUPERIOR
DE JEREZ




MATERIA: LENGUAJES Y AUTOMATAS


MAESTRO: ISC JORGE MIGUEL VÁZQUEZ MÁRQUEZ


ALUMNA : GABRIELA LUÉVANO PUENTES 11070005


CARRERA: I S C


MÓDULO: XII


TEMA: GENERADOR DE ANALIZADRES LÉXICOS

JEREZ 22 DE FEBRERO DEL AÑO 2014.

GENERADOR LEX
GENERADOR DE LÉXICO LEX
Lex genera código fuente en C, a partir de una serie de especificaciones escritas en lenguaje Lex. El código C generado contiene una función llamada yylex(), que localiza cadenas en la entrada (lexemas) que se ajusten a uno de los patrones léxicos especificados en el código fuente Lex, realizando entonces las acciones asociadas a dicho patrón. yylex() puede llevar a cabo cualquier tipo de acciones, en particular, puede comportarse como un analizador léxico.
ESQUEMA GENERAL
Un programa fuente de Lex tiene el siguiente aspecto:

<sección de definiciones>
%%
<sección de reglas>
%%
<sección de rutinas>


De estas tres secciones, sólo la segunda es obligatoria, y cualquiera de ellas puede estar vacía.
SECCIONES
La sección de declaraciones incluye declaraciones de variables, constantes y definiciones regulares, que constituyen una manera cómoda de utilizar expresiones regulares largas en la sección de reglas; por ejemplo:

letra [A-Za-z]

• La sección de reglas especifica los patrones a reconocer y las acciones asociadas a éstos, de forma similar a la que utiliza awk:

patrón {acciones en C}

• La sección de rutinas permite definir funciones auxiliares en C, incluida la función main(). Por defecto, lex proporciona un main() que
simplemente llama a la función yylex().
REGLAS
El patrón regular debe estar situado en la primera posición de la línea.

• El patrón y la acción se separan por un blanco o un tabulador (o más).

• La acción puede ser una sola sentencia de C, o una sentencia compuesta, encerrada entre llaves {}.

• Cuando hay más de un patrón regular que puede adaptarse a la entrada, lex tomará la cadena más larga posible que pueda adaptarse a un patrón. Si aún así hay más de un patrón que se adapta a la entrada, lex ejecutará la acción de la regla que antes aparezca en el fuente lex.

• Lex almacena el lexema encontrado en un array de tipo char llamado yytext, y su longitud en la variable yyleng.

• La acción especial ECHO copia el lexema reconocido en la salida estándar. Es un sinónimo de printf("%s",yytext);

• La acción especial | (barra vertical) indica que para este patrón debe ejecutarse la acción correspondiente al patrón inmediatamente inferior. • Todo programa lex incorpora automáticamente la siguiente línea como última regla: .|\n ECHO;
ESQUEMA DE FUNCIONAMIENTO
Especificación del Analizador Léxico

Generador de Analizadores Léxicos (JTLex

Generador de Analizadores Léxicos (JTLex)

Analizador léxico:

Estructuras de Datos y Acciones

Algoritmo General
LENGUAJE DE ESPECIFICACIÓN
Debido a que Lex es, quizás, la herramienta más conocida entre los generadores de analizadores
léxicos, las especificaciones JTLex, siguen los lineamientos de su lenguaje de especificación con las modificaciones necesarias para implementar el nuevo formalismo. Para especificar los componentes léxicos y su semántica en vez de usarse constructores de la forma patrón-acción, se utilizan expresiones regulares cuyos términos corresponden a pares carácter-acción. Java es el lenguaje huésped, en él se especifican las acciones. En esencia, la especificación JTLex consiste de una serie de reglas para dividir la cadena de entrada en tokens.
GRAMÁTICA
Declaraciones
%%

Reglas de las Expresiones Regulares Traductoras Lineales
%%

Código de Usuario
LENGUAJE DE ESPECIFICACIÓN
La directiva
%% divide las distintas secciones del archivo de entrada y debe estar ubicada al comienzo de línea.

La sección Declaraciones
– la primer sección de la especificación – permite la incorporación de declaraciones que se utilizan en el código del analizador léxico, también permite la definición de macros los cuales están destinados a simplificar la escritura de las expresiones regulares
.
Las reglas
de las expresiones regulares consisten de tres partes : una acción inicial opcional, una Expresión Regular Traductora Lineal y una acción final. Donde las acciones iniciales y finales son código Java. Y las expresiones regulares traductoras lineales asocian acciones a caracteres. Básicamente, en una expresión regular traductora lineal debe existir una única traducción para todos los prefijos posibles. En cada expresión, si existen prefijos iguales las acciones deben ser las mismas, pero para expresiones que definen distintos tokens pueden llegar a ser distintas.


Código de Usuario
es copiada directamente en el archivo de salida
resultante. Esta provee espacio para definir e importar clases que intervengan en la traducción.
JTLex
BIBLIOGRAFÍA:
http://generadoresdecodigo.blogcindario.com/2009/09/00001-generadores-de-codigo-lexico-lex-y-flex.html
http://www.infor.uva.es/~mluisa/talf/docs/labo/L3.pdf
http://ccia.ei.uvigo.es/docencia/PL/doc/flex.pdf
http://dc.exa.unrc.edu.ar/staff/fbavera/papers/jtlex_cacic02.pdf
Full transcript