| |
To run the below Lua script, cd to the tutorial directory ./plugins/luafaudes/tutorial and enter ./luafaudes regular.lua at the command prompt. The script will read input data from ./plugins/luafaudes/tutorial/data/.
-- Test/demonstrate core faudes generator functions -- ------------------------------------------ -- Deterministic -- ------------------------------------------ -- Announce print("################# Deterministic"); -- Convert nondeterministic generator deter_nondet = faudes.Generator("data/deterministic_nondet.gen"); deter_det = faudes.Generator(); faudes.Deterministic(deter_nondet,deter_det); -- Report deter_nondet:Write(); deter_det:Write(); -- ------------------------------------------ -- State Minimisation -- ------------------------------------------ -- Announce print("################# State Minimisation"); -- Convert non minimal generator minimal_nonmin = faudes.Generator("data/minimal_nonmin.gen"); minimal_min = faudes.Generator(); faudes.StateMin(minimal_nonmin,minimal_min); -- Report minimal_nonmin:Write(); minimal_min:Write(); -- ------------------------------------------ -- Natural Projection -- ------------------------------------------ -- Announce print("################# Projection"); project_g = faudes.Generator("data/project_g.gen"); project_prog = faudes.Generator(); alph_proj = faudes.EventSet(); alph_proj:Insert("a"); alph_proj:Insert("c"); alph_proj:Insert("e"); alph_proj:Insert("g"); faudes.Project(project_g,alph_proj,project_prog); -- Report project_g:Write(); alph_proj:Write(); project_prog:Write(); -- ------------------------------------------ -- Boolean Operations -- ------------------------------------------ -- Announce print("################# Boolean Operations"); -- Union boolean_g1 = faudes.Generator("data/boolean_g1.gen"); boolean_g2 = faudes.Generator("data/boolean_g2.gen"); boolean_union = faudes.Generator(); boolean_union:StateNamesEnabled(false); faudes.LanguageUnion(boolean_g1, boolean_g2, boolean_union); -- Intersection boolean_intersection = faudes.Generator(); boolean_intersection:StateNamesEnabled(false); faudes.LanguageIntersection(boolean_g1, boolean_g2, boolean_intersection); -- Test: perform complement twice boolean_complement_g1=faudes.Generator(boolean_g1); boolean_complement_g1:StateNamesEnabled(false); faudes.LanguageComplement(boolean_complement_g1); boolean_complement2_g1=faudes.Generator(boolean_complement_g1); faudes.LanguageComplement(boolean_complement2_g1); -- Write results boolean_g1:Write("tmp_boolean_g1.gen"); boolean_g2:Write("tmp_boolean_g2.gen"); boolean_union:Write("tmp_union_g1g2.gen"); boolean_intersection:Write("tmp_intersection_g1g2.gen"); boolean_complement_g1:Write("tmp_complement_g1.gen"); boolean_complement2_g1:Write("tmp_complement2_g1.gen"); -- Inspect on console print("################# Results:"); boolean_union:DWrite(); boolean_intersection:DWrite(); boolean_complement_g1:DWrite(); -- Compare languages print("################# Compare:"); if faudes.LanguageInclusion(boolean_g1,boolean_union) then print("Lm(g1) <= Lm(g1) v Lm(g2): OK"); else print("Lm(g1) > Lm(g1) v Lm(g2): ERR"); end if faudes.LanguageDisjoint(boolean_complement_g1,boolean_g1) then print("Lm(g1) ^ ~Lm(g1) = empty: OK"); else print("(Lm(g1) v Lm(g2)) ^ ~(Lm(g1) v Lm(g2)) != empty: ERR"); end if faudes.LanguageEquality(boolean_g1,boolean_complement2_g1) then print("Lm(g1) = ~~Lm(g1) : OK"); else print("Lm(g1) != ~~Lm(g1) : ERR"); end