1 class Analex extends Lexer;
3 // Importacion del vocabulario de tokens desde el analizador
4 // sintactico (Anasint.g)
6 // Por defecto no se activa la comprobacion de literales
7 // declarados en la seccion tokens
9 //2 simbolos de anticipacion para tomar decisiones
10 //(los tokens DP y ASIG justifican su necesidad)
13 charVocabulary = '\3'..'\377';
17 // Palabras reservas (unidad de programa)
19 IMPORTACION="importacion";
20 EXPORTACION="exportacion";
21 IMPLEMENTACION="implementacion";
23 //Palabra reservada para la creacion de objetos
26 //Palabra reservada para imprimir por pantalla
29 // Palabras reservadas (instrucciones compuestas)
30 // palabras reservadas en condicionales
35 // palabras reservadas en iteraciones
38 FINMIENTRAS="finmientras";
39 // Palabras reservadas (devolucion resultado)
41 // Palabras reservadas (visibilidad)
43 // Palabras reservadas (clase instanciable)
45 // Palabras reservas (tipos predefinidos simples)
50 // Palabras reservas (tipos predefinidos compuestos)
51 FORMACION="formacion";
52 // Palabras reservas (tipos no predefinidos)
54 // Palabras reservadas (literales logicos)
57 // Palabras reservadas (operadores logicos)
62 ENTERO_A_REAL="enteroareal";
63 REAL_A_ENTERO="realaentero";
66 //Tokens inutiles para el analisis sintactico
67 //(B)lancos y (T)abuladores
68 BT : (' '|'\t') {$setType(Token.SKIP);} ;
70 SL : ("\r\n" | "\n") {newline();$setType(Token.SKIP);} ;
72 // Comentario de linea
73 COMENT_LIN: "//" (~('\n'))* SL {newline();$setType(Token.SKIP);} ;
76 DOS_PUNTOS : ':'; //(D)os (P)untos
77 PARENTESIS_ABIERTO : '('; // (P)arentesis (A)bierto
78 PARENTESIS_CERRADO : ')'; // (P)arentesis (C)errado
79 LLAVE_ABIERTA: '{'; // (LL)ave (A)bierta
80 LLAVE_CERRADA: '}'; // (LL)ave (C)errada
81 CORCHETE_ABIERTO: '['; // (COR)chete (A)bierto
82 CORCHETE_CERRADO: ']'; // (COR)chete (C)errado
84 PUNTO_Y_COMA: ';'; // (PU)nto y (C)oma
87 // Operadores aritmeticos
93 // Operadores relacionales
104 // Lexemas auxiliares
105 protected DIGITO: ('0'..'9');
106 protected LETRA: ('a'..'z'|'A'..'Z');
109 // Literales Enteros y Reales
110 NUMERO : ((DIGITO)+ '.') => (DIGITO)+ '.' (DIGITO)+ {$setType(LIT_REAL);}
111 | ((DIGITO)+) => (DIGITO)+ {$setType(LIT_ENTERO);}
114 LIT_CAR: '\''! (~('\''|'\n'|'\r'|'\t')) '\''!;
115 // Lexema IDENT (Identificadores)
116 // Se activa la comprobacion de palabras reservadas.
117 // Las palabras reservadas tienen preferencia a cualquier otro identificador.
118 IDENT options {testLiterals=true;}: LETRA(LETRA|DIGITO)* ;