Exemplos.java

Go to the documentation of this file.
00001 package plp.functional1;
00002 
00003 import java.util.ArrayList;
00004 import java.util.List;
00005 
00006 import plp.expressions2.expression.ExpSoma;
00007 import plp.expressions2.expression.Expressao;
00008 import plp.expressions2.expression.Id;
00009 import plp.expressions2.expression.ValorInteiro;
00010 import plp.expressions2.expression.ValorString;
00011 import plp.functional1.declaration.DecFuncao;
00012 import plp.functional1.declaration.DecVariavel;
00013 import plp.functional1.expression.Aplicacao;
00014 import plp.functional1.expression.ExpDeclaracao;
00015 import plp.functional1.util.ValorFuncao;
00016 
00017 public class Exemplos {
00018 
00019         public static void main(String [] args){
00020                 Id idX = new Id("x");
00021                 Id idY = new Id("y");
00022                 Id idZ = new Id("z");           
00023                 Id idMult = new Id("mult");
00024                 Id idFat = new Id("fat");
00025                 Id idF = new Id("f");
00026                 Id idN = new Id("n");
00027 
00028 // mult x y = if (x == 0) then (0) else (y + mult (x - 1, y))
00029 /*
00030                 Expressao expMult2 = new ExpSoma( idY,
00031                                                           new Aplicacao( idMult,
00032                                                                                          new ListaExpressao( new Expressao[] {
00033                                                                                                 new ExpSub(idX, ValorInteiro.UM), idY } )
00034                                                                                         )
00035                                                                                 );
00036                 Expressao expMult1 = new IfThenElse(
00037                                                                 new ExpEquals(idX, ValorInteiro.ZERO),
00038                                                                 ValorInteiro.ZERO,
00039                                                                 expMult2
00040                                                         );
00041                 DecFuncao funMult = new DecFuncao(idMult,
00042                                                                 new ValorFuncao(new ListaId(new Id[] {idX, idY}), expMult1)
00043                                                         );
00044 
00045 
00046                 Expressao expFat2 = new Aplicacao( idMult,
00047                                                                 new ListaExpressao( new Expressao[] {
00048                                                                         idN,
00049                                                                         new Aplicacao( idFat,
00050                                                                                 new ListaExpressao(
00051                                                                                         new ExpSub(idN,
00052                                                                                                            ValorInteiro.UM
00053                                                                                         )
00054                                                                                 )
00055                                                                         )}
00056                                                                 )
00057                                                         );
00058                 Expressao expFat1 = new IfThenElse(
00059                                                                 new ExpEquals(idN, ValorInteiro.ZERO),
00060                                                                 ValorInteiro.UM,
00061                                                                 expFat2
00062                                                         );
00063                 DecFuncao funFat = new DecFuncao(idFat,
00064                                                                 new ValorFuncao(new ListaId(idN), expFat1)
00065                                                         );
00066                 ListaExpressao lexp = new ListaExpressao(new ValorInteiro(5));
00067                 ExpDeclaracao exp1 = new ExpDeclaracao(new SeqDec(funFat), new Aplicacao(idFat, lexp));
00068                 ExpDeclaracao exp = new ExpDeclaracao(new SeqDec(funMult), exp1);
00069 */
00070 
00071 
00072 //              let fun fat n =
00073 //                  let fun mult x y = if (x == 0) then (0) else (y + (mult (x - 1) y))
00074 //                  in if (n == 0) then (1) else (mult n (fat (n - 1)))
00075 //              in fat 5
00076 
00077 /*
00078                 Expressao expMult2 = new ExpSoma( idY,
00079                                                           new Aplicacao( idMult,
00080                                                                                          new ListaExpressao( new Expressao[] {
00081                                                                                                 new ExpSub(idX, ValorInteiro.UM), idY } )
00082                                                                                         )
00083                                                                                 );
00084                 Expressao expMult1 = new IfThenElse(
00085                                                                 new ExpEquals(idX, ValorInteiro.ZERO),
00086                                                                 ValorInteiro.ZERO,
00087                                                                 expMult2
00088                                                         );
00089                 DecFuncao funMult = new DecFuncao(idMult,
00090                                                                 new ValorFuncao(new ListaId(new Id[] {idX, idY}), expMult1)
00091                                                         );
00092 
00093 
00094                 Expressao expFat2 = new Aplicacao( idMult,
00095                                                                 new ListaExpressao( new Expressao[] {
00096                                                                         idN,
00097                                                                         new Aplicacao( idFat,
00098                                                                                 new ListaExpressao(
00099                                                                                         new ExpSub(idN,
00100                                                                                                            ValorInteiro.UM
00101                                                                                         )
00102                                                                                 )
00103                                                                         )}
00104                                                                 )
00105                                                         );
00106                 Expressao expFat1 = new IfThenElse(
00107                                                                 new ExpEquals(idN, ValorInteiro.ZERO),
00108                                                                 ValorInteiro.UM,
00109                                                                 expFat2
00110                                                         );
00111                 Expressao expFat0 = new ExpDeclaracao(new SeqDec(funMult), expFat1);
00112                 DecFuncao funFat = new DecFuncao(idFat,
00113                                                                 new ValorFuncao(new ListaId(idN), expFat0)
00114                                                         );
00115 
00116                 ListaExpressao lexp = new ListaExpressao(new ValorInteiro(5));
00117                 ExpDeclaracao exp = new ExpDeclaracao(new SeqDec(funFat), new Aplicacao(idFat, lexp));
00118                 System.out.println("Expressao original:");
00119                 System.out.println(exp);
00120                 Programa prog = new Programa(exp);
00121 
00122 */
00123 
00124 /*
00125 // let var x = 3 in
00126 //     let fun n y = y + x in
00127 //         let var x = 5 in
00128 //             n 1
00129                 DecVariavel decX1 = new DecVariavel(idX, new ValorInteiro(3));
00130                 DecVariavel decX2 = new DecVariavel(idX, new ValorInteiro(5));
00131                 Expressao exp = new Aplicacao(idN, new ListaExpressao(ValorInteiro.UM));
00132                 Expressao exp2 = new ExpDeclaracao(new SeqDec(decX2), exp);
00133                 DecFuncao decN = new DecFuncao(idN, new ValorFuncao(new ListaId(idY), new ExpSoma(idX, idY)));
00134                 Expressao exp3 = new ExpDeclaracao(new SeqDec(decN), exp2);
00135                 Expressao exp4 = new ExpDeclaracao(new SeqDec(decX1), exp3);
00136                 Programa prog = new Programa(exp4);
00137 */
00138 
00139 /*
00140         // let fun f x = x + 1 in f 2
00141                 DecFuncao decF = new DecFuncao(idF, new ValorFuncao(new ListaId(idX), new ExpSoma(idX, ValorInteiro.UM)));
00142                 Expressao exp = new ExpDeclaracao(new SeqDec(decF), new Aplicacao(idF, new ListaExpressao(new ValorInteiro(2))));
00143                 Programa prog = new Programa(exp);
00144 */
00145 
00146   // let x=3,f(x,y)=x+y in f(2,x)
00147 /*   Id idX = new Id("x");
00148    Id idY = new Id("y");
00149    Id idF = new Id("f");
00150    DecVariavel decVar = new DecVariavel( idX ,  new ValorBooleano(true) );
00151    DecFuncao decFun = new DecFuncao(idF, new ValorFuncao( new ListaId(idX,new ListaId(idY)),new ExpSoma(idX ,idY) ) );
00152    ExpDeclaracao expDeclara = new ExpDeclaracao(new SeqDec(decVar,new SeqDec(decFun)),new Aplicacao(idF,new ListaExpressao(new ValorInteiro(2),new ListaExpressao(idX)) )   );
00153    Programa prog = new Programa( expDeclara );
00154 */
00155 // let var y = 3 in
00156 //   let fun f x = x + y in
00157 //     let var z = "abc" in
00158 //       f 3
00159    List valor3 = new ArrayList();
00160    valor3.add(new ValorInteiro(3));
00161    Expressao exp = new Aplicacao(idF, valor3);
00162 
00163         Expressao exp2;   
00164    {
00165            List declaracoes = new ArrayList();
00166            declaracoes.add(new DecVariavel(idZ, new ValorString("abc")));
00167            exp2 = new ExpDeclaracao(declaracoes,
00168                                                                                         exp);
00169    }
00170 
00171    List idXList = new ArrayList();
00172    idXList.add(idX);
00173    DecFuncao decF = new DecFuncao(idF, new ValorFuncao(idXList,
00174                                                                                                         new ExpSoma(idX, idY)));
00175 
00176         Expressao exp3;
00177    {
00178                 List declaracoes = new ArrayList();
00179                 declaracoes.add(decF);
00180                 exp3 = new ExpDeclaracao(declaracoes, exp2);
00181    }
00182 
00183         Expressao exp4;
00184         {
00185                 List declaracoes = new ArrayList()      ;
00186                 declaracoes.add(new DecVariavel(idY, new ValorInteiro(3)));
00187                 exp4 = new ExpDeclaracao(declaracoes,
00188                                                                                 exp3);
00189         }
00190    Programa prog = new Programa( exp4 );
00191       
00192                 System.out.println("Expressao:");
00193                 System.out.println(prog.getExpressao().toString());
00194                 try {
00195                         if (!prog.checaTipo()) {
00196                                 System.out.println("Erro de tipo");
00197                         } else {
00198                                 System.out.println(prog.executar());
00199                         }
00200                 } catch (Exception e) {
00201                         System.out.println("Erro: " + e);
00202                         e.printStackTrace();
00203                 }
00204 
00205  }
00206 
00207 }
00208 

Generated on Tue Sep 12 21:51:57 2006 for PLP by  doxygen 1.4.7