Descripción del lenguaje

Slides:



Advertisements
Presentaciones similares
El lenguaje de programación C - El primer programa -
Advertisements

Teoría de Autómatas y Compiladores
LOGROS DEL PERÍODO Utiliza de forma correcta las funciones para entrada y salida de datos en c++. Utiliza los elementos básicos de un programa en c++.
Unidad 2. Análisis léxico
INFORMATICA I Funciones CLASE 13.
SOBRECARGA DE FUNCIONES
Compiladores Análisis Léxico Oscar Bonilla Universidad Galileo.
TABLAS Definición. El tipo tabla permite definir objetos formados por un conjunto de elementos del mismo tipo. Ejemplos. El tipo tabla se utiliza para.
PARCIAL DE JUNIO DEL 2014 LENGUAJE DE PROGRAMACIÓN UN LENGUAJE SE PUEDE DEFINIR COMO UN CONJUNTO DE PALABRAS Y FORMAS DE EXPRESIÓN POR MEDIO DE.
Trazado. 1 Intercambio sin error #include void intercambio(int *, int *); /* prototipo */ main(){ int a=1,b=2; printf("a=%d b=%d\n",a,b); intercambio(&a,&b);
1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)
CLASE 10. AGENDA 1 Repaso 2 Operadores 3 Directivas 14 Entrada y Salida de Datos.
Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos.
FUNDAMENTOS DE PROGRAMACIÓN VARIABLES, CONSTANTES Y TIPOS DE DATOS EN C.
LÓGICA DE PROGRAMACIÓN UNIDAD III. INTRODUCCIÓN AL LENGUAJE C.
Introducción al Lenguaje C (II) Cadenas de caracteres, archivos de cabecera, lectura y escritura Fundamentos de Programación Departamento de Lenguajes.
Funciones y paso de parámetros Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión Unidad Didáctica 24.
PRÁCTICAS DE LABORATORIO ANÁLISIS SINTÁCTICO (2) LENGUAJES FORMALES Y AUTÓMATAS CURSO 2006/2007 UNIVERSIDAD DE SEVILLA E. T. S. INGENIERÍA INFORMÁTICA.
Computación I :: Prof. Yeniffer Peña Lenguaje C Presentación Computación I.
Las tres primeras fases de un compilador suelen agrupan en un sola fase llamada Análisis del programa a compilar y las tres ultimas en una sola fase llamada.
PROGRAMACIÓN I CENTRO DE ESTUDIOS INTEGRADOS EL MARISCAL - CEIM Ing. Luisa Fernanda Arenas Castañeda Feb 6 de 2016.
Unidad 1: Conceptos fundamentales Instituto Tecnológico de Toluca Ing. Sistemas Computacionales Asignatura: Programación Lógica y Funcional Presentan Nieto.
A NÁLISIS L ÉXICO Y ANÁLISIS SINTÁCTICO. COMPILADORES ANÁLISIS LÉXICO Y ANÁLISIS SINTÁCTICO ANGIE EVILLA LUQUEZ CORPORACIÓN UNIVERSITARIA REMINGTON INGENIERÍA.
LENGUAJE C. El lenguaje de programación C  El C es un lenguaje de programación creado en 1972 por Dennis M. Ritchie en los Laboratorios Bell  Evolución.
Funciones en lenguaje C 2 Funciones Definición: – Las funciones son los bloques de construcción básicos de C. Dentro de ellas se da toda la actividad.
Programación en C - manejo de Archivos
Conceptos Básicos Prof. Carlos Rodríguez Sánchez
Lic. Xóchitl minerva García cruz
Programación en C - manejo de Archivos
Métodos y parámetros.
Conceptos básicos de programación
FUNCIONES Y PROCEDIMIENTOS
Métodos en Java.
Algunas Características de C++ no presentes en C
Programación I MC Beatriz Beltrán Martínez
Algunas Características de C++ no presentes en C
Leccion 5: Escogiendo un Tipo de Variable
ANALISIS LEXICOGRAFICO
LENGUAJE DE PROGRAMACION III Estructuras Estáticas de Datos
Ingeniería en Sistemas computacionales Fundamentos de programación
Unidad 4. Capítulo IX. Búsqueda de Yp: Variación de parámetros.
ING. FABIAN GARCIA CARRILLO
QUE ES PROGRAMAR.
Lenguaje C.
CONCEPTOS PRELIMINARES (Cont)
Diego Hernández R Pascal Variables Diego Hernández R
El Lenguaje C: Elementos Básicos
LENGUAJE C.
Criterios Evaluación Portafolio de evidencias 5 Mapa conceptual 10 Practicas 30 Examen teórico 20 Analizador Sem. 35.
Características de “C”
Fundamentos de la Programación I
Metodología de la Programación
Funciones del Analizador Sintáctico
Programación I MC José Andrés Vázquez Flores
Instituto Tecnológico de Minatitlán
El entorno de Desarrollo de Dev-C++
Algunas ideas básicas de C++
Lic. Xóchitl minerva García cruz
MC Beatriz Beltrán Martínez Otoño 2017
FUNCIONES Y PROCEDIMIENTOS
Curso de Programación Estructurada
Informática Ingeniería en Electrónica y Automática Industrial
Informática Ingeniería en Electrónica y Automática Industrial
Informática Ingeniería en Electrónica y Automática Industrial
2.  Diagramas de Estado.
Algunas Características de C++ no presentes en C
Tema 2 Estructura de un programa en C. IWI Tema 2 Programa en C U n programa en C es una serie de instrucciones en un lenguaje muy especifico (similar.
Programación Modular Programación de Computadoras - Hugo Vega Grupo2: Reina Rodríguez Miriam Salluca.
UNIVERSIDAD JUÁREZ AUTÓNOMA DE TABASCO Nombres: Isaac Sánchez García Teofilo Martinez Garcia Ricardo Del Carmen Paz López Vanesa Anahí Pérez Lizárraga.
UNIDAD 1 Análisis semántico 1.1 ARBOLES DE EXPRESIONES.
Transcripción de la presentación:

Descripción del lenguaje Lenguaje flex Descripción del lenguaje Dr. Julio J. Águila G. miércoles 19 de agosto de 2014

Objetivo Presentar una herramienta computacional para construir analizadores léxicos utilizando la teoría de autómatas y lenguajes formales. administrador de la tabla de símbolos manejador de errores analizador sintáctico léxico obtén el siguiente componente léxico componente léxico

administrador de la tabla de símbolos manejador de errores analizador sintáctico léxico obtén el siguiente componente léxico componente léxico

Funcionamiento Sea un archivo de especificaciones flex llamado file.flex. lex.yy.c a.out compilador de flex de C Programa fuente en flex file.flex Archivo de entrada Secuencia de Componentes Léxicos

Estructura del archivo fuente Un programa de especificaciones flex consta de tres partes:   Declaraciones %% Especificaciones regulares y reglas de traducción Procedimientos auxiliares

Expresiones regulares Expresión Empareja con Ejemplo c cualquier carácter c que no sea operador a \c el carácter c literalmente \* “s” la cadena s literalmente “**” . cualquier carácter excepto de nueva línea a.*b ^ el comienzo de línea ^abc $ el fin de línea abc$ [s] cualquier carácter en s [abc] [^s] cualquier carácter que no esté en s [^abc] r* cero o más r a* r+ una o más r a+ r? cero o una r a? r{m,n} m a n casos de r a{1,5} r1r2 r1 y entonces r2 ab r1|r2 r1 o r2 a|b (r) r (a b) r1/r2 r1 cuando va seguida de r2 abc/123

Operadores Se debe eliminar el significado especial de los símbolos de los operadores si el símbolo de operador se utiliza como carácter de emparejamiento, los operadores son:   \ “ . ^ $ [ ] * + ? { } | / Esto se puede hacer encerrando entre comillas el carácter, o anteponiendo \ al carácter. Por ejemplo “*” o \* quita el significado de la cerradura de Kleene al operador *.

Ejemplo: archivo tolower.flex %{ /* * remove upper case letters */ %} %% [A-Z]+

Compilación tolower.flex Generamos el analizador léxico con el compilador flex: flex tolower.flex Se crea un archivo lex.yy.c a partir del cual generamos un ejecutable con gcc: gcc -o tolower lex.yy.c -ll Probamos con: ./tolower < tolower.flex

Ejemplo: archivo tolower.flex %{ /* * remove upper case letters */ %} %% [A-Z]+ Declaraciones Especificaciones regulares y reglas de traducción

Expresiones regulares Expresión Empareja con Ejemplo c cualquier carácter c que no sea operador a \c el carácter c literalmente \* “s” la cadena s literalmente “**” . cualquier carácter excepto de nueva línea a.*b ^ el comienzo de línea ^abc $ el fin de línea abc$ [s] cualquier carácter en s [abc] [^s] cualquier carácter que no esté en s [^abc] r* cero o más r a* r+ una o más r a+ r? cero o una r a? r{m,n} m a n casos de r a{1,5} r1r2 r1 y entonces r2 ab r1|r2 r1 o r2 a|b (r) r (a b) r1/r2 r1 cuando va seguida de r2 abc/123

Ejemplo: archivo line_numbering.flex %{ /* * line numbering */ %} %% \n ECHO; ^.*$ printf("%d\t%s", yylineno++, yytext); Especificaciones regulares y reglas de traducción

Reglas de traducción Las reglas de traducción de un archivo flex son proposiciones de la forma:   p1 { acción1 } p2 { acción2 } ... ... pn { acciónn } Donde pi es una expresión regular y cada accióni es un fragmento de programa que describe la acción del analizador léxico cuando el patrón pi coincide con un lexema.

Compilación line_numbering.flex Generamos el analizador léxico con el compilador flex: flex line_numbering.flex Se crea un archivo lex.yy.c a partir del cual generamos un ejecutable con gcc: gcc –o line_numbering lex.yy.c -ll Probamos con: ./line_numbering < tolower.flex

Ejemplo: archivo line_numbering.flex (2da versión) %{ /* * line numbering */ %} %% ^.*\n printf("%d\t%s", yylineno++, yytext);

Expresiones regulares Expresión Empareja con Ejemplo c cualquier carácter c que no sea operador a \c el carácter c literalmente \* “s” la cadena s literalmente “**” . cualquier carácter excepto de nueva línea a.*b ^ el comienzo de línea ^abc $ el fin de línea abc$ [s] cualquier carácter en s [abc] [^s] cualquier carácter que no esté en s [^abc] r* cero o más r a* r+ una o más r a+ r? cero o una r a? r{m,n} m a n casos de r a{1,5} r1r2 r1 y entonces r2 ab r1|r2 r1 o r2 a|b (r) r (a b) r1/r2 r1 cuando va seguida de r2 abc/123

Ejemplo: archivo wc.flex %{ /* * word count */ int nchar = 0; int nword = 0; int nline = 0; %} Declaraciones

Ejemplo: archivo wc.flex %% \n ++nchar, ++nline; [^ \t\n]+ ++nword, nchar+= yyleng; . ++nchar; Especificaciones regulares y reglas de traducción

Ejemplo: archivo wc.flex #include <stdio.h> int main ( void ) { yylex(); printf("%d %d %d\n", nchar, nword, nline); return 0; } Procedimientos Auxiliares

Compilación wc.flex Generamos el analizador léxico con el compilador flex: flex wc.flex Se crea un archivo lex.yy.c a partir del cual generamos un ejecutable con gcc: gcc –o wc lex.yy.c -ll Probamos con: ./wc < tolower.flex

Declaraciones La sección de declaraciones incluye declaraciones de headers, constantes simbólicas, variables, funciones auxiliares, etc. Por ejemplo: %{ /* * word count */ int nchar = 0; int nword = 0; int nline = 0; %}

Procedimientos auxiliares La tercera sección contiene todos los procedimientos auxiliares que puedan necesitar las acciones. A veces estos procedimientos se pueden compilar por separado y cargar con el analizador léxico.

Ejemplo: archivo wc.flex #include <stdio.h> int main ( void ) { yylex(); printf("%d %d %d\n", nchar, nword, nline); return 0; }

Archivo lex.yy.c Es el archivo que contiene al analizador léxico llamado yylex. Dentro de él también están declaradas las variables yyin e yytext: 166 extern FILE *yyin, *yyout; 353 extern char *yytext; 637 extern int yylex (void); Obs.: Los valores de línea sólo son referenciales.

Manuales sobre flex UBUNTU tiene un manual en línea: man flex En Internet también se puede buscar y descargar un manual.

Gracias por su atención.