1 / 11

Análisis Lexicográfico

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.

vinny
Download Presentation

Análisis Lexicográfico

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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 f(x)=3.1416*X+sin(X/2)-X@2

  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. 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 C++ 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.

More Related