00001 import java.io.ByteArrayInputStream;
00002 import java.io.PrintWriter;
00003 import java.util.Stack;
00004 import java.util.StringTokenizer;
00005
00006 import javax.servlet.ServletException;
00007 import javax.servlet.http.HttpServlet;
00008 import javax.servlet.http.HttpServletRequest;
00009 import javax.servlet.http.HttpServletResponse;
00010
00011 import plp.orientadaObjetos1.Programa;
00012 import plp.orientadaObjetos1.excecao.declaracao.VariavelJaDeclaradaException;
00013 import plp.orientadaObjetos1.excecao.declaracao.VariavelNaoDeclaradaException;
00014 import plp.orientadaObjetos1.excecao.execucao.EntradaInvalidaException;
00015 import plp.orientadaObjetos1.expressao.valor.Valor;
00016 import plp.orientadaObjetos1.expressao.valor.ValorBooleano;
00017 import plp.orientadaObjetos1.expressao.valor.ValorInteiro;
00018 import plp.orientadaObjetos1.expressao.valor.ValorString;
00019 import plp.orientadaObjetos1.memoria.ContextoCompilacao;
00020 import plp.orientadaObjetos1.memoria.ContextoExecucao;
00021 import plp.orientadaObjetos1.memoria.colecao.ListaValor;
00022 import plp.orientadaObjetos1.parser.OO1Parser;
00023 import plp.orientadaObjetos1.parser.ParseException;
00024
00025
00026 public class ServletOrientadaObjetos1 extends HttpServlet {
00027 private static final String TAGS_DO_INICIO = "<p><hr><br>";
00028 private static final String TAGS_DO_CORPO = "<br><br><strong><pre>";
00029 private static final String TAGS_DO_FIM = "</pre></strong><b>";
00030 private static final String HR = "<hr>";
00031 private static final String file = ServletPLP.mainPath + "index";
00032
00033 public void doPost(HttpServletRequest request, HttpServletResponse response)
00034 throws ServletException, java.io.IOException {
00035 PrintWriter out;
00036 String prog = "", valores = "";
00037 StringBuffer resposta = new StringBuffer();
00038 response.setContentType("text/html");
00039 out = response.getWriter();
00040 try {
00041 prog = request.getParameter("programa");
00042 valores = request.getParameter("valores");
00043
00044 prog = trataParametro(prog);
00045 valores = trataParametro(valores);
00046 ListaValor listaValor = ServletOrientadaObjetos1.getListaValor(valores);
00047 resposta.append(Library.getFile(file+"1.html"));
00048 ListaValor saida = null;
00049 OO1Parser parser = new OO1Parser(new ByteArrayInputStream(prog.getBytes()));
00050 Programa programa = parser.processaEntrada();
00051 if(programa.checaTipo(new ContextoCompilacao(listaValor))) {
00052 saida = programa.executar(new ContextoExecucao(listaValor));
00053 resposta.append(getMensagem("O resultado da execução do programa",
00054 prog,"= "+saida));
00055 }
00056 else {
00057 resposta.append(getMensagem("Erro de tipo no programa",prog,getValores(valores)));
00058 }
00059 }
00060 catch(EntradaInvalidaException entradaInvalida){
00061 resposta.append(getMensagem("Entrada Inválida. "+entradaInvalida.getMessage(),
00062 prog, getValores(valores)));
00063 }
00064 catch (ParseException parserException) {
00065 resposta.append(getMensagem("Erro durante a execução do parser no programa",
00066 prog, parserException.getMessage()+HR));
00067 }
00068 catch (VariavelJaDeclaradaException exception) {
00069 resposta.append(getMensagem("Erro durante a compilação do programa",
00070 prog, exception.getMessage()+HR));
00071 }
00072 catch (VariavelNaoDeclaradaException exception) {
00073 resposta.append(getMensagem("Erro durante a compilação do programa",
00074 prog, exception.getMessage()+HR));
00075 }
00076 catch (Exception exception) {
00077 resposta = new StringBuffer();
00078 resposta.append(exception.getMessage());
00079 }
00080 finally {
00081 resposta.append(Library.getFile(file+"2.html"));
00082 resposta.append("<script language=\"javascript\"> \n <!-- \n");
00083 resposta.append("var f = document.formDados; \n ");
00084 resposta.append("document.formDados.linguagens.options["+ServletPLP.OrientadaAObjetos1+"].selected=true; \n");
00085 resposta.append("//--> \n </script>");
00086 out.println(resposta.toString());
00087 out.close();
00088 }
00089 }
00090
00098 private String getMensagem(String msgInicial,String msgCorpo,String msgFim){
00099 return TAGS_DO_INICIO + msgInicial + TAGS_DO_CORPO + msgCorpo + TAGS_DO_FIM + msgFim;
00100 }
00101
00107 private static String getValores(String valores) {
00108 return "Os valores de entrada foram: (" + valores + ")<hr>";
00109 }
00110
00116 private static ListaValor getListaValor(String entrada) {
00117 ListaValor lista = new ListaValor();
00118 try {
00119 Stack pilha = new Stack();
00120 StringTokenizer st = new StringTokenizer(entrada, ";");
00121 String aux = null;
00122 while (st.hasMoreTokens()) {
00123 Valor valor = ServletOrientadaObjetos1.getValor(st.nextToken());
00124 pilha.push(valor);
00125 }
00126 while (!pilha.empty()) {
00127 Valor valor = (Valor)pilha.pop();
00128 if(lista == null) {
00129 lista = new ListaValor(valor);
00130 }
00131 else {
00132 lista = new ListaValor(valor, lista);
00133 }
00134 }
00135 }
00136 catch(Exception e) {}
00137 return lista;
00138 }
00139
00146 private static Valor getValor(String token) {
00147 Valor valor = null;
00148 try {
00149 valor = new ValorInteiro(Integer.parseInt(token));
00150 }
00151 catch(NumberFormatException e1) {
00152 if(token.equals("true")) {
00153 valor = new ValorBooleano(true);
00154 }
00155 else if(token.equals("false")) {
00156 valor = new ValorBooleano(false);
00157 }
00158 else {
00159 valor = new ValorString(token);
00160 }
00161 }
00162 return valor;
00163 }
00164
00170 private String trataParametro(String param){
00171 if(param == null)
00172 return "";
00173 else
00174 return param.trim();
00175 }
00176 }