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
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
00075
00076
00077
00078
00079 public class Teste2OO1 {
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
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
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 }