Teste1LOO1.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.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    Programa teste na Linguagem Orientada a Objetos 1 (LOO1)
00049 {
00050     classe LValor {
00051         int valor = -100,
00052         LValor prox = null;
00053 
00054         proc insere(int v) {
00055             {
00056                 LValor aux = this;
00057                 while ( not(aux.prox == null) ) do {
00058                    aux := aux.prox
00059                 };
00060                 aux.prox := new LValor;
00061                 aux.valor := v
00062             }
00063         },
00064 
00065         proc remove(int v) {
00066             {
00067 
00068             LValor aux = this;
00069             while( not( (aux.prox == null)  or (((aux).prox).valor == v) ) ) do {
00070                 aux := aux.prox
00071             };
00072             if ( not( aux.prox == null) ) then {
00073                 aux.prox := ((aux).prox).prox
00074             }
00075 
00076             }
00077         },
00078 
00079         proc print() {
00080             write(this.valor);
00081             if ( not( this.prox == null) ) then {
00082                 (this).prox.print()
00083             }
00084         }
00085     };
00086 
00087     {
00088         LValor lv := new LValor;
00089         lv.insere(2);
00090         lv.insere(3);
00091         lv.insere(4);
00092         lv.print();
00093         lv.remove(3);
00094         lv.print()
00095     }
00096 }
00097 
00098     O resultado e: 2 3 4 -100 2 4 -100
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 }

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