Análisis Léxico
Objetivo
El Analizador Léxico tiene como misión:
- Procesar la entrada carácter a carácter y determinar dónde acaba un lexema y dónde empieza el siguiente.
- Clasificar los lexemas anteriores en tokens (categorías de lexemas).
- Identificar las secuencias de caracteres que no forman un lexema del lenguaje y notificar el error.
Sea el siguiente fichero de entrada:
java
DATA
float price;
int width;
CODE
price = (width - 3.0) * 1.18;
print price + 2 / 5;
Sea, además, la siguiente descripción de los tokens:
java
class Lexer {
public static final int INT = 257;
public static final int FLOAT = 258;
public static final int CODE = 259;
public static final int DATA = 260;
public static final int PRINT = 261;
public static final int FLOAT_LITERAL = 262;
static final int INT_LITERAL = 263;
static final int IDENT = 264;
…
}
Con todo lo anterior, el Analizador Léxico deberá devolver las siguientes parejas de lexema y token:
bash
[1:1] Token: 260. Lexema: DATA
[2:5] Token: 258. Lexema: float
[2:11] Token: 264. Lexema: price
[2:17] Token: 59. Lexema: ;
[3:5] Token: 257. Lexema: int
[3:9] Token: 264. Lexema: width
[3:14] Token: 59. Lexema: ;
[5:1] Token: 259. Lexema: CODE
[6:5] Token: 264. Lexema: price
[6:12] Token: 61. Lexema: =
[6:14] Token: 40. Lexema: (
[6:15] Token: 264. Lexema: width
[6:21] Token: 45. Lexema: -
[6:23] Token: 262. Lexema: 3.0
[6:26] Token: 41. Lexema: )
[6:28] Token: 42. Lexema: *
[6:30] Token: 262. Lexema: 1.18
[6:34] Token: 59. Lexema: ;
[7:5] Token: 261. Lexema: print
[7:11] Token: 264. Lexema: price
[7:18] Token: 43. Lexema: +
[7:20] Token: 263. Lexema: 2
[7:22] Token: 47. Lexema: /
[7:24] Token: 263. Lexema: 5
[7:25] Token: 59. Lexema: ;