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.IfThenElse;
00010 import plp.orientadaObjetos1.comando.New;
00011 import plp.orientadaObjetos1.comando.Sequencial;
00012 import plp.orientadaObjetos1.comando.Skip;
00013 import plp.orientadaObjetos1.comando.While;
00014 import plp.orientadaObjetos1.comando.Write;
00015 import plp.orientadaObjetos1.declaracao.classe.DecClasseSimples;
00016 import plp.orientadaObjetos1.declaracao.procedimento.DecParametro;
00017 import plp.orientadaObjetos1.declaracao.procedimento.DecProcedimentoComposta;
00018 import plp.orientadaObjetos1.declaracao.procedimento.DecProcedimentoSimples;
00019 import plp.orientadaObjetos1.declaracao.procedimento.ListaDeclaracaoParametro;
00020 import plp.orientadaObjetos1.declaracao.variavel.CompostaDecVariavel;
00021 import plp.orientadaObjetos1.declaracao.variavel.DecVariavelObjeto;
00022 import plp.orientadaObjetos1.declaracao.variavel.SimplesDecVariavel;
00023 import plp.orientadaObjetos1.excecao.declaracao.ClasseJaDeclaradaException;
00024 import plp.orientadaObjetos1.excecao.declaracao.ClasseNaoDeclaradaException;
00025 import plp.orientadaObjetos1.excecao.declaracao.ObjetoJaDeclaradoException;
00026 import plp.orientadaObjetos1.excecao.declaracao.ObjetoNaoDeclaradoException;
00027 import plp.orientadaObjetos1.excecao.declaracao.ProcedimentoJaDeclaradoException;
00028 import plp.orientadaObjetos1.excecao.declaracao.ProcedimentoNaoDeclaradoException;
00029 import plp.orientadaObjetos1.excecao.execucao.EntradaInvalidaException;
00030 import plp.orientadaObjetos1.excecao.execucao.EntradaNaoFornecidaException;
00031 import plp.orientadaObjetos1.expressao.ListaExpressao;
00032 import plp.orientadaObjetos1.expressao.This;
00033 import plp.orientadaObjetos1.expressao.binaria.ExpAnd;
00034 import plp.orientadaObjetos1.expressao.binaria.ExpEquals;
00035 import plp.orientadaObjetos1.expressao.leftExpression.AcessoAtributoId;
00036 import plp.orientadaObjetos1.expressao.leftExpression.AcessoAtributoThis;
00037 import plp.orientadaObjetos1.expressao.leftExpression.Id;
00038 import plp.orientadaObjetos1.expressao.unaria.ExpNot;
00039 import plp.orientadaObjetos1.expressao.valor.ValorInteiro;
00040 import plp.orientadaObjetos1.expressao.valor.ValorNull;
00041 import plp.orientadaObjetos1.memoria.ContextoCompilacaoOO1;
00042 import plp.orientadaObjetos1.memoria.ContextoExecucaoOO1;
00043 import plp.orientadaObjetos1.memoria.colecao.ListaValor;
00044 import plp.orientadaObjetos1.util.TipoClasse;
00045 import plp.orientadaObjetos1.util.TipoPrimitivo;
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
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101 public class Teste1LOO1 {
00102
00103 public static void main(String [] args){
00104
00105 Programa prg = new Programa
00106
00107 (
00108
00109 new DecClasseSimples
00110 (
00111 new Id("LValor")
00112 ,
00113 new CompostaDecVariavel
00114 (
00115 new SimplesDecVariavel(new TipoPrimitivo(1), new Id("valor"), new ValorInteiro(1))
00116 ,
00117 new SimplesDecVariavel(new TipoClasse(new Id("LValor")),new Id("prox"), new ValorNull())
00118 )
00119 ,
00120 new DecProcedimentoComposta
00121 (
00122 new DecProcedimentoSimples
00123 (
00124 new Id("insere"),
00125 new ListaDeclaracaoParametro(new DecParametro(new Id("v"), new TipoPrimitivo(1))),
00126 new ComDeclaracao
00127 (
00128 new SimplesDecVariavel( new TipoClasse(new Id("LValor")),new Id("aux") , new This()),
00129 new Sequencial
00130 (
00131 new Sequencial
00132 (
00133 new While
00134 (
00135 new ExpNot(new ExpEquals(new AcessoAtributoId(new Id("aux"), new Id("prox")) ,new ValorNull()))
00136 ,
00137 new Atribuicao( new Id("aux") , new AcessoAtributoId(new Id("aux"), new Id("prox")) )
00138 )
00139 ,
00140 new New ( new AcessoAtributoId(new Id("aux"), new Id("prox")) , new Id("LValor"))
00141 )
00142 ,
00143 new Atribuicao
00144 (
00145 new AcessoAtributoId(new AcessoAtributoId(new Id("aux"), new Id("prox")), new Id("valor")),
00146 new Id("v")
00147 )
00148 )
00149 )
00150 )
00151 ,
00152 new DecProcedimentoComposta
00153 (
00154 new DecProcedimentoSimples
00155 (
00156 new Id("print"),
00157 new ListaDeclaracaoParametro(),
00158 new Sequencial
00159 (
00160 new Write(new AcessoAtributoThis(new This(), new Id("valor")))
00161 ,
00162 new IfThenElse
00163 (
00164 new ExpNot(new ExpEquals(new AcessoAtributoThis(new This(), new Id("prox")) ,new ValorNull()))
00165 ,
00166 new ChamadaMetodo( new AcessoAtributoThis(new This(), new Id("prox")) , new Id("print"), new ListaExpressao())
00167 ,
00168 new Skip()
00169 )
00170 )
00171 )
00172 ,
00173 new DecProcedimentoSimples
00174 (
00175 new Id("remove")
00176 ,
00177 new ListaDeclaracaoParametro(new DecParametro( new Id("v"), new TipoPrimitivo(1)))
00178 ,
00179 new ComDeclaracao
00180 (
00181 new SimplesDecVariavel(new TipoClasse(new Id("LValor")), new Id("aux") , new This() )
00182 ,
00183 new Sequencial
00184 (
00185 new While
00186 (
00187 new ExpAnd
00188 (
00189 new ExpNot(new ExpEquals(new AcessoAtributoId(new Id("aux"), new Id("prox")) ,new ValorNull()))
00190 ,
00191 new ExpNot(new ExpEquals
00192 (
00193 new AcessoAtributoId(new AcessoAtributoId(new Id("aux"), new Id("prox")), new Id("valor"))
00194 ,
00195 new Id("v")
00196 )
00197 )
00198 )
00199 ,
00200 new Atribuicao( new Id("aux") , new AcessoAtributoId(new Id("aux"), new Id("prox")) )
00201 )
00202 ,
00203 new IfThenElse
00204 (
00205 new ExpNot(new ExpEquals(new AcessoAtributoId(new Id("aux"), new Id("prox")) , new ValorNull()))
00206 ,
00207 new Atribuicao
00208 (
00209 new AcessoAtributoId(new Id("aux"), new Id("prox"))
00210 ,
00211 new AcessoAtributoId(new AcessoAtributoId(new Id("aux"), new Id("prox")), new Id("prox"))
00212 )
00213 ,
00214 new Skip()
00215 )
00216
00217 )
00218 )
00219 )
00220 )
00221 )
00222 )
00223
00224 ,
00225
00226 new ComDeclaracao
00227 (
00228 new DecVariavelObjeto( new TipoClasse(new Id ("LValor")), new Id("lv"), new Id("LValor"))
00229 ,
00230 new Sequencial
00231 (
00232 new ChamadaMetodo( new Id("lv") , new Id("insere"), new ListaExpressao(new ValorInteiro(2)))
00233 ,
00234 new Sequencial
00235 (
00236 new Sequencial
00237 (
00238 new ChamadaMetodo( new Id("lv") , new Id("insere"), new ListaExpressao(new ValorInteiro(3)))
00239 ,
00240 new Sequencial
00241 (
00242 new ChamadaMetodo( new Id("lv") , new Id("insere"), new ListaExpressao(new ValorInteiro(4)))
00243 ,
00244 new ChamadaMetodo( new Id("lv") , new Id("print"), new ListaExpressao())
00245 )
00246 )
00247 ,
00248 new Sequencial
00249 (
00250 new ChamadaMetodo( new Id("lv") , new Id("remove"), new ListaExpressao(new ValorInteiro(3)))
00251 ,
00252 new ChamadaMetodo( new Id("lv") , new Id("print"), new ListaExpressao())
00253 )
00254 )
00255 )
00256 )
00257 );
00258
00259 try{
00260 if(prg.checaTipo(new ContextoCompilacaoOO1(new ListaValor()))) {
00261 System.out.println(prg.executar(new ContextoExecucaoOO1(new ListaValor())));
00262 }
00263 else {
00264 System.out.println("Erro de tipo!");
00265 }
00266 }
00267 catch (VariavelNaoDeclaradaException e){
00268 System.out.println("Alguma variavel nao declarada foi referenciada!"+e.toString());
00269 }
00270 catch (EntradaNaoFornecidaException e){
00271 System.out.println("Entrada nao fornecida"+e.toString());
00272 }
00273 catch (VariavelJaDeclaradaException e){
00274 System.out.println("Valores de Entrada ja Declarados"+e.toString());
00275 }
00276 catch (ClasseNaoDeclaradaException e){
00277 System.out.println("Falta declarar a classe!"+e.toString());
00278 }
00279 catch (ClasseJaDeclaradaException e){
00280 System.out.println("Classe ja Declarada"+e.toString());
00281 }
00282 catch (ObjetoJaDeclaradoException e){
00283 System.out.println("Objeto de Entrada já Declarados!"+e.toString());
00284 }
00285 catch (ObjetoNaoDeclaradoException e){
00286 System.out.println("Falta fornecer o Objeto de Entrada!"+e.toString());
00287 e.printStackTrace();
00288 }
00289 catch (ProcedimentoJaDeclaradoException e){
00290 System.out.println("Metodos já Declarados!"+e.toString());
00291 }
00292 catch (ProcedimentoNaoDeclaradoException e){
00293 System.out.println("Falta fornecer algum Metodo!"+e.toString());
00294 }
00295 catch (EntradaInvalidaException e){
00296 System.out.println(e.toString());
00297 }
00298 }
00299 }