!define uppercase [A|Á|B|C|C1|D|D1|E|F|G|H|I|J|K|L|M|N|N1|O|P|R|S|S1|T|T1|U|V|Z|Z1]; !define lowercase [a|á|b|c|c1|d|d1|e|f|g|h|i|j|k|l|m|n|n1|o|p|r|s|s1|t|t1|u|v|z|z1]; !define alphabet [uppercase|lowercase]; define vowel [a|á|e|i|o|u]; define cons [b|c|c1|d|d1|f|g|h|j|k|l|m|n|n1|p|r|s|s1|t|t1|v|z|z1]; define dipth [{ie}|{ea}|{uo}|{oa}]; define letter [vowel|cons]; define syll cons^{0,2} vowel^{1,2} cons^{0,2}; !define word alphabet* syll syll; define cons2 [{bb}|{ff}|{ll}|{mm}|{rr}|{ss}|{vv}|{pp}|{tt}|{gg}|{kk}|{zz}|{cc}|d1 d1|n1 n1|s1 s1|c1 c1|z1 z1]; define cons3 [{hl}|{lj}|{nj}|{hr}|{hc}|h c1|{hk}|{hp}|{ht}|{dj}|{bm}|{pm}|{dn}|{tn}|g n1|k n1|d1 b|d1 g|d1 j|d1 v|{lb}|{lc}|l c1|{ld}|{lf}|{lg}|{lj}|{lk}|{lp}|{ls}|l s1|{lt}|{lv}|l z1|{mb}|{mp}|{ms}|m s1|{nc}|n c1|{nd}|{ns}|{nt}|{nz}|n z1|n1 g|n1 k|{rb}|{rc}|r c1|{rd}|{rf}|{rg}|{rj}|{rk}|{rp}|{rs}|r s1|{rt}|{rv}|{rz}|r z1|{sk}|{sm}|{sp}|{st}|s1 k|s1 m|s1 t|s1 v|{tk}|{tm}|{vd}|{vg}|{vj}|{vk}|{vl}|{vp}|{vr}|{vt}|{vz}|v z1|{kc}|k c1|{ks}|{kt}|k s1]; !define sg []; define center [s1 0 s1] : [s1 ' s1] | s1 s1 : 0 | {nd} : {n'd} ; !read regex $[%+Guess] .o. AllInclusive ; !save stack ../bin/t-sme.fst !define PossWord letter* vowel center vowel ; ! This is the guessing structure. Now it generates words very liberally. define PossWord (s) cons^{0,2} [vowel|dipth] (i) [cons|cons2|cons3|cons^3] vowel cons^{0,1}; !define PossWord [syll^{0,5} | (s) cons (cons)] vowel center vowel ; define PossRoot PossWord "+Guess":0 ; !define PossRoot word{0,1} PossWord word^{0,1} "+Guess":0 ; load stack ../bin/g-sme.save !read lexc < ../dev/all-sme-lex.txt substitute defined PossRoot for "^GUESSNOUNROOT" define AllInclusive read regex $[%+Guess] .o. AllInclusive ; !save stack ../bin/t-sme.fst !clear