Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.FileReader;
- import java.io.IOException;
- public class Main {
- private static int currentOutputLine = 0;
- public static void main(String[] args) {
- if (args.length == 0) {
- testFile("input.txt");
- testFile("input_error.txt");
- System.out.println("\nUso: java Main <archivo>");
- } else {
- for (String filename : args) {
- testFile(filename);
- }
- }
- }
- private static void testFile(String filename) {
- try {
- Lexer lexer = new Lexer(new FileReader(filename));
- System.out.println("\n=== Análisis: " + filename + " ===");
- currentOutputLine = 0; // Reset para cada archivo
- // --- Análisis Léxico y Sintáctico ---
- // Crear el parser y ejecutarlo
- Parser parser = new Parser(lexer);
- parser.parse(); // ¡Aquí se realiza el análisis sintáctico!
- Integer token;
- while ((token = lexer.yylex()) != null) {
- printTokenInfo(lexer, token);
- }
- printFooter(filename);
- } catch (IOException e) {
- System.err.println("Error leyendo archivo: " + e.getMessage());
- } catch (Exception e) {
- System.err.println("Error: " + e.getMessage());
- }
- }
- private static void printTokenInfo(Lexer lexer, int token) {
- // Manejo de cambio de línea
- if (lexer.currentLine != currentOutputLine) {
- System.out.printf("\nLINEA %-3d\t\tSIMBOLO\n", lexer.currentLine);
- currentOutputLine = lexer.currentLine;
- }
- String lexema = lexer.yytext();
- String output;
- if (token == sym.IDENTIFICADOR) {
- int id = lexer.getIdentificadorId(lexema);
- output = String.format("%s : es un identificador - Valor atrib: %d", lexema, id);
- } else if (token == sym.ENTERO || token == sym.DECIMAL) {
- output = String.format("%s : es un Numero", lexema);
- } else if (token == sym.STRING) {
- output = String.format("%s : es un texto", lexema);
- } else {
- String tokenDisplayName = getDisplayName(token, lexema);
- if (tokenDisplayName != null) {
- output = String.format("%s - Token: %s", lexema, tokenDisplayName);
- } else {
- output = String.format("%s: Símbolo no definido", lexema);
- }
- }
- System.out.printf("%-20s | %s%n",
- "Línea " + lexer.currentLine + " Col " + lexer.currentColumn,
- output);
- }
- // Actualiza esta función para reflejar los nuevos tokens y nombres de Sym.java y LexerGenerator-2.flex
- private static String getDisplayName(int token, String lexeme) {
- switch (token) {
- case sym.RESPUESTA_CONTRARIA: return "RESPUESTA_CONTRARIA";
- case sym.SWITCH: return "SWITCH";
- case sym.BUCLE_FOR: return "BUCLE_FOR";
- case sym.BUCLE_WHILE: return "BUCLE_WHILE";
- case sym.BUCLE_DO: return "BUCLE_DO";
- case sym.BUCLE_FOREACH: return "BUCLE_FOREACH";
- case sym.PARENTESIS_IZQ:
- case sym.LLAVE_IZQ:
- case sym.CORCHETE_IZQ: return "APERTURA";
- case sym.PARENTESIS_DER:
- case sym.LLAVE_DER:
- case sym.CORCHETE_DER: return "CIERRE";
- case sym.OPERADOR_COMPARACION: return "OPERADOR_COMPARACION";
- case sym.OPERADOR_LOGICO:
- return lexeme.equals("!") ? "OPERADOR_LOGICO" : "OPERADORES_LOGICOS";
- case sym.SUMA: return "SUMA";
- case sym.RESTA: return "RESTA";
- case sym.MULTIPLICACION: return "MULTIPLICACION";
- case sym.DIVISION: return "DIVISION";
- case sym.MODULO: return "MODULO";
- case sym.INCREMENTO: return "INCREMENTO";
- case sym.DECREMENTO: return "DECREMENTO";
- case sym.CLASS: return "CLASS";
- case sym.HERENCIA: return "HERENCIA";
- case sym.INTERFAZ: return "INTERFAZ";
- case sym.LITERAL: return "LITERAL";
- case sym.SQL: return "SQL";
- case sym.TIPO_DATO:
- switch (lexeme) {
- case "int": return "TIPO_ENTERO";
- case "float": return "TIPO_DECIMAL";
- case "string": return "TIPO_TEXTO";
- case "bool": return "TIPO_BOOLEANO";
- // Agrega aquí nuevos tipos de datos si los agregaste en Sym.java y el lexer
- default: return "TIPO_DATO";
- }
- case sym.PUNTO_COMA: return "PUNTO_COMA";
- case sym.ASIGNACION: return "ASIGNACION";
- case sym.COMA: return "COMA";
- case sym.DOS_PUNTOS: return "DOS_PUNTOS";
- case sym.RETORNO: return "RETORNO";
- case sym.ERROR: return "ERROR";
- case sym.DO: return "BUCLE_DO";
- case sym.FOREACH: return "BUCLE_FOREACH";
- case sym.EXCEPCION: return "EXCEPCION";
- case sym.CREATE: return "CREATE";
- case sym.DATABASE: return "DATABASE";
- case sym.SET: return "SET";
- case sym.VALOR: return "VALOR";
- default: return null;
- }
- }
- private static void printFooter(String filename) {
- System.out.println("----------------------------------------");
- System.out.println("Archivo procesado: " + filename);
- System.out.println("----------------------------------------\n");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement