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
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
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
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 }