Teste3OO1.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.DecVariavel;
00019 import plp.orientadaObjetos1.declaracao.variavel.DecVariavelObjeto;
00020 import plp.orientadaObjetos1.declaracao.variavel.SimplesDecVariavel;
00021 import plp.orientadaObjetos1.excecao.declaracao.ClasseJaDeclaradaException;
00022 import plp.orientadaObjetos1.excecao.declaracao.ClasseNaoDeclaradaException;
00023 import plp.orientadaObjetos1.excecao.declaracao.ObjetoJaDeclaradoException;
00024 import plp.orientadaObjetos1.excecao.declaracao.ObjetoNaoDeclaradoException;
00025 import plp.orientadaObjetos1.excecao.declaracao.ProcedimentoJaDeclaradoException;
00026 import plp.orientadaObjetos1.excecao.declaracao.ProcedimentoNaoDeclaradoException;
00027 import plp.orientadaObjetos1.excecao.execucao.EntradaInvalidaException;
00028 import plp.orientadaObjetos1.excecao.execucao.EntradaNaoFornecidaException;
00029 import plp.orientadaObjetos1.expressao.Expressao;
00030 import plp.orientadaObjetos1.expressao.ListaExpressao;
00031 import plp.orientadaObjetos1.expressao.binaria.ExpSoma;
00032 import plp.orientadaObjetos1.expressao.leftExpression.AcessoAtributoId;
00033 import plp.orientadaObjetos1.expressao.leftExpression.Id;
00034 import plp.orientadaObjetos1.expressao.valor.Valor;
00035 import plp.orientadaObjetos1.expressao.valor.ValorInteiro;
00036 import plp.orientadaObjetos1.memoria.ContextoCompilacaoOO1;
00037 import plp.orientadaObjetos1.memoria.ContextoExecucaoOO1;
00038 import plp.orientadaObjetos1.memoria.colecao.ListaValor;
00039 import plp.orientadaObjetos1.util.Tipo;
00040 import plp.orientadaObjetos1.util.TipoClasse;
00041 import plp.orientadaObjetos1.util.TipoPrimitivo;
00042 
00043 /*
00044    Programa teste na Linguagem Orientada a Objetos 1 (LOO1)
00045 
00046    {
00047 
00048       classe Contador {
00049 
00050           int valor = 1;
00051 
00052           proc incrementa() {
00053             this.valor := this.valor + 1
00054           },
00055 
00056           proc print() {
00057             write(this.valor)
00058           }
00059 
00060       }
00061      ;
00062 
00063      {
00064        Contador cont := new Contador;
00065        cont.incrementa();
00066        cont.print()
00067      }
00068 
00069    }
00070 
00071    O resultado e: 2
00072 */
00073 
00074 public class Teste3OO1 {
00075 
00076   public static void main(String [] args){
00077     Id valor = new Id("valor");
00078     Id idIncrementa = new Id("incrementa");
00079     Id idPrint = new Id("print");
00080     Id idThis = new Id("this");
00081     Id idValor = new Id("valor");
00082     Id idVarContador = new Id("cont");
00083     Id idContador = new Id("Contador");
00084 
00085     Valor int1 = new ValorInteiro(1);
00086     Valor int2 = new ValorInteiro(2);
00087 
00088     ListaDeclaracaoParametro parVazios = new ListaDeclaracaoParametro();
00089     ListaExpressao parReaisVazios = new ListaExpressao();
00090 
00091 
00092     Tipo tipoInteiro = new TipoPrimitivo(TipoPrimitivo.INTEIRO);
00093 
00094     DecVariavel atributo = new SimplesDecVariavel(tipoInteiro, valor, int1);
00095     AcessoAtributoId thisValor = new AcessoAtributoId(idThis, idValor);
00096     Expressao soma = new ExpSoma(thisValor, int1);
00097     Atribuicao atribuicao = new Atribuicao(thisValor,soma);
00098     Comando write = new Write(thisValor);
00099     DecProcedimento incrementa = new DecProcedimentoSimples(idIncrementa, parVazios, atribuicao);
00100     DecProcedimento print = new DecProcedimentoSimples(idPrint, parVazios, write);
00101 
00102     DecProcedimento procedimentosContador = new DecProcedimentoComposta(incrementa,print);
00103     DecClasse classeContador = new DecClasseSimples(idContador, atributo, procedimentosContador);
00104 
00105     // comandos para a main
00106     Tipo tipoContador = new TipoClasse(idContador);
00107     DecVariavel declaracaoVarContador = new DecVariavelObjeto( tipoContador, idVarContador, idContador);
00108     ChamadaMetodo chamadaIncrementa = new ChamadaMetodo(idVarContador, idIncrementa, parReaisVazios);
00109     ChamadaMetodo chamadaPrint = new ChamadaMetodo(idVarContador, idPrint, parReaisVazios);
00110     Comando comandosMain = new Sequencial(chamadaIncrementa, chamadaPrint);
00111 
00112     Comando main = new ComDeclaracao(declaracaoVarContador, comandosMain);
00113 
00114     Programa prg = new Programa(classeContador, main);
00115 
00116   try{
00117     if(prg.checaTipo(new ContextoCompilacaoOO1(new ListaValor()))) {
00118        System.out.println(prg.executar(new ContextoExecucaoOO1(new ListaValor())));
00119      }
00120      else {
00121       System.out.println("Erro de tipo!");
00122      }
00123    }
00124   catch (VariavelNaoDeclaradaException e){
00125       System.out.println("Alguma variavel nao declarada foi referenciada!"+e.toString());
00126   }
00127   catch (EntradaNaoFornecidaException e){
00128       System.out.println("Entrada nao fornecida"+e.toString());
00129   }
00130   catch (VariavelJaDeclaradaException e){
00131       System.out.println("Valores de Entrada ja Declarados"+e.toString());
00132   }
00133   catch (ClasseNaoDeclaradaException e){
00134       System.out.println("Falta declarar a classe!"+e.toString());
00135   }
00136   catch (ClasseJaDeclaradaException e){
00137       System.out.println("Classe ja Declarada"+e.toString());
00138   }
00139   catch (ObjetoJaDeclaradoException e){
00140       System.out.println("Objeto de Entrada já Declarados!"+e.toString());
00141   }
00142   catch (ObjetoNaoDeclaradoException e){
00143       System.out.println("Falta fornecer o Objeto de Entrada!"+e.toString());
00144   }
00145   catch (ProcedimentoJaDeclaradoException e){
00146       System.out.println("Metodos já Declarados!"+e.toString());
00147   }
00148   catch (ProcedimentoNaoDeclaradoException e){
00149       System.out.println("Falta fornecer algum Metodo!"+e.toString());
00150   }
00151   catch (EntradaInvalidaException e){
00152       System.out.println(e.toString());
00153   }
00154  }
00155 
00156 
00157 }

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