Skip to content

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: ;