Acceso a clase
[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
70 //(S)altos de (L)inea
71 SL : ("\r\n" | "\n") {newline();$setType(Token.SKIP);} ;
72
73 // Comentario de linea
74 COMENT_LIN:"//" (~('\n'|'\r'))* ('\r' | '\n'){newline();$setType(Token.SKIP);} ;
75
76 // Signos de puntuaci
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
84 COMA: ','; // (CO)ma
85 PUNTO_Y_COMA: ';'; // (PU)nto y (C)oma
86 PUNTO:'.'; // (PU)nto
87
88 // Operadores aritmeticos
89 MAS: '+';
90 MENOS: '-';
91 POR: '*';
92 DIVISION: '/';
93
94 // Operadores relacionales
95 MENOR:'<';
96 MENOR_IGUAL:"<=";
97 MAYOR:'>';
98 MAYOR_IGUAL:">=";
99 IGUAL: '=';
100 DISTINTO: "!=";
101
102 // Asignaci
103 ASIGNACION : ":=" ;
104
105 // Lexemas auxiliares
106 protected DIGITO: ('0'..'9');
107 protected LETRA: ('a'..'z'|'A'..'Z');
108
109
110 // Literales Enteros y Reales
111 NUMERO : ((DIGITO)+ '.') => (DIGITO)+ '.' (DIGITO)+ {$setType(LIT_REAL);}
112 | ((DIGITO)+) => (DIGITO)+ {$setType(LIT_ENTERO);}
113 ;
114 //Literales Caracter
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)* ;
120
121