@@ -75,7 +75,8 @@ private void analizeLine(String line) {
7575 char [] chars = line .toCharArray ();
7676 stringActive = false ;
7777
78- // Separamos la linea en lexemas(palabras) para poder obtener el token de una manera mas sencilla
78+ // Separamos la linea en lexemas(palabras) para poder obtener el token de una
79+ // manera mas sencilla
7980 while (index != chars .length ) {
8081 // Ignoramos los comentarios en linea que comienzan con '#'
8182 if (!stringActive && chars [index ] == '#' ) {
@@ -87,8 +88,10 @@ private void analizeLine(String line) {
8788 stringActive = !stringActive ;
8889 }
8990
90- // Separamos los lexemas cada que encontramos los caracteres de espacio en blanco, delimitadores u operadores
91- if (!stringActive && (Character .isWhitespace (chars [index ]) || isOperator (Character .toString (chars [index ])) || isDelimiter (Character .toString (chars [index ])))) {
91+ // Separamos los lexemas cada que encontramos los caracteres de espacio en
92+ // blanco, delimitadores u operadores
93+ if (!stringActive && (Character .isWhitespace (chars [index ]) || isOperator (Character .toString (chars [index ]))
94+ || isDelimiter (Character .toString (chars [index ])))) {
9295 if (!lexeme .isBlank ()) {
9396 column = index + 1 - lexeme .length ();
9497 tokenList .add (new Token (lexeme , TokenType .DESCONOCIDO , row , column ));
@@ -98,11 +101,14 @@ private void analizeLine(String line) {
98101 if (index != tokenList .size () - 1 ) {
99102 if (isOperator (Character .toString (chars [index + 1 ]))) {
100103 column = index + 1 ;
101- tokenList .add (new Token (Character .toString (chars [index ]) + Character .toString (chars [index + 1 ]), TokenType .DESCONOCIDO , row , column ));
104+ tokenList .add (
105+ new Token (Character .toString (chars [index ]) + Character .toString (chars [index + 1 ]),
106+ TokenType .DESCONOCIDO , row , column ));
102107 index ++;
103108 } else {
104109 column = index + 1 ;
105- tokenList .add (new Token (Character .toString (chars [index ]), TokenType .DESCONOCIDO , row , column ));
110+ tokenList .add (
111+ new Token (Character .toString (chars [index ]), TokenType .DESCONOCIDO , row , column ));
106112 }
107113 }
108114 } else if (isDelimiter (Character .toString (chars [index ]))) {
@@ -155,7 +161,7 @@ private void analizeLine(String line) {
155161 *
156162 * @param lexeme El lexema a comparar con las palabras reservadas
157163 * @return 'True' si el lexema actual es una palabra reservada, 'False' si
158- * no lo es.
164+ * no lo es.
159165 */
160166 private boolean isReservedWord (String lexeme ) {
161167 return checkAndSetTokenType (lexeme , Constants .RESERVED_WORDS );
@@ -167,7 +173,7 @@ private boolean isReservedWord(String lexeme) {
167173 *
168174 * @param lexeme El lexema a comparar con las estructuras de control
169175 * @return 'True' si el lexema actual es una estructura de control, 'False'
170- * si no lo es.
176+ * si no lo es.
171177 */
172178 private boolean isControlStructure (String lexeme ) {
173179 return checkAndSetTokenType (lexeme , Constants .CONTROL_STRUCTURES );
@@ -188,7 +194,7 @@ private boolean isOperator(String lexeme) {
188194 *
189195 * @param lexeme El lexema a comparar con los delimitadores
190196 * @return 'True' si el lexema actual es un delimitador, 'False' si no lo
191- * es.
197+ * es.
192198 */
193199 private boolean isDelimiter (String lexeme ) {
194200 return checkAndSetTokenType (lexeme , Constants .DELIMITERS );
@@ -199,16 +205,24 @@ private boolean isDelimiter(String lexeme) {
199205 * base a su posicion de modo que asi puede determinar el tipo de
200206 * identificador
201207 *
202- * @param lexeme El lexema a comparar
208+ * @param lexeme El lexema a comparar
203209 * @param tknIndex La posicion del token a comparar
204210 * @return 'True' si el lexema actual es un identificador, 'False' si no lo
205- * es.
211+ * es.
206212 */
207213 private boolean isIdentifier (String lexeme , int tknIndex ) {
208214 boolean val = false ;
209215 try {
210216 if (tokenList .get (tknIndex + 1 ).getLexeme ().equals ("=" )) {
211- tokenType = TokenType .IDENTIFICADOR ;
217+ if (tokenList .get (tknIndex + 2 ).getLexeme ().equals ("{" )) {
218+ tokenType = TokenType .IDENTIFICADOR_CONJUNTO ;
219+ } else if (tokenList .get (tknIndex + 2 ).getLexeme ().equals ("(" )) {
220+ tokenType = TokenType .IDENTIFICADOR_TUPLA ;
221+ } else if (tokenList .get (tknIndex + 2 ).getLexeme ().equals ("[" )) {
222+ tokenType = TokenType .IDENTIFICADOR_LISTA ;
223+ } else {
224+ tokenType = TokenType .IDENTIFICADOR ;
225+ }
212226 variableNames .add (lexeme );
213227 val = !val ;
214228 } else if (variableNames .contains (lexeme )) {
@@ -226,10 +240,10 @@ private boolean isIdentifier(String lexeme, int tknIndex) {
226240 * base a su posicion de modo que asi puede determinar si es un
227241 * identificador de clase
228242 *
229- * @param lexeme El lexema a comparar
243+ * @param lexeme El lexema a comparar
230244 * @param tknIndex La posicion del token a comparar
231245 * @return 'True' si el lexema actual es un identificador de clase, 'False'
232- * si no lo es.
246+ * si no lo es.
233247 */
234248 private boolean isClassIdentifier (String lexeme , int tknIndex ) {
235249 boolean val = false ;
@@ -242,6 +256,9 @@ private boolean isClassIdentifier(String lexeme, int tknIndex) {
242256 } else if (tokenList .get (tknIndex - 1 ).getToken () == TokenType .FOR ) {
243257 tokenType = TokenType .IDENTIFICADOR ;
244258 val = !val ;
259+ } else if (tokenList .get (tknIndex - 1 ).getToken () == TokenType .DEF ) {
260+ tokenType = TokenType .IDENTIFICADOR_FUNCION ;
261+ val = !val ;
245262 }
246263 } catch (IndexOutOfBoundsException e ) {
247264
@@ -253,7 +270,7 @@ private boolean isClassIdentifier(String lexeme, int tknIndex) {
253270 * Este método verifica si el lexema se encuentra en alguno de los mapas de
254271 * tokens y establece su tipo de token una vez lo haya comparado.
255272 *
256- * @param lexeme el lexema a comparar con el mapa seleccionado.
273+ * @param lexeme el lexema a comparar con el mapa seleccionado.
257274 * @param tokenMap el mapa a utilizar para la busqueda y asignación.
258275 * @return Un booleano dependiendo de si se ha encontrado en el mapa o no.
259276 */
@@ -268,7 +285,7 @@ private boolean checkAndSetTokenType(String lexeme, Map<String, TokenType> token
268285 *
269286 * @param lexeme El lexema a comparar si es un valor númerico
270287 * @return 'True' si el lexema actual es un valor númerico, 'False' si no lo
271- * es.
288+ * es.
272289 */
273290 private boolean isNumber (String lexeme ) {
274291 int cont = 0 , dots = 0 ;
@@ -299,11 +316,13 @@ private boolean isNumber(String lexeme) {
299316 *
300317 * @param lexeme El lexema a verificar
301318 * @return 'True' si el lexema actual es una cadena de caracteres, 'False'
302- * si no lo es.
319+ * si no lo es.
303320 */
304321 private boolean isString (String lexeme ) {
305322 char [] aux = lexeme .toCharArray ();
306- tokenType = (aux [0 ] == '"' && aux [aux .length - 1 ] == '"' ) || (aux [0 ] == '\'' && aux [aux .length - 1 ] == '\'' ) ? TokenType .CADENA : TokenType .DESCONOCIDO ;
323+ tokenType = (aux [0 ] == '"' && aux [aux .length - 1 ] == '"' ) || (aux [0 ] == '\'' && aux [aux .length - 1 ] == '\'' )
324+ ? TokenType .CADENA
325+ : TokenType .DESCONOCIDO ;
307326 return (aux [0 ] == '"' && aux [aux .length - 1 ] == '"' ) || (aux [0 ] == '\'' && aux [aux .length - 1 ] == '\'' );
308327 }
309328
0 commit comments