public List<Token> analizar() {
		
		if(codigoAnalizar != null)
		for (int i = 0; i < codigoAnalizar.length; i++) {

			avanzarLinea();
			
			while (indiceCaracterActual < cadenaAnalizar.length()) {
				
				if(isCaracterBlanco(getCaracterActual())) {
					consumirEspacioBlanco();
					if(getCaracterActual() == EOF) {
						break;
					}
				}

				// Se trata de encontrar el token en alguna de las categorías.
				// Si no lo encuentra tokenActual sigue valiendo null.
				Token tokenActual = null;
				for (CategoriaLexica cl : categorias) {
					int linea = lineaActual;
					// El índice empieza en cero.
					int columna = indiceCaracterActual + 1;
					tokenActual = cl.aceptar();
					if(tokenActual != null) {
						tokenActual.setLinea(linea);
						tokenActual.setColumna(columna);
						break;
					}
				}
				
				// Si no se encontró ninguna categoría léxica se reporta el error.
				if(tokenActual == null) {
					errores.add(new Error(lineaActual, indiceCaracterActual + 1,
						"No se ha encontrado una categoría léxica para el token"));
					
					if(!isCaracterBlanco(getCaracterActual())) {
						irInicioSiguienteToken();
					}
				}
				// Sino se agrega el token a la lista.
				else {
					tokens.add(tokenActual);
					instalarTokenTablaSimbolos(tokenActual);
				}
			}
		}
		
		return getTokens();
	}