incluidos todos, que no lo habĂ­a hecho antes
[PL2.git] / Analex.g
1 class Analex extends Lexer;
2 options{
3 // Importacion del vocabulario de tokens desde el analizador
4 // sintactico (Anasint.g)
5 importVocab=Anasint;
6 // Por defecto no se activa la comprobacion de literales
7 // declarados en la seccion tokens
8 testLiterals=false;
9 //2 simbolos de anticipacion para tomar decisiones
10 //(los tokens DP y ASIG justifican su necesidad)
11 k=2;
12
13 charVocabulary = '\3'..'\377';
14
15 }
16 tokens{
17 // Palabras reservas (unidad de programa)
18 MODULO="modulo";
19 IMPORTACION="importacion";
20 EXPORTACION="exportacion";
21 IMPLEMENTACION="implementacion";
22
23 //Palabra reservada para la creacion de objetos
24 CREAR="crear";
25
26 //Palabra reservada para imprimir por pantalla
27 ESCRIBIR="escribir";
28
29 // Palabras reservadas (instrucciones compuestas)
30 // palabras reservadas en condicionales
31 SI="si";
32 ENTONCES="entonces";
33 SINO="sino";
34 FINSI="finsi";
35 // palabras reservadas en iteraciones
36 MIENTRAS="mientras";
37 HACER="hacer";
38 FINMIENTRAS="finmientras";
39 // Palabras reservadas (devolucion resultado)
40 DEV="dev";
41 // Palabras reservadas (visibilidad)
42 OCULTO="oculto";
43 // Palabras reservadas (clase instanciable)
44 INST="inst";
45 // Palabras reservas (tipos predefinidos simples)
46 ENTERO="entero";
47 REAL="real";
48 LOGICO="logico";
49 CARACTER="caracter";
50 // Palabras reservas (tipos predefinidos compuestos)
51 FORMACION="formacion";
52 // Palabras reservas (tipos no predefinidos)
53 CLASE="clase";
54 // Palabras reservadas (literales logicos)
55 CIERTO="cierto";
56 FALSO="falso";
57 // Palabras reservadas (operadores logicos)
58 Y="y";
59 O="o";
60 NO="no";
61
62 ENTERO_A_REAL="enteroareal";
63 REAL_A_ENTERO="realaentero";
64
65 }
66 //Tokens inutiles para el analisis sintactico
67 //(B)lancos y (T)abuladores
68 BT : (' '|'\t') {$setType(Token.SKIP);} ;
69 //(S)altos de (L)inea
70 SL : ("\r\n" | "\n") {newline();$setType(Token.SKIP);} ;
71
72 // Comentario de linea
73 COMENT_LIN: "//" (~('\n'))* SL {newline();$setType(Token.SKIP);} ;
74
75 // Signos de puntuaci
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
83 COMA: ','; // (CO)ma
84 PUNTO_Y_COMA: ';'; // (PU)nto y (C)oma
85 PUNTO:'.'; // (PU)nto
86
87 // Operadores aritmeticos
88 MAS: '+';
89 MENOS: '-';
90 POR: '*';
91 DIVISION: '/';
92
93 // Operadores relacionales
94 MENOR:'<';
95 MENOR_IGUAL:"<=";
96 MAYOR:'>';
97 MAYOR_IGUAL:">=";
98 IGUAL: '=';
99 DISTINTO: "!=";
100
101 // Asignaci
102 ASIGNACION : ":=" ;
103
104 // Lexemas auxiliares
105 protected DIGITO: ('0'..'9');
106 protected LETRA: ('a'..'z'|'A'..'Z');
107
108
109 // Literales Enteros y Reales
110 NUMERO : ((DIGITO)+ '.') => (DIGITO)+ '.' (DIGITO)+ {$setType(LIT_REAL);}
111 | ((DIGITO)+) => (DIGITO)+ {$setType(LIT_ENTERO);}
112 ;
113 //Literales Caracter
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)* ;
119
120