Analizador léxico
Procesadores de Lenguaje (v1.7)
1
Análisis Léxico
Funciones Ignorar caracteres no relevantes Agrupar resto de los caracteres Rechazar agrupaciones inválidas y clasificar las válidas Ejemplo Entrada: 22 números (caracteres)
Incremento (29) 87 72 73 76 69 32 69 68 65 68 49 43 43 32 Igual (61) 61 61 32 Num (33) 53 52 43 Mas (6) Num (33) 50 32 Final (0)
While (25)Identificador (10)
Salida: 8 números (tokens)
25
10
29
61
33
6
33
0
2
Análisis Léxico
Definiciones Lexema Agrupación de caracteres que constituyen los símbolos con los que se forman las sentencias del lenguaje 12 386 CONT i
Token Conjunto de lexemas que puede ser tratado como una unidad sintáctica NUM NUM IDENT IDENT
Criterio ¿Delimitadores? [ ] { }¿Operadores? + - * / Patrón Regla que permite determinar qué lexemas pertenecen a un token Token: IDENTIFICADOR ¿En qué lenguaje se expresan los patrones? lexema: a32
3
Metalenguajes
Conceptos Básicos
4
Metalenguajes
Definición de Patrones En lenguaje natural O demasiado poco detallado a = .5; O demasiado extenso “An identifier is a sequence of letters and digits; the first character mustbe a letter. The underscore _ counts as a letter. Upper- and lowercase letters are different. If the input stream has been parsed into tokens up to a given character, the next token is taken to include the longest string of characters that could possibly constitute a token. Blanks, tabs, newlines, and comments are ignored except as they serve to separate tokens. Some white space is required toseparate otherwise adjacent identifiers, keywords, and constants.” Metalenguajes Descripción formal Precisión Concisión Ventajas Facilitan Comprensión Facilitan Implementación
5
Metalenguajes
Por fase en la que se utilizan Léxicos Autómatas Finitos Expresiones Regulares Sintácticos Diagramas Sintácticos BNF EBNF Semánticos Gramáticas Atribuidas Generación del Código Code Functions
6Metalenguajes Léxicos
Conceptos Básicos
7
Metalenguajes Léxicos
Autómatas Finitos Paso 1. Definir cada token con un autómata
¿ .5 ?
8
Metalenguajes Léxicos
Expresiones Regulares Operadores Concatenación Cierre: ‘*’ Cierre Positivo: ‘+’ Alternativa: ‘|’ Agrupación: ( ) Ejemplos (0|1|2|3|4|5|6|7|8|9)+ (0|1|2|3|4|5|6|7|8|9)*.(0|1|2|3|4|5|6|7|8|9)+ while ¿ .5 ?
9
pa pa* pa+ p|a(pa)+
Interfaz del Léxico
Procesadores de Lenguaje
10
Construcción Analizador Léxico
Pasos para obtener Analizador Léxico Determinar los tokens Definir un patrón para cada uno Implementar los patrones Manual Herramientas
patrones
Lexico.java
patrones
Herramienta (JFlex)
Lexico.java
11
Funcionalidad Requerida
Independientemente de cómo esté implementadoEliminar espacios y comentarios Control de número de línea Interfaz de Salida Interfaz de Entrada
12
Interfaz de Salida
No se procesa todo el fichero de una vez yylex Valores a devolver ¿Qué valores hay que devolver? ¿De qué tipo es cada uno? Representación ¿Cómo los devuelve el léxico? Protocolo de Acceso
13
Interfaz de Salida
Representación de Tokens Se acuerda representación medianteconstantes public interface static final static final static final static final static final static final } Tokens { int IDENT = 1; int IF = 2; int CTE = 3; int REAL = 4; int IGUAL = 5; int PTOYCOMA = 6;
El 0 se reserva
14
Interfaz de Salida
Representación de Tokens Los tokens de un solo carácter utilizan su código ASCII public interface Tokens { static final int IDENT = 257; staticfinal int IF = 258; static final int CTE = 259; static final int REAL = 260; static final int IGUAL = ‘=’; static final int PTOYCOMA = ‘;’; } Facilita la lectura del sintáctico
// Redundante // Redundante
asigna: IDENT IGUAL PARABRIR expr PARCERRAR PTOYCOMA asigna: IDENT ‘=’ ‘(’ expr ‘)’ ‘;’ Numeración comienza en 256 No se definen como Tokens
15
Interfaz de Salida
Representación del...
Regístrate para leer el documento completo.