Teste2LOO1.java

Go to the documentation of this file.
00001 package plp.orientadaObjetos1.testes;
00002 
00003 import plp.expressions2.memory.VariavelJaDeclaradaException;
00004 import plp.expressions2.memory.VariavelNaoDeclaradaException;
00005 import plp.orientadaObjetos1.Programa;
00006 import plp.orientadaObjetos1.comando.Atribuicao;
00007 import plp.orientadaObjetos1.comando.ChamadaMetodo;
00008 import plp.orientadaObjetos1.comando.ComDeclaracao;
00009 import plp.orientadaObjetos1.comando.Comando;
00010 import plp.orientadaObjetos1.comando.Sequencial;
00011 import plp.orientadaObjetos1.comando.Write;
00012 import plp.orientadaObjetos1.declaracao.classe.DecClasse;
00013 import plp.orientadaObjetos1.declaracao.classe.DecClasseSimples;
00014 import plp.orientadaObjetos1.declaracao.procedimento.DecProcedimento;
00015 import plp.orientadaObjetos1.declaracao.procedimento.DecProcedimentoComposta;
00016 import plp.orientadaObjetos1.declaracao.procedimento.DecProcedimentoSimples;
00017 import plp.orientadaObjetos1.declaracao.procedimento.ListaDeclaracaoParametro;
00018 import plp.orientadaObjetos1.declaracao.variavel.CompostaDecVariavel;
00019 import plp.orientadaObjetos1.declaracao.variavel.DecVariavel;
00020 import plp.orientadaObjetos1.declaracao.variavel.DecVariavelObjeto;
00021 import plp.orientadaObjetos1.declaracao.variavel.SimplesDecVariavel;
00022 import plp.orientadaObjetos1.excecao.declaracao.ClasseJaDeclaradaException;
00023 import plp.orientadaObjetos1.excecao.declaracao.ClasseNaoDeclaradaException;
00024 import plp.orientadaObjetos1.excecao.declaracao.ObjetoJaDeclaradoException;
00025 import plp.orientadaObjetos1.excecao.declaracao.ObjetoNaoDeclaradoException;
00026 import plp.orientadaObjetos1.excecao.declaracao.ProcedimentoJaDeclaradoException;
00027 import plp.orientadaObjetos1.excecao.declaracao.ProcedimentoNaoDeclaradoException;
00028 import plp.orientadaObjetos1.excecao.execucao.EntradaInvalidaException;
00029 import plp.orientadaObjetos1.excecao.execucao.EntradaNaoFornecidaException;
00030 import plp.orientadaObjetos1.expressao.Expressao;
00031 import plp.orientadaObjetos1.expressao.ListaExpressao;
00032 import plp.orientadaObjetos1.expressao.binaria.ExpSoma;
00033 import plp.orientadaObjetos1.expressao.leftExpression.AcessoAtributoId;
00034 import plp.orientadaObjetos1.expressao.leftExpression.Id;
00035 import plp.orientadaObjetos1.expressao.valor.Valor;
00036 import plp.orientadaObjetos1.expressao.valor.ValorInteiro;
00037 import plp.orientadaObjetos1.memoria.ContextoCompilacaoOO1;
00038 import plp.orientadaObjetos1.memoria.ContextoExecucaoOO1;
00039 import plp.orientadaObjetos1.memoria.colecao.ListaValor;
00040 import plp.orientadaObjetos1.util.Tipo;
00041 import plp.orientadaObjetos1.util.TipoClasse;
00042 import plp.orientadaObjetos1.util.TipoPrimitivo;
00043 
00044 /*
00045    Programa teste na Linguagem Orientada a Objetos 1 (LOO1)
00046 
00047    {
00048 
00049       classe Contador {
00050 
00051           int valor = 1;
00052 
00053           proc incrementa() {
00054             this.valor := this.valor + 1
00055           },
00056 
00057           proc print() {
00058             write(this.valor)
00059           }
00060 
00061       }
00062      ;
00063 
00064      {
00065        Contador c := new Contador,
00066        Contador c2 := new Contador;
00067        c.incrementa();
00068        c2.incrementa();
00069        c2.incrementa();
00070        c.print();
00071        c2.print()
00072      }
00073 
00074    }
00075 
00076    O resultado e: 2 3
00077 */
00078 
00079 public class Teste2LOO1 {
00080 
00081   public static void main(String [] args){
00082     Id valor = new Id("valor");
00083     Id idIncrementa = new Id("incrementa");
00084     Id idPrint = new Id("print");
00085     Id idThis = new Id("this");
00086     Id idValor = new Id("valor");
00087     Id idVarC = new Id("c");
00088     Id idVarC2 = new Id("c2");
00089     Id idContador = new Id("Contador");
00090 
00091     Valor int1 = new ValorInteiro(1);
00092     //Valor int2 = new ValorInteiro(2);
00093 
00094     ListaDeclaracaoParametro parVazios = new ListaDeclaracaoParametro();
00095     ListaExpressao parReaisVazios = new ListaExpressao();
00096 
00097 
00098     Tipo tipoInteiro = new TipoPrimitivo(TipoPrimitivo.INTEIRO);
00099 
00100     DecVariavel atributo = new SimplesDecVariavel(tipoInteiro, valor, int1);
00101     AcessoAtributoId thisValor = new AcessoAtributoId(idThis, idValor);
00102     Expressao soma = new ExpSoma(thisValor, int1);
00103     Atribuicao atribuicao = new Atribuicao(thisValor,soma);
00104     Comando write = new Write(thisValor);
00105     DecProcedimento incrementa = new DecProcedimentoSimples(idIncrementa, parVazios, atribuicao);
00106     DecProcedimento print = new DecProcedimentoSimples(idPrint, parVazios, write);
00107 
00108     DecProcedimento procedimentosContador = new DecProcedimentoComposta(incrementa,print);
00109     DecClasse classeContador = new DecClasseSimples(idContador, atributo, procedimentosContador);
00110 
00111     // comandos para a main
00112     Tipo tipoContador = new TipoClasse(idContador);
00113     DecVariavel declaracaoVarC = new DecVariavelObjeto( tipoContador, idVarC, idContador);
00114     DecVariavel declaracaoVarC2 = new DecVariavelObjeto( tipoContador, idVarC2, idContador);
00115     ChamadaMetodo chamadaIncrementaC = new ChamadaMetodo(idVarC, idIncrementa, parReaisVazios);
00116     ChamadaMetodo chamadaIncrementa1C2 = new ChamadaMetodo(idVarC2, idIncrementa, parReaisVazios);
00117     ChamadaMetodo chamadaIncrementa2C2 = new ChamadaMetodo(idVarC2, idIncrementa, parReaisVazios);
00118     ChamadaMetodo chamadaPrintC = new ChamadaMetodo(idVarC, idPrint, parReaisVazios);
00119     ChamadaMetodo chamadaPrintC2 = new ChamadaMetodo(idVarC2, idPrint, parReaisVazios);
00120 
00121     CompostaDecVariavel vars = new CompostaDecVariavel(declaracaoVarC, declaracaoVarC2);
00122 
00123     Comando comando4 = new Sequencial(chamadaPrintC, chamadaPrintC2);
00124     Comando comando3 = new Sequencial(chamadaIncrementa2C2, comando4);
00125     Comando comando2 = new Sequencial(chamadaIncrementa1C2, comando3);
00126     Comando comando1 = new Sequencial(chamadaIncrementaC, comando2);
00127     Comando comandosMain = comando1;
00128 
00129     Comando main = new ComDeclaracao(vars, comandosMain);
00130 
00131     Programa prg = new Programa(classeContador, main);
00132 
00133   try{
00134     if(prg.checaTipo(new ContextoCompilacaoOO1(new ListaValor()))) {
00135        System.out.println(prg.executar(new ContextoExecucaoOO1(new ListaValor())));
00136        System.out.println("TERMINOU");
00137 
00138      }
00139      else {
00140       System.out.println("Erro de tipo!");
00141      }
00142    }
00143   catch (VariavelNaoDeclaradaException e){
00144       System.out.println("Alguma variavel nao declarada foi referenciada!"+e.toString());
00145   }
00146   catch (EntradaNaoFornecidaException e){
00147       System.out.println("Entrada nao fornecida"+e.toString());
00148   }
00149   catch (VariavelJaDeclaradaException e){
00150       System.out.println("Valores de Entrada ja Declarados"+e.toString());
00151   }
00152   catch (ClasseNaoDeclaradaException e){
00153       System.out.println("Falta declarar a classe!"+e.toString());
00154   }
00155   catch (ClasseJaDeclaradaException e){
00156       System.out.println("Classe ja Declarada"+e.toString());
00157   }
00158   catch (ObjetoJaDeclaradoException e){
00159       System.out.println("Objeto de Entrada já Declarados!"+e.toString());
00160   }
00161   catch (ObjetoNaoDeclaradoException e){
00162       System.out.println("Falta fornecer o Objeto de Entrada!"+e.toString());
00163   }
00164   catch (ProcedimentoJaDeclaradoException e){
00165       System.out.println("Metodos já Declarados!"+e.toString());
00166   }
00167   catch (ProcedimentoNaoDeclaradoException e){
00168       System.out.println("Falta fornecer algum Metodo!"+e.toString());
00169   }
00170   catch (EntradaInvalidaException e){
00171       System.out.println(e.toString());
00172   }
00173  }
00174 
00175 
00176 }

Generated on Tue Sep 12 21:52:09 2006 for PLP by  doxygen 1.4.7