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 difference_g1("data/difference_g1.gen");
00167 difference_g1.Write("tmp_difference_g1.gen");
00168
00169 Generator difference_g2("data/difference_g2.gen");
00170 difference_g2.Write("tmp_difference_g2.gen");
00171
00172
00173
00174 Generator difference_g1minusg2;
00175 LanguageDifference(difference_g1,difference_g2,difference_g1minusg2);
00176 difference_g1minusg2.Write("tmp_difference_g1minusg2.gen");
00177
00178
00179 std::cout << "################################\n";
00180 std::cout << "# language difference Lm(g1)-Lm(g2) \n";
00181 difference_g1minusg2.DWrite();
00182 std::cout << "################################\n";
00183
00185
00187
00188
00189 Generator automaton_g("data/automaton_g.gen");
00190 automaton_g.Write("tmp_automaton_g.gen");
00191
00192
00193
00194 Automaton(automaton_g);
00195 automaton_g.Write("tmp_automaton_gRes.gen");
00196
00197
00198 std::cout << "################################\n";
00199 std::cout << "# automaton from generator \n";
00200 automaton_g.DWrite();
00201 std::cout << "################################\n";
00202
00203
00205
00207
00208
00209 Generator concat_g1("data/concat_g1.gen");
00210 Generator concat_g2("data/concat_g2.gen");
00211 Generator concat_g3("data/concat_g3.gen");
00212 Generator concat_g4("data/concat_g4.gen");
00213 concat_g1.Write("tmp_concat_g1.gen");
00214 concat_g2.Write("tmp_concat_g2.gen");
00215 concat_g3.Write("tmp_concat_g3.gen");
00216 concat_g4.Write("tmp_concat_g4.gen");
00217
00218
00219 std::cout << "################################\n";
00220 std::cout << "# language concatenation\n";
00221 Generator concat;
00222 concat.StateNamesEnabled(false);
00223 LanguageConcatenate(concat_g1,concat_g3,concat);
00224 concat.Write("tmp_concat_g1g3.gen");
00225 concat.DWrite();
00226 LanguageConcatenate(concat_g1,concat_g4,concat);
00227 concat.Write("tmp_concat_g1g4.gen");
00228 concat.DWrite();
00229 LanguageConcatenate(concat_g2,concat_g3,concat);
00230 concat.Write("tmp_concat_g2g3.gen");
00231 concat.DWrite();
00232 LanguageConcatenate(concat_g2,concat_g4,concat);
00233 concat.Write("tmp_concat_g2g4.gen");
00234 concat.DWrite();
00235 std::cout << "################################\n";
00236
00237
00239
00241
00242
00243 EventSet languages_alphabet;
00244 languages_alphabet.Insert("a");
00245 languages_alphabet.Insert("b");
00246
00247
00248 Generator languages_g;
00249
00250
00251 FullLanguage(languages_alphabet,languages_g);
00252 languages_g.Write("tmp_languagesFull_result.gen");
00253
00254
00255 std::cout << "################################\n";
00256 std::cout << "# full language \n";
00257 languages_g.DWrite();
00258
00259
00260 AlphabetLanguage(languages_alphabet,languages_g);
00261 languages_g.Write("tmp_languagesAlphabet_result.gen");
00262 std::cout << "# alphabet language \n";
00263 languages_g.DWrite();
00264
00265
00266 EmptyStringLanguage(languages_alphabet,languages_g);
00267 languages_g.Write("tmp_languagesEmptyString_result.gen");
00268 std::cout << "# empty string language \n";
00269 languages_g.DWrite();
00270
00271
00272 EmptyLanguage(languages_alphabet,languages_g);
00273 languages_g.Write("tmp_languagesEmpty_result.gen");
00274 std::cout << "# empty language \n";
00275 languages_g.DWrite();
00276 std::cout << "################################\n";
00277
00278
00280
00282
00283
00284 Generator kleene_g("data/kleene_g.gen");
00285 kleene_g.Write("tmp_kleene_g.gen");
00286
00287
00288 kleene_g.StateNamesEnabled(false);
00289 KleeneClosure(kleene_g);
00290 kleene_g.Write("tmp_kleene_gRes.gen");
00291
00292
00293 std::cout << "################################\n";
00294 std::cout << "# Kleene closure \n";
00295 kleene_g.DWrite();
00296 std::cout << "################################\n";
00297
00298
00300
00302
00303
00304 Generator prefixclosure_g("data/prefixclosure_g.gen");
00305 prefixclosure_g.Write("tmp_prefixclosure_g.gen");
00306
00307
00308 PrefixClosure(prefixclosure_g);
00309 prefixclosure_g.Write("tmp_prefixclosure_gRes.gen");
00310
00311
00312 std::cout << "################################\n";
00313 std::cout << "# prefix closure \n";
00314 prefixclosure_g.DWrite();
00315 std::cout << "################################\n";
00316
00317
00319
00321
00322
00323 Generator selfloop_g("data/selfloop_g.gen");
00324 selfloop_g.Write("tmp_selfloop_g.gen");
00325
00326
00327 EventSet selfloop_alphabet;
00328 selfloop_alphabet.Insert("e");
00329 selfloop_alphabet.Insert("f");
00330
00331
00332 Generator selfloop_gRes=selfloop_g;
00333
00334
00335 SelfLoop(selfloop_gRes,selfloop_alphabet);
00336 selfloop_gRes.Write("tmp_selfloop_gRes.gen");
00337
00338
00339 std::cout << "################################\n";
00340 std::cout << "# selfloop, each state \n";
00341 selfloop_gRes.DWrite();
00342
00343
00344 selfloop_gRes=selfloop_g;
00345 SelfLoopMarkedStates(selfloop_gRes,selfloop_alphabet);
00346 selfloop_gRes.Write("tmp_selfloopMarked_gRes.gen");
00347 std::cout << "# selfloop, marked states \n";
00348 selfloop_gRes.DWrite();
00349
00350
00351 selfloop_gRes=selfloop_g;
00352 SelfLoop(selfloop_gRes,selfloop_alphabet,selfloop_gRes.InitStates());
00353 selfloop_gRes.Write("tmp_selfloopInit_gRes.gen");
00354 std::cout << "# selfloop, init state(s) \n";
00355 selfloop_gRes.DWrite();
00356 std::cout << "################################\n";
00357
00358
00359 std::cout << "done.\n";
00360 return 0;
00361 }
00362
00363
00364