InterpretadorPLP.java

Go to the documentation of this file.
00001 package plp;
00002 
00003 import java.awt.Dimension;
00004 import java.awt.Toolkit;
00005 import java.awt.event.KeyEvent;
00006 import java.awt.event.KeyListener;
00007 import java.io.ByteArrayInputStream;
00008 import java.io.InputStream;
00009 import java.util.LinkedList;
00010 import java.util.List;
00011 import java.util.StringTokenizer;
00012 
00013 import javax.swing.JButton;
00014 import javax.swing.JComboBox;
00015 import javax.swing.JFrame;
00016 import javax.swing.JLabel;
00017 import javax.swing.JPanel;
00018 import javax.swing.JScrollPane;
00019 import javax.swing.JTextArea;
00020 import javax.swing.JTextField;
00021 
00022 import plp.expressions1.parser.Exp1Parser;
00023 import plp.expressions1.parser.ParseException;
00024 import plp.expressions2.expression.ValorBooleano;
00025 import plp.expressions2.expression.ValorInteiro;
00026 import plp.expressions2.expression.ValorString;
00027 import plp.expressions2.parser.Exp2Parser;
00028 import plp.functional1.parser.Func1Parser;
00029 import plp.functional2.parser.Func2Parser;
00030 import plp.imperative1.memory.ContextoCompilacaoImperativa;
00031 import plp.imperative1.memory.ContextoExecucaoImperativa;
00032 import plp.imperative1.memory.ListaValor;
00033 import plp.imperative1.parser.Imp1Parser;
00034 import plp.imperative2.memory.ContextoCompilacaoImperativa2;
00035 import plp.imperative2.memory.ContextoExecucaoImperativa2;
00036 import plp.imperative2.parser.Imp2Parser;
00037 import plp.orientadaObjetos1.memoria.ContextoCompilacao;
00038 import plp.orientadaObjetos1.memoria.ContextoExecucao;
00039 import plp.orientadaObjetos1.parser.OO1Parser;
00040 
00041 public class InterpretadorPLP extends JFrame {
00042 
00043     private JPanel jContentPane = null;
00044     private JTextArea jTextAreaCodigo = null;
00045     private JScrollPane jScrollPaneMensagens = null;
00046     private JTextArea jTextAreaMensagens = null;
00047     private JLabel jLabelCodigo = null;
00048     private JLabel jLabelMasg = null;
00049     private JScrollPane jScrollPaneCodigo = null;
00050     private JComboBox jComboBoxLinguagens = null;
00051     private JLabel jLabelExecutar = null;
00052 
00053     private Exp1Parser exp1Parser = null;
00054     private Exp2Parser exp2Parser = null;
00055     private Func1Parser func1Parser = null;
00056     private Func2Parser func2Parser = null;
00057     private Imp1Parser imp1Parser = null;
00058     private Imp2Parser imp2Parser = null;
00059     private OO1Parser oo1Parser = null;
00060 
00061     private InterpreterKeyListener listener;
00062     private JButton jButtonExecutar = null;
00063     private JTextField jTextFieldListaEntrada = null;
00064     private JLabel jLabelListaEntrada = null;
00065 
00069     public InterpretadorPLP() {
00070         super();
00071         initialize();
00072     }
00073 
00079     private void initialize() {
00080         this.setContentPane(getJContentPane());
00081         this.setTitle("Interpretador PLP V 0.3");
00082         this.setResizable(false);
00083         this.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
00084         this.listener = new InterpreterKeyListener(this);
00085         this.addKeyListener(this.listener);
00086         this.jTextAreaCodigo.addKeyListener(this.listener);
00087         this.jTextAreaMensagens.addKeyListener(this.listener);
00088         this.jTextFieldListaEntrada.addKeyListener(this.listener);
00089         this.jTextFieldListaEntrada.setEnabled(false);
00090 
00091         Dimension d;
00092         int w, h;
00093 
00094         w = 390;
00095         h = 480;
00096 
00097         d = Toolkit.getDefaultToolkit().getScreenSize();
00098         d.height /= 2;
00099         d.width /= 2;
00100         d.height -= (h / 2 + 15);
00101         d.width -= (w / 2);
00102 
00103         this.setBounds(d.width, d.height, w, h);
00104 
00105     }
00106 
00112     private JPanel getJContentPane() {
00113         if (jContentPane == null) {
00114             jLabelListaEntrada = new JLabel();
00115             jLabelListaEntrada.setBounds(new java.awt.Rectangle(20, 194, 127,
00116                     20));
00117             jLabelListaEntrada
00118                     .setToolTipText("informe os valores da lista de entrada separados por espaços");
00119             jLabelListaEntrada.setText("Lista de Entrada");
00120             jLabelExecutar = new JLabel();
00121             jLabelExecutar.setBounds(new java.awt.Rectangle(19, 434, 157, 17));
00122             jLabelExecutar.setText("Pressione F1 para executar");
00123             jLabelMasg = new JLabel();
00124             jLabelMasg.setBounds(new java.awt.Rectangle(20, 245, 80, 16));
00125             jLabelMasg.setText("Mensagens");
00126             jLabelCodigo = new JLabel();
00127             jLabelCodigo.setBounds(new java.awt.Rectangle(20, 33, 70, 16));
00128             jLabelCodigo.setText("Código");
00129             jContentPane = new JPanel();
00130             jContentPane.setLayout(null);
00131             jContentPane.add(getJScrollPaneMensagens(), null);
00132             jContentPane.add(jLabelCodigo, null);
00133             jContentPane.add(jLabelMasg, null);
00134             jContentPane.add(getJScrollPaneCodigo(), null);
00135             jContentPane.add(getJTextFieldListaEntrada(), null);
00136             jContentPane.add(getJComboBoxLinguagens(), null);
00137             jContentPane.add(jLabelExecutar, null);
00138             jContentPane.add(getJButton(), null);
00139             jContentPane.add(jLabelListaEntrada, null);
00140         }
00141         return jContentPane;
00142     }
00143 
00149     private JTextArea getJTextAreaCodigo() {
00150         if (jTextAreaCodigo == null) {
00151             jTextAreaCodigo = new JTextArea();
00152         }
00153         return jTextAreaCodigo;
00154     }
00155 
00161     private JScrollPane getJScrollPaneMensagens() {
00162         if (jScrollPaneMensagens == null) {
00163             jScrollPaneMensagens = new JScrollPane();
00164             jScrollPaneMensagens.setBounds(new java.awt.Rectangle(20, 267, 350,
00165                     160));
00166             jScrollPaneMensagens.setViewportView(getJTextAreaMensagens());
00167         }
00168         return jScrollPaneMensagens;
00169     }
00170 
00176     private JTextArea getJTextAreaMensagens() {
00177         if (jTextAreaMensagens == null) {
00178             jTextAreaMensagens = new JTextArea();
00179         }
00180         return jTextAreaMensagens;
00181     }
00182 
00188     private JScrollPane getJScrollPaneCodigo() {
00189         if (jScrollPaneCodigo == null) {
00190             jScrollPaneCodigo = new JScrollPane();
00191             jScrollPaneCodigo
00192                     .setBounds(new java.awt.Rectangle(20, 52, 350, 134));
00193             jScrollPaneCodigo.setViewportView(getJTextAreaCodigo());
00194         }
00195         return jScrollPaneCodigo;
00196     }
00197 
00203     private JComboBox getJComboBoxLinguagens() {
00204         if (jComboBoxLinguagens == null) {
00205             jComboBoxLinguagens = new JComboBox();
00206             jComboBoxLinguagens
00207                     .setBounds(new java.awt.Rectangle(19, 7, 250, 20));
00208             jComboBoxLinguagens
00209                     .addActionListener(new java.awt.event.ActionListener() {
00210                         public void actionPerformed(java.awt.event.ActionEvent e) {
00211                             switch (jComboBoxLinguagens.getSelectedIndex()) {
00212                                 case 0:
00213                                 case 1:
00214                                 case 2:
00215                                 case 3:
00216                                     jTextFieldListaEntrada.setEnabled(false);
00217                                     break;
00218                                 default:
00219                                     jTextFieldListaEntrada.setEnabled(true);
00220                                     break;
00221                             }
00222                         }
00223                     });
00224             jComboBoxLinguagens.addItem("Expressoes 1");
00225             jComboBoxLinguagens.addItem("Expressoes 2");
00226             jComboBoxLinguagens.addItem("Funcional 1");
00227             jComboBoxLinguagens.addItem("Funcional 2");
00228             jComboBoxLinguagens.addItem("Imperativa 1");
00229             jComboBoxLinguagens.addItem("Imperativa 2");
00230             jComboBoxLinguagens.addItem("Orientada a Objetos 1");
00231 
00232         }
00233         return jComboBoxLinguagens;
00234     }
00235 
00241     private JButton getJButton() {
00242         if (jButtonExecutar == null) {
00243             jButtonExecutar = new JButton();
00244             jButtonExecutar.setBounds(new java.awt.Rectangle(283, 8, 86, 19));
00245             jButtonExecutar.setText("executar");
00246             jButtonExecutar
00247                     .addActionListener(new java.awt.event.ActionListener() {
00248                         public void actionPerformed(java.awt.event.ActionEvent e) {
00249                             interpretarCodigo();
00250                         }
00251                     });
00252         }
00253         return jButtonExecutar;
00254     }
00255 
00261     private JTextField getJTextFieldListaEntrada() {
00262         if (jTextFieldListaEntrada == null) {
00263             jTextFieldListaEntrada = new JTextField();
00264             jTextFieldListaEntrada.setBounds(new java.awt.Rectangle(20, 218,
00265                     350, 20));
00266             jTextFieldListaEntrada
00267                     .setToolTipText("informe os valores da lista de entrada separados por espaços");
00268         }
00269         return jTextFieldListaEntrada;
00270     }
00271 
00272     public static void main(String[] args) {
00273         (new InterpretadorPLP()).setVisible(true);
00274     }
00275 
00276     public void interpretarCodigo() {
00277         try {
00278             ByteArrayInputStream fis = new ByteArrayInputStream(jTextAreaCodigo
00279                     .getText().getBytes());
00280 
00281             switch (this.jComboBoxLinguagens.getSelectedIndex()) {
00282                 case 0:
00283                     interpretarExp1(fis);
00284                     break;
00285                 case 1:
00286                     interpretarExp2(fis);
00287                     break;
00288                 case 2:
00289                     interpretarFunc1(fis);
00290                     break;
00291                 case 3:
00292                     interpretarFunc2(fis);
00293                     break;
00294                 case 4:
00295                     interpretarImp1(fis);
00296                     break;
00297                 case 5:
00298                     interpretarImp2(fis);
00299                     break;
00300                 case 6:
00301                     interpretarOO1(fis);
00302                     break;
00303             }
00304         } catch (Exception e1) {
00305             jTextAreaMensagens.setText(e1.getMessage());
00306             e1.printStackTrace();
00307         } catch (Throwable t) {
00308             jTextAreaMensagens.setText(t.getMessage());
00309         }
00310 
00311     }
00312 
00313     private void interpretarExp1(InputStream fis) throws ParseException {
00314         plp.expressions1.Programa prog;
00315         if (exp1Parser == null) {
00316             exp1Parser = new Exp1Parser(fis);
00317         } else {
00318             Exp1Parser.ReInit(fis);
00319         }
00320         prog = Exp1Parser.Input();
00321         jTextAreaMensagens.setText("sintaxe verificada com sucesso!\n");
00322         if (prog.checaTipo()) {
00323             jTextAreaMensagens.append("resultado = "
00324                     + prog.executar().toString());
00325         } else {
00326             jTextAreaMensagens.append("erro de tipos!");
00327         }
00328     }
00329 
00330     private void interpretarExp2(InputStream fis) throws Exception {
00331         plp.expressions2.Programa prog;
00332         if (exp2Parser == null) {
00333             exp2Parser = new Exp2Parser(fis);
00334         } else {
00335             Exp2Parser.ReInit(fis);
00336         }
00337         prog = Exp2Parser.Input();
00338 
00339         jTextAreaMensagens.setText("sintaxe verificada com sucesso!\n");
00340         if (prog.checaTipo()) {
00341             jTextAreaMensagens.append("resultado = "
00342                     + prog.executar().toString());
00343         } else {
00344             jTextAreaMensagens.append("erro de tipos!");
00345         }
00346     }
00347 
00348     private void interpretarFunc1(InputStream fis) throws Exception {
00349         plp.functional1.Programa prog;
00350         if (func1Parser == null) {
00351             func1Parser = new Func1Parser(fis);
00352         } else {
00353             Func1Parser.ReInit(fis);
00354         }
00355         prog = Func1Parser.Input();
00356 
00357         jTextAreaMensagens.setText("sintaxe verificada com sucesso!\n");
00358         if (prog.checaTipo()) {
00359             jTextAreaMensagens.append("resultado = "
00360                     + prog.executar().toString());
00361         } else {
00362             jTextAreaMensagens.append("erro de tipos!");
00363         }
00364     }
00365 
00366     private void interpretarFunc2(InputStream fis) throws Exception {
00367         plp.functional2.Programa prog;
00368         if (func2Parser == null) {
00369             func2Parser = new Func2Parser(fis);
00370         } else {
00371             Func2Parser.ReInit(fis);
00372         }
00373 
00374         prog = Func2Parser.Input();
00375 
00376         jTextAreaMensagens.setText("sintaxe verificada com sucesso!\n");
00377         jTextAreaMensagens.append("resultado = " + prog.executar().toString());
00378     }
00379 
00380     private void interpretarImp1(InputStream fis) throws Exception {
00381         plp.imperative1.Programa prog;
00382         if (imp1Parser == null) {
00383             imp1Parser = new Imp1Parser(fis);
00384         } else {
00385             Imp1Parser.ReInit(fis);
00386         }
00387         prog = Imp1Parser.Input();
00388 
00389         jTextAreaMensagens.setText("sintaxe verificada com sucesso!\n");
00390         ListaValor entrada = obterListaEntrada(this.jTextFieldListaEntrada
00391                 .getText());
00392         if (prog.checaTipo(new ContextoCompilacaoImperativa(entrada))) {
00393             jTextAreaMensagens.append("resultado = "
00394                     + prog.executar(new ContextoExecucaoImperativa(entrada))
00395                             .toString());
00396         } else {
00397             jTextAreaMensagens.append("erro de tipos!");
00398         }
00399     }
00400 
00401     private void interpretarImp2(InputStream fis) throws Exception {
00402         plp.imperative2.Programa prog;
00403         if (imp2Parser == null) {
00404             imp2Parser = new Imp2Parser(fis);
00405         } else {
00406             Imp2Parser.ReInit(fis);
00407         }
00408 
00409         prog = Imp2Parser.Input();
00410 
00411         jTextAreaMensagens.setText("sintaxe verificada com sucesso!\n");
00412         ListaValor entrada = obterListaEntrada(this.jTextFieldListaEntrada
00413                 .getText());
00414         if (prog.checaTipo(new ContextoCompilacaoImperativa2(entrada))) {
00415             jTextAreaMensagens.append("resultado = "
00416                     + prog.executar(new ContextoExecucaoImperativa2(entrada))
00417                             .toString());
00418         } else {
00419             jTextAreaMensagens.append("erro de tipos!");
00420         }
00421     }
00422 
00423     private void interpretarOO1(InputStream fis) throws Exception {
00424         plp.orientadaObjetos1.Programa prog;
00425         if (oo1Parser == null) {
00426             this.oo1Parser = new OO1Parser(fis);
00427         } else {
00428             oo1Parser.ReInit(fis);
00429         }
00430         prog = oo1Parser.processaEntrada();
00431 
00432         jTextAreaMensagens.setText("sintaxe verificada com sucesso!\n");
00433         plp.orientadaObjetos1.memoria.colecao.ListaValor entrada = obterListaEntrada2(this.jTextFieldListaEntrada
00434                 .getText());
00435         if (prog
00436                 .checaTipo(new plp.orientadaObjetos1.memoria.ContextoCompilacao(entrada))) {
00437             jTextAreaMensagens.append("resultado = "
00438                     + prog.executar(new plp.orientadaObjetos1.memoria.ContextoExecucao(entrada)).toString());
00439         } else {
00440             jTextAreaMensagens.append("erro de tipos!");
00441         }
00442     }
00443 
00444     private plp.orientadaObjetos1.memoria.colecao.ListaValor obterListaEntrada2(String texto) {
00445         List valores = new LinkedList();
00446         plp.orientadaObjetos1.memoria.colecao.ListaValor entrada = new plp.orientadaObjetos1.memoria.colecao.ListaValor();
00447         StringTokenizer parser = new StringTokenizer(texto);
00448 
00449         while (parser.hasMoreTokens()) {
00450             String parametro = parser.nextToken();
00451 
00452             try {
00453                 Integer inteiro = Integer.valueOf(parametro);
00454                 valores.add(new plp.orientadaObjetos1.expressao.valor.ValorInteiro(inteiro.intValue()));
00455                 continue;
00456             } catch (NumberFormatException e) {
00457 
00458             }
00459 
00460             if (parametro.equalsIgnoreCase("true")
00461                     || parametro.equalsIgnoreCase("false")) {
00462                 Boolean booleano = Boolean.valueOf(parametro);
00463                 valores.add(new plp.orientadaObjetos1.expressao.valor.ValorBooleano(booleano.booleanValue()));
00464             } else {
00465                 valores.add(new plp.orientadaObjetos1.expressao.valor.ValorString(parametro));
00466             }
00467         }
00468         entrada = OO1Parser.criaListaValor(valores);
00469         return entrada;
00470     }
00471 
00472     private ListaValor obterListaEntrada(String texto) {
00473         List valores = new LinkedList();
00474         ListaValor entrada = new ListaValor();
00475         StringTokenizer parser = new StringTokenizer(texto);
00476 
00477         while (parser.hasMoreTokens()) {
00478             String parametro = parser.nextToken();
00479 
00480             try {
00481                 Integer inteiro = Integer.valueOf(parametro);
00482                 valores.add(new ValorInteiro(inteiro.intValue()));
00483                 continue;
00484             } catch (NumberFormatException e) {
00485 
00486             }
00487 
00488             if (parametro.equalsIgnoreCase("true")
00489                     || parametro.equalsIgnoreCase("false")) {
00490                 Boolean booleano = Boolean.valueOf(parametro);
00491                 valores.add(new ValorBooleano(booleano.booleanValue()));
00492             } else {
00493                 valores.add(new ValorString(parametro));
00494             }
00495         }
00496         entrada = Imp1Parser.criaListaValor(valores);
00497         return entrada;
00498     }
00499 } // @jve:decl-index=0:visual-constraint="10,10"
00500 
00501 class InterpreterKeyListener implements KeyListener {
00502 
00503     InterpretadorPLP frame;
00504 
00505     public InterpreterKeyListener(InterpretadorPLP frm) {
00506         super();
00507         this.frame = frm;
00508     }
00509 
00510     public void keyPressed(java.awt.event.KeyEvent e) {
00511         if (e.getKeyCode() == KeyEvent.VK_F1) {
00512             this.frame.interpretarCodigo();
00513         }
00514     }
00515 
00516     public void keyReleased(KeyEvent arg0) {
00517     }
00518 
00519     public void keyTyped(KeyEvent arg0) {
00520     }
00521 }

Generated on Tue Sep 12 21:52:07 2006 for PLP by  doxygen 1.4.7