3_regular.cpp

Go to the documentation of this file.
00001 
00016 #include "libfaudes.h"
00017 
00018 
00019 // make the faudes namespace available to our program
00020 
00021 using namespace faudes;
00022 
00023 
00024 
00026 // main program
00028 
00029 int main() {
00030 
00031 
00033   // make deterministic
00035 
00036 
00037   // read nondeterministic generator and  perform operation 
00038 
00039   Generator deter_nondet("data/deterministic_nondet.gen");
00040   Generator deter_det;
00041   Deterministic(deter_nondet, deter_det);
00042   deter_det.Write("tmp_deterministic_det.gen");
00043   deter_nondet.Write("tmp_deterministic_nondet.gen");
00044 
00045   // report result to console
00046  
00047   std::cout << "################################\n";
00048   std::cout << "# deterministic generator \n";
00049   deter_det.DWrite();
00050   std::cout << "################################\n";
00051 
00052 
00054   // make minimal
00056 
00057 
00058   // read nonminimal generator and  perform operation 
00059 
00060   Generator minimal_nonmin("data/minimal_nonmin.gen");
00061   Generator minimal_min;
00062   StateMin(minimal_nonmin, minimal_min);
00063   minimal_nonmin.Write("tmp_minimal_nonmin.gen");
00064   minimal_min.Write("tmp_minimal_min.gen");
00065 
00066   // report result to console
00067  
00068   std::cout << "################################\n";
00069   std::cout << "# minimal generator \n";
00070   minimal_min.DWrite();
00071   std::cout << "################################\n";
00072 
00073 
00075   // project
00077 
00078 
00079   // read generator to project 
00080 
00081   Generator project_g("data/project_g.gen");
00082   Generator project_prog;
00083   EventSet alph_proj;
00084   alph_proj.Insert("a");
00085   alph_proj.Insert("c");
00086   alph_proj.Insert("e");
00087   alph_proj.Insert("g");
00088   Project(project_g,  alph_proj, project_prog);
00089   project_g.Write("tmp_project_g.gen");
00090   project_prog.Write("tmp_project_prog.gen");
00091 
00092   // report result to console
00093  
00094   std::cout << "################################\n";
00095   std::cout << "# projected generator \n";
00096   project_prog.DWrite();
00097   std::cout << "################################\n";
00098 
00099 
00100 
00102   // boolean language operations
00104 
00105 
00106   // read generators
00107   Generator boolean_g1("data/boolean_g1.gen");
00108   Generator boolean_g2("data/boolean_g2.gen");
00109 
00110   // perform union
00111   Generator boolean_union;
00112   boolean_union.StateNamesEnabled(false);
00113   LanguageUnion(boolean_g1, boolean_g2, boolean_union);
00114   
00115   // perform intersection
00116   Generator boolean_intersection;
00117   boolean_intersection.StateNamesEnabled(false);
00118   LanguageIntersection(boolean_g1, boolean_g2, boolean_intersection);
00119   
00120   // perform complement twice
00121   Generator boolean_complement_g1=boolean_g1; 
00122   boolean_complement_g1.StateNamesEnabled(false);
00123   LanguageComplement(boolean_complement_g1);
00124   Generator boolean_complement2_g1=boolean_complement_g1;
00125   LanguageComplement(boolean_complement2_g1);
00126 
00127   // write results and operands for html docu
00128   boolean_g1.Write("tmp_boolean_g1.gen");
00129   boolean_g2.Write("tmp_boolean_g2.gen");
00130   boolean_union.Write("tmp_union_g1g2.gen");
00131   boolean_intersection.Write("tmp_intersection_g1g2.gen");
00132   boolean_complement_g1.Write("tmp_complement_g1.gen");
00133   boolean_complement2_g1.Write("tmp_complement2_g1.gen");
00134 
00135   // inspect on console
00136   std::cout << "################################\n";
00137   std::cout << "# boolean language operations\n";
00138   boolean_union.DWrite();
00139   boolean_intersection.DWrite();
00140   boolean_complement_g1.DWrite();
00141   std::cout << "################################\n";
00142 
00143   // compare languages
00144   std::cout << "################################\n";
00145   std::cout << "# boolean language operations\n";
00146   if(LanguageInclusion(boolean_g1,boolean_union))  
00147     std::cout << "Lm(g1) <= Lm(g1) v Lm(g2): OK\n";
00148   else
00149     std::cout << "Lm(g1) > Lm(g1) v Lm(g2): ERR\n";
00150   if(LanguageDisjoint(boolean_complement_g1,boolean_g1))  
00151     std::cout << "Lm(g1) ^ ~Lm(g1) = empty: OK\n";
00152   else
00153     std::cout << "(Lm(g1) v Lm(g2)) ^ ~(Lm(g1) v Lm(g2)) != empty: ERR\n";
00154   if(LanguageEquality(boolean_g1,boolean_complement2_g1))  
00155     std::cout << "Lm(g1) = ~~Lm(g1) : OK\n";
00156   else
00157     std::cout << "Lm(g1) != ~~Lm(g1) : ERR\n";
00158   std::cout << "################################\n";
00159 
00160 
00162   // convert to automaton
00164   
00165   // read generator and write for html docu
00166   Generator automaton_g("data/automaton_g.gen");
00167   automaton_g.Write("tmp_automaton_g.gen");
00168   
00169   // convert to automaton
00170   
00171   Automaton(automaton_g);
00172   automaton_g.Write("tmp_automaton_gRes.gen");
00173 
00174   // inspect on console 
00175   std::cout << "################################\n";
00176   std::cout << "# automaton from generator \n";
00177   automaton_g.DWrite();
00178   std::cout << "################################\n";
00179   
00180   
00182   // language concatenation
00184 
00185   // read generators and write for html docu
00186   Generator concat_g1("data/concat_g1.gen");
00187   Generator concat_g2("data/concat_g2.gen");
00188   Generator concat_g3("data/concat_g3.gen");
00189   Generator concat_g4("data/concat_g4.gen");
00190   concat_g1.Write("tmp_concat_g1.gen");
00191   concat_g2.Write("tmp_concat_g2.gen");
00192   concat_g3.Write("tmp_concat_g3.gen");
00193   concat_g4.Write("tmp_concat_g4.gen");
00194 
00195   // perform language concatenations and inspect on console
00196   std::cout << "################################\n";
00197   std::cout << "# language concatenation\n";
00198   Generator concat;
00199   concat.StateNamesEnabled(false);
00200   LanguageConcatenate(concat_g1,concat_g3,concat);
00201   concat.Write("tmp_concat_g1g3.gen");
00202   concat.DWrite();
00203   LanguageConcatenate(concat_g1,concat_g4,concat);
00204   concat.Write("tmp_concat_g1g4.gen");
00205   concat.DWrite();
00206   LanguageConcatenate(concat_g2,concat_g3,concat);
00207   concat.Write("tmp_concat_g2g3.gen");
00208   concat.DWrite();
00209   LanguageConcatenate(concat_g2,concat_g4,concat);
00210   concat.Write("tmp_concat_g2g4.gen");
00211   concat.DWrite();
00212   std::cout << "################################\n";
00213   
00214   
00216   // full language, alphabet language, empty string language and empty language
00218   
00219   // create alphabet={a,b}
00220   EventSet languages_alphabet;
00221   languages_alphabet.Insert("a");
00222   languages_alphabet.Insert("b");
00223   
00224   // generator for result
00225   Generator languages_g;
00226   
00227   // construct full language from alphabet
00228   FullLanguage(languages_alphabet,languages_g);
00229   languages_g.Write("tmp_languagesFull_result.gen");
00230 
00231   // inspect on console
00232   std::cout << "################################\n";
00233   std::cout << "# full language \n";
00234   languages_g.DWrite();
00235   
00236   // construct alphabet language from alphabet
00237   AlphabetLanguage(languages_alphabet,languages_g);
00238   languages_g.Write("tmp_languagesAlphabet_result.gen");
00239   std::cout << "# alphabet language \n";
00240   languages_g.DWrite();
00241   
00242   // construct empty string language from alphabet
00243   EmptyStringLanguage(languages_alphabet,languages_g);
00244   languages_g.Write("tmp_languagesEmptyString_result.gen");
00245   std::cout << "# empty string language \n";
00246   languages_g.DWrite();
00247   
00248   // construct empty language from alphabet
00249   EmptyLanguage(languages_alphabet,languages_g);
00250   languages_g.Write("tmp_languagesEmpty_result.gen");
00251   std::cout << "# empty language \n";
00252   languages_g.DWrite();
00253   std::cout << "################################\n";
00254 
00255 
00257   // Kleene closure
00259   
00260   // read generator and write for html docu
00261   Generator kleene_g("data/kleene_g.gen");
00262   kleene_g.Write("tmp_kleene_g.gen");
00263   
00264   // compute Kleene closure
00265   kleene_g.StateNamesEnabled(false);
00266   KleeneClosure(kleene_g);
00267   kleene_g.Write("tmp_kleene_gRes.gen");
00268 
00269   // inspect on console 
00270   std::cout << "################################\n";
00271   std::cout << "# Kleene closure \n";
00272   kleene_g.DWrite();
00273   std::cout << "################################\n";
00274   
00275   
00277   // prefix closure
00279   
00280   // read generator and write for html docu
00281   Generator prefixclosure_g("data/prefixclosure_g.gen");
00282   prefixclosure_g.Write("tmp_prefixclosure_g.gen");
00283   
00284   // compute prefix closure
00285   PrefixClosure(prefixclosure_g);
00286   prefixclosure_g.Write("tmp_prefixclosure_gRes.gen");
00287 
00288   // inspect on console 
00289   std::cout << "################################\n";
00290   std::cout << "# prefix closure \n";
00291   prefixclosure_g.DWrite();
00292   std::cout << "################################\n";
00293   
00294 
00296   // selfloop
00298   
00299   // read generator and write for html docu
00300   Generator selfloop_g("data/selfloop_g.gen");
00301   selfloop_g.Write("tmp_selfloop_g.gen");
00302   
00303   // create alphabet={e,f}
00304   EventSet selfloop_alphabet;
00305   selfloop_alphabet.Insert("e");
00306   selfloop_alphabet.Insert("f");
00307   
00308   // generator for result
00309   Generator selfloop_gRes=selfloop_g;
00310   
00311   // add selfloops in each state
00312   SelfLoop(selfloop_gRes,selfloop_alphabet);
00313   selfloop_gRes.Write("tmp_selfloop_gRes.gen");
00314 
00315   // inspect on console 
00316   std::cout << "################################\n";
00317   std::cout << "# selfloop, each state \n";
00318   selfloop_gRes.DWrite();
00319   
00320   // add selfloops in marked states
00321   selfloop_gRes=selfloop_g;
00322   SelfLoopMarkedStates(selfloop_gRes,selfloop_alphabet);
00323   selfloop_gRes.Write("tmp_selfloopMarked_gRes.gen");
00324   std::cout << "# selfloop, marked states \n";
00325   selfloop_gRes.DWrite();
00326   
00327   // add selfloops in inital state(s)
00328   selfloop_gRes=selfloop_g;
00329   SelfLoop(selfloop_gRes,selfloop_alphabet,selfloop_gRes.InitStates());
00330   selfloop_gRes.Write("tmp_selfloopInit_gRes.gen");
00331   std::cout << "# selfloop, init state(s) \n";
00332   selfloop_gRes.DWrite();
00333   std::cout << "################################\n";
00334 
00335   // say good bye    
00336   std::cout << "done.\n";
00337   return 0;
00338 }
00339 
00340 
00341 

Generated on Fri May 9 11:26:47 2008 for libFAUDES 2.09b by  doxygen 1.4.4