00001 package plp;
00002
00003 import java.io.ByteArrayInputStream;
00004 import java.io.InputStream;
00005 import java.util.LinkedList;
00006 import java.util.List;
00007 import java.util.StringTokenizer;
00008
00009 import javax.swing.JTextArea;
00010
00011 import plp.expressions1.parser.Exp1Parser;
00012 import plp.expressions1.parser.ParseException;
00013 import plp.expressions2.expression.ValorBooleano;
00014 import plp.expressions2.expression.ValorInteiro;
00015 import plp.expressions2.expression.ValorString;
00016 import plp.expressions2.parser.Exp2Parser;
00017 import plp.functional1.parser.Func1Parser;
00018 import plp.functional2.parser.Func2Parser;
00019 import plp.functional3.parser.Func3Parser;
00020
00021 public class MultiInterpretador {
00022
00023 private static final int EXP1 = 0;
00024
00025 private static final int EXP2 = 1;
00026
00027 private static final int FUNC1 = 2;
00028
00029 private static final int FUNC2 = 3;
00030
00031 private static final int FUNC3 = 4;
00032
00033 private static final int IMP1 = 5;
00034
00035 private static final int IMP2 = 6;
00036
00037 private static final int OO1 = 7;
00038
00039 private JTextArea messageBoard;
00040
00041 private Exp1Parser exp1Parser = null;
00042 private Exp2Parser exp2Parser = null;
00043 private Func1Parser func1Parser = null;
00044 private Func2Parser func2Parser = null;
00045 private Func3Parser func3Parser = null;
00046
00047 public MultiInterpretador(JTextArea textAreaMensagens) {
00048 super();
00049 messageBoard = textAreaMensagens;
00050 }
00051
00052 public void interpretarCodigo(String sourceCode, String listaEntrada,
00053 int selectedIndex) {
00054 try {
00055 ByteArrayInputStream fis = new ByteArrayInputStream(sourceCode
00056 .getBytes());
00057
00058 switch (selectedIndex) {
00059 case EXP1:
00060 interpretarExp1(fis);
00061 break;
00062 case EXP2:
00063 interpretarExp2(fis);
00064 break;
00065 case FUNC1:
00066 interpretarFunc1(fis);
00067 break;
00068 case FUNC2:
00069 interpretarFunc2(fis);
00070 break;
00071 case FUNC3:
00072 interpretarFunc3(fis);
00073 break;
00074 }
00075 } catch (Exception e1) {
00076 messageBoard.setText(e1.getMessage());
00077 e1.printStackTrace();
00078 } catch (Throwable t) {
00079 messageBoard.setText(t.getMessage());
00080 t.printStackTrace();
00081 }
00082
00083 }
00084
00085 private void interpretarExp1(InputStream fis) throws ParseException {
00086 plp.expressions1.Programa prog;
00087 if (exp1Parser == null) {
00088 exp1Parser = new Exp1Parser(fis);
00089 } else {
00090 Exp1Parser.ReInit(fis);
00091 }
00092 prog = Exp1Parser.Input();
00093 messageBoard.setText("sintaxe verificada com sucesso!\n");
00094 if (prog.checaTipo()) {
00095 messageBoard.append("resultado = " + prog.executar().toString());
00096 } else {
00097 messageBoard.append("erro de tipos!");
00098 }
00099 }
00100
00101 private void interpretarExp2(InputStream fis) throws Exception {
00102 plp.expressions2.Programa prog;
00103 if (exp2Parser == null) {
00104 exp2Parser = new Exp2Parser(fis);
00105 } else {
00106 Exp2Parser.ReInit(fis);
00107 }
00108 prog = Exp2Parser.Input();
00109
00110 messageBoard.setText("sintaxe verificada com sucesso!\n");
00111 if (prog.checaTipo()) {
00112 messageBoard.append("resultado = " + prog.executar().toString());
00113 } else {
00114 messageBoard.append("erro de tipos!");
00115 }
00116 }
00117
00118 private void interpretarFunc1(InputStream fis) throws Exception {
00119 plp.functional1.Programa prog;
00120 if (func1Parser == null) {
00121 func1Parser = new Func1Parser(fis);
00122 } else {
00123 Func1Parser.ReInit(fis);
00124 }
00125 prog = Func1Parser.Input();
00126
00127 messageBoard.setText("sintaxe verificada com sucesso!\n");
00128 if (prog.checaTipo()) {
00129 messageBoard.append("resultado = " + prog.executar().toString());
00130 } else {
00131 messageBoard.append("erro de tipos!");
00132 }
00133 }
00134
00135 private void interpretarFunc2(InputStream fis) throws Exception {
00136 plp.functional2.Programa prog;
00137 if (func2Parser == null) {
00138 func2Parser = new Func2Parser(fis);
00139 } else {
00140 Func2Parser.ReInit(fis);
00141 }
00142
00143 prog = Func2Parser.Input();
00144
00145 messageBoard.setText("sintaxe verificada com sucesso!\n");
00146 messageBoard.append("resultado = " + prog.executar().toString());
00147 }
00148
00149 private void interpretarFunc3(InputStream fis) throws Exception {
00150 plp.functional3.Programa prog;
00151 if (func3Parser == null) {
00152 func3Parser = new Func3Parser(fis);
00153 } else {
00154 Func3Parser.ReInit(fis);
00155 }
00156
00157 prog = Func3Parser.Input();
00158
00159 messageBoard.setText("sintaxe verificada com sucesso!\n");
00160 messageBoard.append("resultado = " + prog.executar().toString());
00161 }
00162
00163
00164
00165
00166
00167 }