Index: branches/apertium-separable/src/transducer.cpp =================================================================== --- branches/apertium-separable/src/transducer.cpp (revision 80289) +++ branches/apertium-separable/src/transducer.cpp (revision 80294) @@ -3,7 +3,6 @@ #include #include #include -// #include #include #include @@ -43,11 +42,11 @@ int adv_sym = alphabet(L""); int pr_sym = alphabet(L""); + int any_tag = alphabet(L""); + int any_char = alphabet(L""); int wb_sym = alphabet(L"<$>"); - int any_tag = alphabet(L""); int initial = t.getInitial(); - int take_out = initial; //0 take_out = t.insertSingleTransduction(alphabet(L't',L't'), take_out); //1 take_out = t.insertSingleTransduction(alphabet(L'a',L'a'), take_out); //2 @@ -58,15 +57,46 @@ take_out = t.insertSingleTransduction(alphabet(0,L'o'), take_out); //7 take_out = t.insertSingleTransduction(alphabet(0,L'u'), take_out); //8 take_out = t.insertSingleTransduction(alphabet(0,L't'), take_out); //9 - take_out = t.insertSingleTransduction(alphabet(vblex_sym, vblex_sym), take_out); - // take_out = t.insertSingleTransduction(alphabet(any_tag, any_tag), take_out); - - // ɛ + take_out = t.insertSingleTransduction(alphabet(vblex_sym,vblex_sym), take_out); int loop = take_out; - take_out = t.insertSingleTransduction(alphabet(any_tag, any_tag), loop); + take_out = t.insertSingleTransduction(alphabet(any_tag,any_tag), loop); t.linkStates(take_out, loop, 0); + take_out = t.insertSingleTransduction(alphabet(wb_sym,wb_sym), take_out); + int reset = take_out; + + /* nothing */ + + + /* n */ + take_out = reset; + + loop = take_out; + int none = take_out; + take_out = t.insertSingleTransduction(alphabet(any_char,any_char), loop); + none = t.insertSingleTransduction(alphabet(0,0), none); + t.linkStates(take_out, loop, 0); + t.linkStates(none, loop, 0); + + take_out = t.insertSingleTransduction(alphabet(n_sym,n_sym), take_out); + none = t.insertSingleTransduction(alphabet(0,0), none); + + loop = take_out; + none = take_out; + take_out = t.insertSingleTransduction(alphabet(any_tag,any_tag), loop); + none = t.insertSingleTransduction(alphabet(0,0), none); + t.linkStates(take_out, loop, 0); + t.linkStates(none, loop, 0); + take_out = t.insertSingleTransduction(alphabet(wb_sym,wb_sym), take_out); + none = t.insertSingleTransduction(alphabet(0,0), none); + + /* pr */ + take_out = reset; + //same as n except with pr_sym + + + take_out = t.insertSingleTransduction(alphabet(L'o',0), take_out); take_out = t.insertSingleTransduction(alphabet(L'u',0), take_out); take_out = t.insertSingleTransduction(alphabet(L't',0), take_out); @@ -73,10 +103,6 @@ take_out = t.insertSingleTransduction(alphabet(any_tag, 0), take_out); take_out = t.insertSingleTransduction(alphabet(wb_sym,0), take_out); - // take_out = t.insertSingleTransduction(alphabet(L'^',L'^'), take_out); - // take_out = t.insertSingleTransduction(alphabet(L'&',L'&'), take_out); - // take_out = t.insertSingleTransduction(alphabet(L'$',L'$'), take_out); - t.setFinal(take_out); FILE* fst = fopen("takeout.fst", "w+"); @@ -91,8 +117,8 @@ Compression::wstring_write(L"main@standard", fst); // Then write the transducer t.write(fst); - wcout << t.size() << endl ; + wcout << "t.size(): " << t.size() << endl ; fclose(fst); return 0; -} +} \ No newline at end of file Index: branches/apertium-separable/src/transducer2.cpp =================================================================== --- branches/apertium-separable/src/transducer2.cpp (nonexistent) +++ branches/apertium-separable/src/transducer2.cpp (revision 80294) @@ -0,0 +1,172 @@ +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +struct foo { + Transducer t; + int takeout_state; + int none_state; +} + +foo add_anychar(Alphabet alphabet, int any_char, Transducer t, int take_out); +foo add_anytag(Alphabet alphabet, int any_char, Transducer t, int take_out); + +foo add_anychar(Alphabet alphabet, int any_char, Transducer t, int take_out) { + int loop = take_out; + int none = take_out; + take_out = t.insertSingleTransduction(alphabet(any_char,any_char), loop); + none = t.insertSingleTransduction(alphabet(0,0), none); + t.linkStates(take_out, loop, 0); + t.linkStates(none, loop, 0); + + foo bar = {t, take_out, none}; + return bar; +} + +foo add_anytag(Alphabet alphabet, int any_tag, Transducer t, int take_out) { + int loop = take_out; + int none = take_out; + take_out = t.insertSingleTransduction(alphabet(any_tag,any_tag), loop); + none = t.insertSingleTransduction(alphabet(0,0), none); + t.linkStates(take_out, loop, 0); + t.linkStates(none, loop, 0); + + foo bar = {t, take_out, none}; + return bar; +} + +int main(int argc, char** argv) { + Alphabet alphabet; + Transducer t; + + LtLocale::tryToSetLocale(); + + alphabet.includeSymbol(L""); + alphabet.includeSymbol(L""); + alphabet.includeSymbol(L""); + alphabet.includeSymbol(L""); + alphabet.includeSymbol(L""); + alphabet.includeSymbol(L""); + alphabet.includeSymbol(L""); + alphabet.includeSymbol(L""); + + alphabet.includeSymbol(L""); + alphabet.includeSymbol(L""); + alphabet.includeSymbol(L"<$>"); + + int vblex_sym = alphabet(L""); + int n_sym = alphabet(L""); + int adj_sym = alphabet(L""); + int det_sym = alphabet(L""); + int prn_sym = alphabet(L""); + int np_sym = alphabet(L""); + int adv_sym = alphabet(L""); + int pr_sym = alphabet(L""); + + int any_tag = alphabet(L""); + int any_char = alphabet(L""); + int wb_sym = alphabet(L"<$>"); + + int initial = t.getInitial(); + int take_out = initial; + + /* take# out */ + take_out = t.insertSingleTransduction(alphabet(L't',L't'), take_out); //1 + take_out = t.insertSingleTransduction(alphabet(L'a',L'a'), take_out); //2 + take_out = t.insertSingleTransduction(alphabet(L'k',L'k'), take_out); //3 + take_out = t.insertSingleTransduction(alphabet(L'e',L'e'), take_out); //4 + take_out = t.insertSingleTransduction(alphabet(0,L'#'), take_out); //5 + take_out = t.insertSingleTransduction(alphabet(0,L' '), take_out); //6 + take_out = t.insertSingleTransduction(alphabet(0,L'o'), take_out); //7 + take_out = t.insertSingleTransduction(alphabet(0,L'u'), take_out); //8 + take_out = t.insertSingleTransduction(alphabet(0,L't'), take_out); //9 + take_out = t.insertSingleTransduction(alphabet(vblex_sym,vblex_sym), take_out); + int loop = take_out; + take_out = t.insertSingleTransduction(alphabet(any_tag,any_tag), loop); + t.linkStates(take_out, loop, 0); + take_out = t.insertSingleTransduction(alphabet(wb_sym,wb_sym), take_out); + + /* nothing */ + int reset = take_out; + int none = 0; + + /* n */ + take_out = reset; + + foobar = add_anychar(alphabet, any_char, t, take_out); + t = foobar.transducer; + take_out = foobar.takeout_state; + none = foobar.none_state; + + take_out = t.insertSingleTransduction(alphabet(n_sym,n_sym), take_out); + none = t.insertSingleTransduction(alphabet(0,0), none); + + foobar = add_anytag(alphabet, any_tag, t, take_out); + t = foobar.transducer; + take_out = foobar.takeout_state; + none = foobar.none_state; + + take_out = t.insertSingleTransduction(alphabet(wb_sym,wb_sym), take_out); + none = t.insertSingleTransduction(alphabet(0,0), none); + + /* pr */ + take_out = reset; + + foobar = add_anychar(alphabet, any_char, t, take_out); + t = foobar.transducer; + take_out = foobar.takeout_state; + none = foobar.none_state; + + take_out = t.insertSingleTransduction(alphabet(pr_sym,pr_sym), take_out); + none = t.insertSingleTransduction(alphabet(0,0), none); + + foobar = add_anytag(alphabet, any_tag, t, take_out); + t = foobar.transducer; + take_out = foobar.takeout_state; + none = foobar.none_state; + + take_out = t.insertSingleTransduction(alphabet(wb_sym,wb_sym), take_out); + none = t.insertSingleTransduction(alphabet(0,0), none); + + + + + + /* out */ + take_out = t.insertSingleTransduction(alphabet(L'o',0), take_out); + take_out = t.insertSingleTransduction(alphabet(L'u',0), take_out); + take_out = t.insertSingleTransduction(alphabet(L't',0), take_out); + take_out = t.insertSingleTransduction(alphabet(any_tag, 0), take_out); + take_out = t.insertSingleTransduction(alphabet(wb_sym,0), take_out); + + t.setFinal(take_out); + + FILE* fst = fopen("takeout.fst", "w+"); + + // First write the letter symbols of the alphabet + Compression::wstring_write(L"aekout", fst); + // Then write the multicharacter symbols + alphabet.write(fst); + // Then write then number of transducers + Compression::multibyte_write(1, fst); + // Then write the name of the transducer + Compression::wstring_write(L"main@standard", fst); + // Then write the transducer + t.write(fst); + wcout << "t.size(): " << t.size() << endl ; + fclose(fst); + + return 0; +}