La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Análisis Lexicográfico Definición Un analizador léxico o lexicográfico es un programa que procesa una cadena de caracteres y produce como salida una secuencia.

Presentaciones similares


Presentación del tema: "Análisis Lexicográfico Definición Un analizador léxico o lexicográfico es un programa que procesa una cadena de caracteres y produce como salida una secuencia."— Transcripción de la presentación:

1 Análisis Lexicográfico Definición Un analizador léxico o lexicográfico es un programa que procesa una cadena de caracteres y produce como salida una secuencia de tokens, mismos que serán procesados por el analizador sintáctico. Cada token es un elemento abstracto que identifica una clase de símbolos y puede tener asociado uno o varios atributos.

2 Análisis Lexicográfico Ejemplo: Evaluación de funciones NombreTipoParidadDireccion

3 Análisis Lexicográfico Algunos ejemplos de tokens pueden ser: id – que corresponde a la clase de identificadores: ej. n4, peso,... Atributos: nombre, lexema, tipo, localidad de memoria, … entero – que identifica a un número como entero: ej. 3, 546, … Atributos: valor, lexema, tipo, localidad de memoria, … real –identifica un número real: ej. 3.14,.89, -2.1, 1.3E-2 Atributos: valor, lexema, tipo, localidad de memoria, … op – identifica un operador: ej. +, -, *, :=, … Atributos: nombre, lexema, tipo, prioridad, …

4 Errores lexicográficos famosos Regla de FORTRAN Los espacios en blanco son insignificantes. Ej. var r1 es lo mismo que varr1 Nota: la regla fue motivada por la falta de precisión de las perforadoras de tarjetas.

5 PL/1 Los comandos del lenguaje no eran palabras reservadas. Ej. IF ELSE THEN=ELSE; ELSE ELSE=THEN Errores lexicográficos famosos

6 PL/1 (cont.) Declaraciones: DECLARE(ARG1,…,ARGN) -No podemos decir si DECLARE es una palabra reservada hasta procesar el ). -Requiere de un lookahead arbitrário. Errores lexicográficos famosos

7 C++ Sintaxis de template: Foo Sintaxis del stream: cin>>var; El conflicto es cuando generamos templates embebidos: Foo > Errores lexicográficos famosos

8 Def. Sea un conjunto finito de símbolos cualquiera: i). es una Expresión Regular ii). (la palabra vacía) es una Expresión Regular. iii). Si a entonces a es una Expresión Regular. iv). Sean u y v dos Expresiones Regulares cualquiera: uv, u + v, y u* son Expresiones Regulares. v). Nada que no este definido por (i)-(iv) es una expresión regular. Expresiones Regulares

9 Generador de compiladores LEX –% marca el final de una sección –La sección de reglas: Cada regla consiste en dos partes: un patrón y una acción, separadas por un espacio en blanco. Lex ejecuta la acción cada vez que reconoce el patrón. Los patrones son expresiones regulares. Ejemplo: –[\t ]+ ; /* ignora los espacios en blanco y los tabs */ »Los [] indican que cualquiera de los caracteres dentro de los paréntesis cuadrados encaja en el patrón. »La acción es simplemente ; -- no hagas nada. El siguiente ejemplo usa la barra vertical |como acción:

10 Ejemplo: reconocedor de palabras %{ Este ejemplo demuestra la forma en que lex reconoce palabras %} % [\t ]+ /* ignora los espacios en blanco */ ; did | have | go { printf(%s: es un verbo\n, yytext); } [a-zA-Z]+ { printf(%s: no es un verbo\n, yytext); }.|\n % Main() { yylex(); } Generador de compiladores

11 Como ejecutar Lex > lex ch > cc lex.yy.c –o first -11 Lex traduce la especificación a un programa en C llamado lex.yy.c que se deberá compilar en C. Generador de compiladores


Descargar ppt "Análisis Lexicográfico Definición Un analizador léxico o lexicográfico es un programa que procesa una cadena de caracteres y produce como salida una secuencia."

Presentaciones similares


Anuncios Google