Main Page | Packages | Class Hierarchy | Class List | Directories | File List | Class Members | Related Pages

ServletOrientadaObjetos1.java

Go to the documentation of this file.
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             // tratamos os parametros para não dar NullPointerException
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 }

Generated on Mon Aug 8 20:20:48 2005 for Linguagem OO1 - Generics by  doxygen 1.4.4