00001
00016 #include "libfaudes.h"
00017
00018
00019
00020
00021 using namespace faudes;
00022
00023
00024
00026
00028
00029 int main() {
00030
00031
00033
00035
00036
00037
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
00046
00047 std::cout << "################################\n";
00048 std::cout << "# deterministic generator \n";
00049 deter_det.DWrite();
00050 std::cout << "################################\n";
00051
00052
00054
00056
00057
00058
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
00067
00068 std::cout << "################################\n";
00069 std::cout << "# minimal generator \n";
00070 minimal_min.DWrite();
00071 std::cout << "################################\n";
00072
00073
00075
00077
00078
00079
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
00093
00094 std::cout << "################################\n";
00095 std::cout << "# projected generator \n";
00096 project_prog.DWrite();
00097 std::cout << "################################\n";
00098
00099
00100
00102
00104
00105
00106
00107 Generator boolean_g1("data/boolean_g1.gen");
00108 Generator boolean_g2("data/boolean_g2.gen");
00109
00110
00111 Generator boolean_union;
00112 boolean_union.StateNamesEnabled(false);
00113 LanguageUnion(boolean_g1, boolean_g2, boolean_union);
00114
00115
00116 Generator boolean_intersection;
00117 boolean_intersection.StateNamesEnabled(false);
00118 LanguageIntersection(boolean_g1, boolean_g2, boolean_intersection);
00119
00120
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
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
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
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
00164
00165
00166 Generator automaton_g("data/automaton_g.gen");
00167 automaton_g.Write("tmp_automaton_g.gen");
00168
00169
00170
00171 Automaton(automaton_g);
00172 automaton_g.Write("tmp_automaton_gRes.gen");
00173
00174
00175 std::cout << "################################\n";
00176 std::cout << "# automaton from generator \n";
00177 automaton_g.DWrite();
00178 std::cout << "################################\n";
00179
00180
00182
00184
00185
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
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
00218
00219
00220 EventSet languages_alphabet;
00221 languages_alphabet.Insert("a");
00222 languages_alphabet.Insert("b");
00223
00224
00225 Generator languages_g;
00226
00227
00228 FullLanguage(languages_alphabet,languages_g);
00229 languages_g.Write("tmp_languagesFull_result.gen");
00230
00231
00232 std::cout << "################################\n";
00233 std::cout << "# full language \n";
00234 languages_g.DWrite();
00235
00236
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
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
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
00259
00260
00261 Generator kleene_g("data/kleene_g.gen");
00262 kleene_g.Write("tmp_kleene_g.gen");
00263
00264
00265 kleene_g.StateNamesEnabled(false);
00266 KleeneClosure(kleene_g);
00267 kleene_g.Write("tmp_kleene_gRes.gen");
00268
00269
00270 std::cout << "################################\n";
00271 std::cout << "# Kleene closure \n";
00272 kleene_g.DWrite();
00273 std::cout << "################################\n";
00274
00275
00277
00279
00280
00281 Generator prefixclosure_g("data/prefixclosure_g.gen");
00282 prefixclosure_g.Write("tmp_prefixclosure_g.gen");
00283
00284
00285 PrefixClosure(prefixclosure_g);
00286 prefixclosure_g.Write("tmp_prefixclosure_gRes.gen");
00287
00288
00289 std::cout << "################################\n";
00290 std::cout << "# prefix closure \n";
00291 prefixclosure_g.DWrite();
00292 std::cout << "################################\n";
00293
00294
00296
00298
00299
00300 Generator selfloop_g("data/selfloop_g.gen");
00301 selfloop_g.Write("tmp_selfloop_g.gen");
00302
00303
00304 EventSet selfloop_alphabet;
00305 selfloop_alphabet.Insert("e");
00306 selfloop_alphabet.Insert("f");
00307
00308
00309 Generator selfloop_gRes=selfloop_g;
00310
00311
00312 SelfLoop(selfloop_gRes,selfloop_alphabet);
00313 selfloop_gRes.Write("tmp_selfloop_gRes.gen");
00314
00315
00316 std::cout << "################################\n";
00317 std::cout << "# selfloop, each state \n";
00318 selfloop_gRes.DWrite();
00319
00320
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
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
00336 std::cout << "done.\n";
00337 return 0;
00338 }
00339
00340
00341