La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Análisis Lexicográfico

Presentaciones similares


Presentación del tema: "Análisis Lexicográfico"— 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 1 2 3 4 Nombre Tipo Paridad Direccion

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 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 Errores lexicográficos famosos
PL/1 Los comandos del lenguaje no eran palabras reservadas. Ej. IF ELSE THEN=ELSE; ELSE ELSE=THEN

6 Errores lexicográficos famosos
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.

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

8 Expresiones Regulares
Def. Sea S un conjunto finito de símbolos cualquiera: i). F es una Expresión Regular ii).  (la palabra vacía) es una Expresión Regular. iii). Si a S 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.

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 Generador de compiladores
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(); }

11 Generador de compiladores
Como ejecutar Lex > lex ch1-01.1 > 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.


Descargar ppt "Análisis Lexicográfico"

Presentaciones similares


Anuncios Google