Aplicación de autómatas: Analizador léxico 1. q0q0 q1q1 q2q2 L|_ L|_ |D otro q3q3 q4q4 D D 1 1 q5q5 + q6q6 1 devolver símbolo a la entrada estado = 0 switch.

Slides:



Advertisements
Presentaciones similares
Una estructura de control permite controlar el flujo de la ejecución de instrucciones. Con estas estructuras, el programador puede determinar el orden.
Advertisements

Condicional if y switch
FÍSICA Entrega 1 Página 84 – ejercicio 3 Página 70 – ejercicio 3.3.
Introducción ¿Qué es un Algoritmo?
Tema #10. FICHEROS.
Aplicación de autómatas: Analizador léxico 2.
 Primitivas de la construcción de Thompson Expresión regular
Conversión de autómata finito con transiciones-ε a autómata finito determinista Estados q3q3 q2q2 q0q0 q1q1 q4q4 a b c c c.
E-science grid facility for Europe and Latin America CeCalCULA Ambientes y Herramientas para la e-Investigación Mérida, Portales.
MODELO DE REGRESIÓN LINEAL SIMPLE
2 Curso de Ingenieros de Telecomunicación L1 1 Biestables (II)
Canal endémico o índice endémico
FUNDAMENTALS OF THE JAVA PROGRAMMING LANGUAGE (SL-110) CAPÍTULO 7: OPERADORES Y ESTRUCTURAS DE SELECCION Ing. Ronald Criollo.
Autómatas de pila (Pushdown automata)
Diseño de Autómatas Finitos
Autómatas Finitos.
Autómata Finito Un autómata finito (AF) es un modelo de computación muy restringido, sin embargo tiene una gran aplicación en reconocimiento de patrones.
EL LENGUAJE DE PROGRAMACIÓN C
FÍSICA Entrega 2 Página 102 – ejercicio 16 Página 100 – ejercicio 1.
Introducción a JAVA COMP 250. Estructura de Selección selection statements selection statements – Escoger cuál acción ejecutar dependiendo de dos ó más.
El análisis de los mercados competitivos. Esbozo del capítulo La evaluación de las ganancias y las pérdidas provocadas por la política económica: el excedente.
Conversión de autómata finito con transiciones-ε y no determinista a autómata finito determinista Estados Entradas a b c q0q0 q1q1 q2q2 q3q3 q4q4 ab b.
Conversión de autómata finito no determinista a autómata finito determinista Estados a q1q1 q2q2 q3q3 q4q4 a c c c b b.
ALMACENAMIENTO SUBTERRANEO
PRODUCCIÓN A LARGO PLAZO
Profesora: Nelwi Báez P
OFERTA Y DEMANDA MICROECONOMÍA
MATLAB.
Tomado de Sudkamp: Languages and Machines Cap. 7.
Universidad Autónoma de Nuevo León Facultad de Ingeniería Mecánica y Eléctrica Noviembre 2010 Sistemas Digitales Electrónica Digital I Universidad Autónoma.
BALANCE TERMICO DE LA COLADA CONTINUA DE DESBASTES DE SIDERAR
q1= 3x10-⁶ A (0cm, 0cm) q2 3x10-⁶ B (4cm, 0cm) q3= 4x10-⁶ C (6cm, 0cm)
El Potencial Eléctrico
SISTEMA DIÉDRICO El punto.
ESTE TEMA ES MUY SENCILLO, SE TE AGRADECE QUE PRESTES ATENCIÓN
Semana 1 Potencial eléctrico
Los beneficios del comercio internacional: análisis gráfico
Modelo de Flujo Circular de la Economía FACTORES DE LA PRODUCCIÓN
Tema 2 Autómatas finitos 1. Autómata finito determinista
4. Máquinas de Turing 4.1. Modelo básico.
INFORMATICA I Funciones CLASE 13.
ESTRUCTURAS DE CONTROL
LINEAS TRIGONOMETRICAS
Autómatas finitos y expresiones regulares
Las curvas isocuantas y sus propiedades.
ArqParASCI QCurso 13/14 Completo => Alpha EV-68 a 1,25GHz => 30TFlops Contrato 22/8/2000 => 200 m$ => 175 m€ => mPts ¿
Ocurre con frecuencia, tanto en programación como en la vida real, que las decisiones que se nos pide tomar son más complicadas que una simple selección.
TEORÍA ELECTROMAGNÉTICA
TEORÍA ELECTROMAGNÉTICA
1.Tecnología Java Instaladores necesarios Jdk->Para Desarrollo
Funciones “En C” Semestre de Otoño 2006 Claudio Gutiérrez-Soto.
5. Propiedades de Cierre de los lenguajes regulares
PROPIEDADES DEL MATERIAL REFRACTARIO IDEAL
Medidas Descriptivas Numéricas
LENGUAJE “C” Programación.
Tema 7c Entrada y salida de funciones. Funciones Funcion Entradas SalidasTareas.
PROBLEMA PROPUESTO NUMERO 3 PROBLEMA: SE DESEA UN ALGORITMO QUE REALIZA LA OPERACION DE SUMA O RESTA DE LOS NUMEROS LEIDOS DEL TECLADOEN FUNCION ALA RESPUESTA.
Cadenas y apuntadores Programación.
SENTENCIAS DE CONTROL Ing. José Antonio Poma G..
Compiladores (23/04/ :35) Compiladores Tema 3 Análisis Lexicográfico Scanners.
Rosana Montes – LSI - Granada, Junio Fundamentos de Programación en Java. Introducción a Java Estructuras condicionales If, if else, switch.
Símbolos de Programación Estructurada
Estructuras selectivas
1 Desarrollo Web en Entorno Servidor Tema 4: Estructuras de control. Estructuras Selectivas. Operadores de comparación. Operadores Lógicos. Operadores.
Errores comunes en la interpretación y aplicación de las NIIF.
Programación PHP switch saregune CC 2009.
Estructuras PILA - COLA - LISTA.
A (RID) Identificador de la Marca de la Tarjeta (PIX) Identificador del Producto / Marca de Aceptación.
Introducción a la Programación “El lenguaje C”
Implementación del analizador léxico Prácticas EDI - © Juan Ramón Pérez1.
Transcripción de la presentación:

Aplicación de autómatas: Analizador léxico 1. q0q0 q1q1 q2q2 L|_ L|_ |D otro q3q3 q4q4 D D 1 1 q5q5 + q6q6 1 devolver símbolo a la entrada estado = 0 switch (estado) { case 0: if (isalpha(*p) || *p == '_') estado = 1; else if (isdigit(*p)) estado = 3; else if (*p == '+') estado = 5; else estado = 6; p++; /* avanzar en la cadena de entrada */ break; case 1: if (isalpha(*p) || *p == '_' || isdigit(*p)) estado = 1; else estado = 2; p++; /* avanzar en la cadena de entrada */ break; case 2: printf(" ID"); /* en los estados de aceptación no hay lectura */ estado = 0; /* se inicia estado para un nuevo token */ p--; /* se devuelve un caracter a la entrada */ break; case 3: if (isdigit(*p)) estado = 3; else estado = 4; p++; /* avanzar en la cadena de entrada */ break; case 4: printf(" ENT"); /* ENTERO */ estado = 0; /* se inicia estado para un nuevo token */ p--; /* se devuelve un caracter a la entrada */ break; case 5: printf(" SUM"); /* SUMA */ estado = 0; /* se inicia estado para un nuevo token */ break; case 6: printf(" ERR"); /* ERROR O TOKEN DESCONOCIDO */ estado = 0; /* se inicia estado para un nuevo token */ }

q0q0 q1q1 q2q2 L|_ L|_ |D otro q3q3 q4q4 D D 1 1 q5q5 + q6q6 1 devolver símbolo a la entrada estado = 0 switch (estado) { case 0: if (isalpha(*p) || *p == '_') estado = 1; else if (isdigit(*p)) estado = 3; else if (*p == '+') estado = 5; else estado = 6; p++; /* avanzar en la cadena de entrada */ break; case 1: if (isalpha(*p) || *p == '_' || isdigit(*p)) estado = 1; else estado = 2; p++; /* avanzar en la cadena de entrada */ break; case 2: printf(" ID"); /* en los estados de aceptación no hay lectura */ estado = 0; /* se inicia estado para un nuevo token */ p--; /* se devuelve un caracter a la entrada */ break; case 3: if (isdigit(*p)) estado = 3; else estado = 4; p++; /* avanzar en la cadena de entrada */ break; case 4: printf(" ENT"); /* ENTERO */ estado = 0; /* se inicia estado para un nuevo token */ p--; /* se devuelve un caracter a la entrada */ break; case 5: printf(" SUM"); /* SUMA */ estado = 0; /* se inicia estado para un nuevo token */ break; case 6: printf(" ERR"); /* ERROR O TOKEN DESCONOCIDO */ estado = 0; /* se inicia estado para un nuevo token */ }

q0q0 q1q1 q2q2 L|_ L|_ |D otro q3q3 q4q4 D D 1 1 q5q5 + q6q6 1 devolver símbolo a la entrada estado = 0 switch (estado) { case 0: if (isalpha(*p) || *p == '_') estado = 1; else if (isdigit(*p)) estado = 3; else if (*p == '+') estado = 5; else estado = 6; p++; /* avanzar en la cadena de entrada */ break; case 1: if (isalpha(*p) || *p == '_' || isdigit(*p)) estado = 1; else estado = 2; p++; /* avanzar en la cadena de entrada */ break; case 2: printf(" ID"); /* en los estados de aceptación no hay lectura */ estado = 0; /* se inicia estado para un nuevo token */ p--; /* se devuelve un caracter a la entrada */ break; case 3: if (isdigit(*p)) estado = 3; else estado = 4; p++; /* avanzar en la cadena de entrada */ break; case 4: printf(" ENT"); /* ENTERO */ estado = 0; /* se inicia estado para un nuevo token */ p--; /* se devuelve un caracter a la entrada */ break; case 5: printf(" SUM"); /* SUMA */ estado = 0; /* se inicia estado para un nuevo token */ break; case 6: printf(" ERR"); /* ERROR O TOKEN DESCONOCIDO */ estado = 0; /* se inicia estado para un nuevo token */ }

q0q0 q1q1 q2q2 L|_ L|_ |D otro q3q3 q4q4 D D 1 1 q5q5 + q6q6 1 devolver símbolo a la entrada estado = 0 switch (estado) { case 0: if (isalpha(*p) || *p == '_') estado = 1; else if (isdigit(*p)) estado = 3; else if (*p == '+') estado = 5; else estado = 6; p++; /* avanzar en la cadena de entrada */ break; case 1: if (isalpha(*p) || *p == '_' || isdigit(*p)) estado = 1; else estado = 2; p++; /* avanzar en la cadena de entrada */ break; case 2: printf(" ID"); /* en los estados de aceptación no hay lectura */ estado = 0; /* se inicia estado para un nuevo token */ p--; /* se devuelve un caracter a la entrada */ break; case 3: if (isdigit(*p)) estado = 3; else estado = 4; p++; /* avanzar en la cadena de entrada */ break; case 4: printf(" ENT"); /* ENTERO */ estado = 0; /* se inicia estado para un nuevo token */ p--; /* se devuelve un caracter a la entrada */ break; case 5: printf(" SUM"); /* SUMA */ estado = 0; /* se inicia estado para un nuevo token */ break; case 6: printf(" ERR"); /* ERROR O TOKEN DESCONOCIDO */ estado = 0; /* se inicia estado para un nuevo token */ }

q0q0 q1q1 q2q2 L|_ L|_ |D otro q3q3 q4q4 D D 1 1 q5q5 + q6q6 1 devolver símbolo a la entrada estado = 0 switch (estado) { case 0: if (isalpha(*p) || *p == '_') estado = 1; else if (isdigit(*p)) estado = 3; else if (*p == '+') estado = 5; else estado = 6; p++; /* avanzar en la cadena de entrada */ break; case 1: if (isalpha(*p) || *p == '_' || isdigit(*p)) estado = 1; else estado = 2; p++; /* avanzar en la cadena de entrada */ break; case 2: printf(" ID"); /* en los estados de aceptación no hay lectura */ estado = 0; /* se inicia estado para un nuevo token */ p--; /* se devuelve un caracter a la entrada */ break; case 3: if (isdigit(*p)) estado = 3; else estado = 4; p++; /* avanzar en la cadena de entrada */ break; case 4: printf(" ENT"); /* ENTERO */ estado = 0; /* se inicia estado para un nuevo token */ p--; /* se devuelve un caracter a la entrada */ break; case 5: printf(" SUM"); /* SUMA */ estado = 0; /* se inicia estado para un nuevo token */ break; case 6: printf(" ERR"); /* ERROR O TOKEN DESCONOCIDO */ estado = 0; /* se inicia estado para un nuevo token */ }

q0q0 q1q1 q2q2 L|_ L|_ |D otro q3q3 q4q4 D D 1 1 q5q5 + q6q6 1 devolver símbolo a la entrada estado = 0 switch (estado) { case 0: if (isalpha(*p) || *p == '_') estado = 1; else if (isdigit(*p)) estado = 3; else if (*p == '+') estado = 5; else estado = 6; p++; /* avanzar en la cadena de entrada */ break; case 1: if (isalpha(*p) || *p == '_' || isdigit(*p)) estado = 1; else estado = 2; p++; /* avanzar en la cadena de entrada */ break; case 2: printf(" ID"); /* en los estados de aceptación no hay lectura */ estado = 0; /* se inicia estado para un nuevo token */ p--; /* se devuelve un caracter a la entrada */ break; case 3: if (isdigit(*p)) estado = 3; else estado = 4; p++; /* avanzar en la cadena de entrada */ break; case 4: printf(" ENT"); /* ENTERO */ estado = 0; /* se inicia estado para un nuevo token */ p--; /* se devuelve un caracter a la entrada */ break; case 5: printf(" SUM"); /* SUMA */ estado = 0; /* se inicia estado para un nuevo token */ break; case 6: printf(" ERR"); /* ERROR O TOKEN DESCONOCIDO */ estado = 0; /* se inicia estado para un nuevo token */ }

q0q0 q1q1 q2q2 L|_ L|_ |D otro q3q3 q4q4 D D 1 1 q5q5 + q6q6 1 devolver símbolo a la entrada estado = 0 switch (estado) { case 0: if (isalpha(*p) || *p == '_') estado = 1; else if (isdigit(*p)) estado = 3; else if (*p == '+') estado = 5; else estado = 6; p++; /* avanzar en la cadena de entrada */ break; case 1: if (isalpha(*p) || *p == '_' || isdigit(*p)) estado = 1; else estado = 2; p++; /* avanzar en la cadena de entrada */ break; case 2: printf(" ID"); /* en los estados de aceptación no hay lectura */ estado = 0; /* se inicia estado para un nuevo token */ p--; /* se devuelve un caracter a la entrada */ break; case 3: if (isdigit(*p)) estado = 3; else estado = 4; p++; /* avanzar en la cadena de entrada */ break; case 4: printf(" ENT"); /* ENTERO */ estado = 0; /* se inicia estado para un nuevo token */ p--; /* se devuelve un caracter a la entrada */ break; case 5: printf(" SUM"); /* SUMA */ estado = 0; /* se inicia estado para un nuevo token */ break; case 6: printf(" ERR"); /* ERROR O TOKEN DESCONOCIDO */ estado = 0; /* se inicia estado para un nuevo token */ }

q0q0 q1q1 q2q2 L|_ L|_ |D otro q3q3 q4q4 D D 1 1 q5q5 + q6q6 1 devolver símbolo a la entrada estado = 0 switch (estado) { case 0: if (isalpha(*p) || *p == '_') estado = 1; else if (isdigit(*p)) estado = 3; else if (*p == '+') estado = 5; else estado = 6; p++; /* avanzar en la cadena de entrada */ break; case 1: if (isalpha(*p) || *p == '_' || isdigit(*p)) estado = 1; else estado = 2; p++; /* avanzar en la cadena de entrada */ break; case 2: printf(" ID"); /* en los estados de aceptación no hay lectura */ estado = 0; /* se inicia estado para un nuevo token */ p--; /* se devuelve un caracter a la entrada */ break; case 3: if (isdigit(*p)) estado = 3; else estado = 4; p++; /* avanzar en la cadena de entrada */ break; case 4: printf(" ENT"); /* ENTERO */ estado = 0; /* se inicia estado para un nuevo token */ p--; /* se devuelve un caracter a la entrada */ break; case 5: printf(" SUM"); /* SUMA */ estado = 0; /* se inicia estado para un nuevo token */ break; case 6: printf(" ERR"); /* ERROR O TOKEN DESCONOCIDO */ estado = 0; /* se inicia estado para un nuevo token */ } Identificador

q0q0 q1q1 q2q2 L|_ L|_ |D otro q3q3 q4q4 D D 1 1 q5q5 + q6q6 1 devolver símbolo a la entrada estado = 0 switch (estado) { case 0: if (isalpha(*p) || *p == '_') estado = 1; else if (isdigit(*p)) estado = 3; else if (*p == '+') estado = 5; else estado = 6; p++; /* avanzar en la cadena de entrada */ break; case 1: if (isalpha(*p) || *p == '_' || isdigit(*p)) estado = 1; else estado = 2; p++; /* avanzar en la cadena de entrada */ break; case 2: printf(" ID"); /* en los estados de aceptación no hay lectura */ estado = 0; /* se inicia estado para un nuevo token */ p--; /* se devuelve un caracter a la entrada */ break; case 3: if (isdigit(*p)) estado = 3; else estado = 4; p++; /* avanzar en la cadena de entrada */ break; case 4: printf(" ENT"); /* ENTERO */ estado = 0; /* se inicia estado para un nuevo token */ p--; /* se devuelve un caracter a la entrada */ break; case 5: printf(" SUM"); /* SUMA */ estado = 0; /* se inicia estado para un nuevo token */ break; case 6: printf(" ERR"); /* ERROR O TOKEN DESCONOCIDO */ estado = 0; /* se inicia estado para un nuevo token */ }

q0q0 q1q1 q2q2 L|_ L|_ |D otro q3q3 q4q4 D D 1 1 q5q5 + q6q6 1 devolver símbolo a la entrada estado = 0 switch (estado) { case 0: if (isalpha(*p) || *p == '_') estado = 1; else if (isdigit(*p)) estado = 3; else if (*p == '+') estado = 5; else estado = 6; p++; /* avanzar en la cadena de entrada */ break; case 1: if (isalpha(*p) || *p == '_' || isdigit(*p)) estado = 1; else estado = 2; p++; /* avanzar en la cadena de entrada */ break; case 2: printf(" ID"); /* en los estados de aceptación no hay lectura */ estado = 0; /* se inicia estado para un nuevo token */ p--; /* se devuelve un caracter a la entrada */ break; case 3: if (isdigit(*p)) estado = 3; else estado = 4; p++; /* avanzar en la cadena de entrada */ break; case 4: printf(" ENT"); /* ENTERO */ estado = 0; /* se inicia estado para un nuevo token */ p--; /* se devuelve un caracter a la entrada */ break; case 5: printf(" SUM"); /* SUMA */ estado = 0; /* se inicia estado para un nuevo token */ break; case 6: printf(" ERR"); /* ERROR O TOKEN DESCONOCIDO */ estado = 0; /* se inicia estado para un nuevo token */ }

q0q0 q1q1 q2q2 L|_ L|_ |D otro q3q3 q4q4 D D 1 1 q5q5 + q6q6 1 devolver símbolo a la entrada estado = 0 switch (estado) { case 0: if (isalpha(*p) || *p == '_') estado = 1; else if (isdigit(*p)) estado = 3; else if (*p == '+') estado = 5; else estado = 6; p++; /* avanzar en la cadena de entrada */ break; case 1: if (isalpha(*p) || *p == '_' || isdigit(*p)) estado = 1; else estado = 2; p++; /* avanzar en la cadena de entrada */ break; case 2: printf(" ID"); /* en los estados de aceptación no hay lectura */ estado = 0; /* se inicia estado para un nuevo token */ p--; /* se devuelve un caracter a la entrada */ break; case 3: if (isdigit(*p)) estado = 3; else estado = 4; p++; /* avanzar en la cadena de entrada */ break; case 4: printf(" ENT"); /* ENTERO */ estado = 0; /* se inicia estado para un nuevo token */ p--; /* se devuelve un caracter a la entrada */ break; case 5: printf(" SUM"); /* SUMA */ estado = 0; /* se inicia estado para un nuevo token */ break; case 6: printf(" ERR"); /* ERROR O TOKEN DESCONOCIDO */ estado = 0; /* se inicia estado para un nuevo token */ } Entero sin signo

q0q0 q1q1 q2q2 L|_ L|_ |D otro q3q3 q4q4 D D 1 1 q5q5 + q6q6 1 devolver símbolo a la entrada estado = 0 switch (estado) { case 0: if (isalpha(*p) || *p == '_') estado = 1; else if (isdigit(*p)) estado = 3; else if (*p == '+') estado = 5; else estado = 6; p++; /* avanzar en la cadena de entrada */ break; case 1: if (isalpha(*p) || *p == '_' || isdigit(*p)) estado = 1; else estado = 2; p++; /* avanzar en la cadena de entrada */ break; case 2: printf(" ID"); /* en los estados de aceptación no hay lectura */ estado = 0; /* se inicia estado para un nuevo token */ p--; /* se devuelve un caracter a la entrada */ break; case 3: if (isdigit(*p)) estado = 3; else estado = 4; p++; /* avanzar en la cadena de entrada */ break; case 4: printf(" ENT"); /* ENTERO */ estado = 0; /* se inicia estado para un nuevo token */ p--; /* se devuelve un caracter a la entrada */ break; case 5: printf(" SUM"); /* SUMA */ estado = 0; /* se inicia estado para un nuevo token */ break; case 6: printf(" ERR"); /* ERROR O TOKEN DESCONOCIDO */ estado = 0; /* se inicia estado para un nuevo token */ } Suma

q0q0 q1q1 q2q2 L|_ L|_ |D otro q3q3 q4q4 D D 1 1 q5q5 + q6q6 1 devolver símbolo a la entrada estado = 0 switch (estado) { case 0: if (isalpha(*p) || *p == '_') estado = 1; else if (isdigit(*p)) estado = 3; else if (*p == '+') estado = 5; else estado = 6; p++; /* avanzar en la cadena de entrada */ break; case 1: if (isalpha(*p) || *p == '_' || isdigit(*p)) estado = 1; else estado = 2; p++; /* avanzar en la cadena de entrada */ break; case 2: printf(" ID"); /* en los estados de aceptación no hay lectura */ estado = 0; /* se inicia estado para un nuevo token */ p--; /* se devuelve un caracter a la entrada */ break; case 3: if (isdigit(*p)) estado = 3; else estado = 4; p++; /* avanzar en la cadena de entrada */ break; case 4: printf(" ENT"); /* ENTERO */ estado = 0; /* se inicia estado para un nuevo token */ p--; /* se devuelve un caracter a la entrada */ break; case 5: printf(" SUM"); /* SUMA */ estado = 0; /* se inicia estado para un nuevo token */ break; case 6: printf(" ERR"); /* ERROR O TOKEN DESCONOCIDO */ estado = 0; /* se inicia estado para un nuevo token */ } Error o token no definido

q0q0 q1q1 q2q2 L|_ L|_ |D otro q3q3 q4q4 D D 1 1 q5q5 + q6q6 1 devolver símbolo a la entrada estado = 0 switch (estado) { case 0: if (isalpha(*p) || *p == '_') estado = 1; else if (isdigit(*p)) estado = 3; else if (*p == '+') estado = 5; else estado = 6; p++; /* avanzar en la cadena de entrada */ break; case 1: if (isalpha(*p) || *p == '_' || isdigit(*p)) estado = 1; else estado = 2; p++; /* avanzar en la cadena de entrada */ break; case 2: printf(" ID"); /* en los estados de aceptación no hay lectura */ estado = 0; /* se inicia estado para un nuevo token */ p--; /* se devuelve un caracter a la entrada */ break; case 3: if (isdigit(*p)) estado = 3; else estado = 4; p++; /* avanzar en la cadena de entrada */ break; case 4: printf(" ENT"); /* ENTERO */ estado = 0; /* se inicia estado para un nuevo token */ p--; /* se devuelve un caracter a la entrada */ break; case 5: printf(" SUM"); /* SUMA */ estado = 0; /* se inicia estado para un nuevo token */ break; case 6: printf(" ERR"); /* ERROR O TOKEN DESCONOCIDO */ estado = 0; /* se inicia estado para un nuevo token */ }