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
00493 super.init();
00494 this.initialize();
00495 }
00496 }
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 }