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);} ;
71 SL : ("\r\n" | "\n") {newline();$setType(Token.SKIP);} ;
73 // Comentario de linea
74 COMENT_LIN:"//" (~('\n'|'\r'))* ('\r' | '\n'){newline();$setType(Token.SKIP);} ;
77 DOS_PUNTOS : ':'; //(D)os (P)untos
78 PARENTESIS_ABIERTO : '('; // (P)arentesis (A)bierto
79 PARENTESIS_CERRADO : ')'; // (P)arentesis (C)errado
80 LLAVE_ABIERTA: '{'; // (LL)ave (A)bierta
81 LLAVE_CERRADA: '}'; // (LL)ave (C)errada
82 CORCHETE_ABIERTO: '['; // (COR)chete (A)bierto
83 CORCHETE_CERRADO: ']'; // (COR)chete (C)errado
85 PUNTO_Y_COMA: ';'; // (PU)nto y (C)oma
88 // Operadores aritmeticos
94 // Operadores relacionales
105 // Lexemas auxiliares
106 protected DIGITO: ('0'..'9');
107 protected LETRA: ('a'..'z'|'A'..'Z');
110 // Literales Enteros y Reales
111 NUMERO : ((DIGITO)+ '.') => (DIGITO)+ '.' (DIGITO)+ {$setType(LIT_REAL);}
112 | ((DIGITO)+) => (DIGITO)+ {$setType(LIT_ENTERO);}
115 LIT_CAR: '\''! (~('\''|'\n'|'\r'|'\t')) '\''!;
116 // Lexema IDENT (Identificadores)
117 // Se activa la comprobacion de palabras reservadas.
118 // Las palabras reservadas tienen preferencia a cualquier otro identificador.
119 IDENT options {testLiterals=true;}: LETRA(LETRA|DIGITO)* ;