Sei sulla pagina 1di 11

TEMA: CURSO:

Elaboracin de un Compilador (Informe II) TEORIA DE COMPILADORES

PROFESOR: LIC. CALDERON PINEDO

INTEGRANTES:
-LUIS F. BARBA SOSA -ARELLANO SIANCAS GIAN M

CICLO:

VII Ciclo

ESCUELA:

Ingeniera Informtica

Archivo Main.java package Traductor.Analisis.lexico; import java.io.File; public class Main { public static void main(String[] args) { String path = "H:/Traductor Areas/src/Traductor/Analisis/lexico/Lexer.flex"; // Direccion Del archivo Flex generarLexer(path); Interfaz gui=new Interfaz(); // interfaz USUARIO } public static void generarLexer(String path){ File file=new File(path); JFlex.Main.generate(file); } } Archivo Token.java package Traductor.Analisis.lexico; public enum Token { ASSIGN,SUMA,MULT,RESTA,DIV,STRING,INT,AREA,IDEN,DOUBLE,ERROR; // TOKENS } Archivo Lexer.flex package Traductor.Analisis.lexico; import static Traductor.Analisis.lexico.Token.*; %% // Zona de Reglas o expreciones regulares %class Lexer %type Token %line // para llevar el numero de lnea en donde se esta ejecutando %column Comentario ="/"[*] [^*]+ [*]"/" | "/"[*] [*]+ "/" // Caracteres de comentarios Comentario2 =[/][/] ([^\r\n])* \r|\n // retornos de carro, tabuladores se omitiran Espacio =[ ] // espacios en blanco tstring =[\"] [^\"\n]+ [\"\n] decimal =[0-9]+ "."? [0-9]* // patrn de nmeros decimales entero =[0-9]* // patrn de nmeros enteros

letra =[a-zA-Z]+ // patrn de letras iden ={letra}({letra}|"_")* area ="area""="({entero}|{decimal})("+"|"-"|"/"|"*")({entero}|{decimal}) %{ public String lexeme; public int linea; public int colum; %} %% {Comentario} {/*Ignore*/} // Accion de en caso obtener un lexeme que sea character de usuario {Comentario2} {/*Ignore*/} {Espacio} {/*Ignore*/} //Accion en caso se reconosca un espacio en blanco "=" {return ASSIGN;} // Accion en caso de reconosca el signo = "+" {return SUMA;} "*" {return MULT;} "-" {return RESTA;} "/" {return DIV;} {area} {return AREA;} {entero} {lexeme=yytext(); return INT;} {decimal} {lexeme=yytext(); return DOUBLE;} {iden} {lexeme=yytext(); return IDEN;} . {linea=1+yyline; colum=1+yycolumn; return ERROR;} Archivo Interfaz.java package Traductor.Analisis.lexico; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.io.PrintWriter; import java.io.Reader; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.*; public class Interfaz extends JFrame implements ActionListener{ JLabel lblexpresion; JTextArea txtdescripcion,txtexpresion; JButton btnanalizar,btnnuevo;

JPanel panel; JScrollPane scrollPane,scrollPane2; public Interfaz(){ Gui(); } public void Gui(){ lblexpresion=new JLabel("INGRESE EXPRESION"); txtexpresion=new JTextArea(5,20); txtdescripcion=new JTextArea(10,20); txtdescripcion.setEditable(false); btnanalizar=new JButton("ANALIZAR"); btnnuevo=new JButton("NUEVO"); panel=new JPanel(); btnanalizar.addActionListener(this); btnnuevo.addActionListener(this); panel.add(lblexpresion); panel.add(txtexpresion); panel.add(txtdescripcion); scrollPane = new JScrollPane(txtexpresion); scrollPane2 = new JScrollPane(txtdescripcion); panel.add(scrollPane, BorderLayout.CENTER); panel.add(scrollPane2, BorderLayout.CENTER); panel.add(btnanalizar); panel.add(btnnuevo); panel.setLayout(new FlowLayout()); this.add(panel); this.setLayout(new GridLayout()); this.setSize(330,600); this.setVisible(true); this.setDefaultCloseOperation(3); } public void probarLexerFile()throws IOException{ File fichero = new File ("fichero.txt"); PrintWriter writer; try { writer = new PrintWriter(fichero); writer.print(txtexpresion.getText()); writer.close(); } catch (FileNotFoundException ex) { Logger.getLogger(Interfaz.class.getName()).log(Level.SEVERE, null, ex); } Reader reader = new BufferedReader(new FileReader("fichero.txt")); Lexer lexer = new Lexer (reader); String resultado=""; while (true){ Token token =lexer.yylex(); int nroLinea;

if (token == null){ resultado=resultado+ "EOF"+"\n"; txtdescripcion.setText(resultado); return; } switch (token){ case SUMA: resultado=resultado+ "TOKEN: " +token+ "\n"; break; case RESTA: resultado=resultado+ "TOKEN: " +token+ "\n"; break; case MULT: resultado=resultado+ "TOKEN: " +token+ "\n"; break; case DIV: resultado=resultado+ "TOKEN: " +token+ "\n"; break; case ASSIGN: resultado=resultado+ "TOKEN: " +token+ "\n"; break; case IDEN: resultado=resultado+ "TOKEN: " +token+ " "+lexer.lexeme+ "\n"; break; case INT: resultado=resultado+ "TOKEN: " +token+ " "+lexer.lexeme+ "\n"; break; case DOUBLE: resultado=resultado+ "TOKEN: " +token+ " "+lexer.lexeme+ "\n"; break; case STRING: resultado=resultado+ "TOKEN: " +token+ " "+lexer.lexeme+ "\n"; break; case AREA: resultado=resultado+ "TOKEN: " +token+"\n"; break; case ERROR: resultado=resultado+ " ERROR en Linea: "+lexer.linea+", Caracter: "+lexer.colum+" !"+"\n"; break; default: resultado=resultado+ "TOKEN: " +token+ "\n"; } } } public void actionPerformed(ActionEvent e){ Object boton=e.getSource();

if(boton.equals(btnanalizar)) { try { probarLexerFile(); } catch (IOException ex) { System.out.println(ex.getMessage()); } } else if (boton.equals(btnnuevo)) { txtexpresion.setText(""); txtdescripcion.setText(""); } } }

Potrebbero piacerti anche