AppletInterpretadorPLP.java

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

Generated on Tue Sep 12 21:51:57 2006 for PLP by  doxygen 1.4.7