Magyar igeragozás fomával

Innen: Programozás Wiki
A lap korábbi változatát látod, amilyen Muki987 (vitalap | szerkesztései) 2012. március 31., 21:33-kor történt szerkesztése után volt.
Ugrás a navigációhozUgrás a kereséshez

Foma két fájltípust használ: A lexc fájl tartalmazza a szavakat, a használt nyelvtani szimbólumokat és a ragok összetevésének listáját. A .foma fájl a szabályos kifejezések (regular expression) listája, ezek összeállítása nyelvtanná. A mellékelt példaprogram egyetlen egy ragot használ de megmutatja az elvet. Az elv az, hogy a lexc fájlban kézzel kell összeállítani a lehetséges toldalékok listáját. A magyar nyelvben, lerövidítve ezek:

  • ((plu? | poss? | fam?) gen? case) |tem|soc|dis|ess

ahol

NévMagyarázat
pluplural (házak)
famfam rag (ék)
gengenitiv (é, éi)
caseragok (ba,be, ban,ben, tól, től, stb...)
tem|soc|dis|essragok, melyeket csak közvetlenül a főnévhez kapcsolódva használunk, pl. estül
?Azt jelenti, hogy a rag hozzáfűzése opcionális, azaz nem kötelező

Lexc fájl:

!!!enhuige.lexc!!!

Multichar_Symbols  +Verb +Rep +Imper +Nrep +Pot +Case
                   +Inf +Pref+
     
§AA§ §AAA§ §igea§ §igeo§ §igeo2§ §igeu§ §igee§
§igejakik1§ §igejatokitek1§ §igeija1§ §igeaa§ §igetattet§
§felteo§ §eo§ §j§ §szorelol§ §tatt§ §aet§ §aen§ §oe2§ §ae2§
§sj§  §ess§
§AAmely§ §AAAmely§ §igeamely§ §igeomely§ §igeo2mely§ §igeumely§ §igeemely§
§igejakik1mely§ §igejatokitek1mely§ §igeija1mely§ §igeaamely§ §igetattetmely§
§felteomely§ §szorelolmely§

LEXICON Root
Verb ;
Prefkeresztul;
Prefkolcson;

LEXICON Prefkeresztul
+Pref+:keresztül   Verb;

LEXICON Prefkolcson
+Pref+:kölcsön   Verb;

LEXICON Verb


!ír
!írhat  potential
!irathat imper potential
!irat imper
!irattattat imper imper
!irjon command
!írhasson
!írogattathat rep imper pot
!íratgathat
!írogattatgat
!Irni
!írnék, írnál .. írnának cond conditional
! írjak írjon írj  command

LEXICON AddVerb
+Verb:0     Rep;

LEXICON Rep
+Inf:^+cInf^ni  #;
+Rep:^+cRep^§felteo§g§AA§t  Imper;
                    Imper1;

LEXICON Imper
+Imper:^+cImp^t§AA§t  Nrep;
                      Nrep;
LEXICON Imper1
+Imper:^+cImp^§tatt§§AA§t  Nrep;
                      Nrep1;

LEXICON Nrep
+Rep:^+cNrep^g§AA§t  NImper;
                      NImper;

LEXICON Nrep1
+Rep:^+cNrep^§felteo§g§AA§t  NImper;
                      NImper1;

LEXICON NImper
+Imper:^+cImp^t§AA§t  Pot;
                      Pot;

LEXICON NImper1
+Imper:^+cImp^§tatt§§AA§t  Pot;
                      Pot1;

LEXICON Pot
+Pot:^+cPot^h§AAA§t  Case;
             Case;

LEXICON Pot1
+Pot:^+cPot^h§AAA§t  Case;
             Case; ! case1 if differs

LEXICON Case
+IndefSg1:^+cIndefSg1^§igeo§k    #;    ! ek/ok
+IndefSg2:^+cIndefSg2^§szorelol§ #;    ! esz, el/ol
+IndefSg3:^+cIndefSg3^           #;    !
+IndefPl1:^+cIndefPl1^§igeu§nk   #;    ! ünk/unk
+IndefPl2:^+cIndefPl2^t§igeo2§k  #;    ! tek/tok
+IndefPl3:^+cIndefPl3^n§igea§k   #;    ! nek/nak
+DefSg1:^+cDefSg1^§igeo§m        #;    ! em/om
+DefSg2:^+cDefSg2^§igee§d        #;    ! ed/od
+DefSg3:^+cDefSg3^§igeija1§       #;    ! i/sa
+DefPl1:^+cDefPl1^§j§§igeu§k      #;    ! jük/suk
+DefPl2:^+cDefPl2^§igejatokitek1§ #;    ! itek/sátok
+DefPl3:^+cDefPl3^§igejakik1§     #;    ! ik/sák
+ConjIndefSg1:^+cConjIndefSg1^§sj§§igea§k     #;
+ConjIndefSg2:^+cConjIndefSg2^§sj§§igeaa§l    #;
+ConjIndefSg2:^+cConjIndefSg2^§sj§           #;
+ConjIndefSg3:^+cConjIndefSg3^§sj§§igeo§n     #;
+ConjIndefPl1:^+cConjIndefPl1^§sj§§igeu§nk    #;
+ConjIndefPl2:^+cConjIndefPl2^§sj§§igea§t§igeo§k       #;
+ConjIndefPl3:^+cConjIndefPl3^§sj§§igea§n§igea§k      #;
+ConjDefSg1:^+cConjDefSg1^§sj§§igea§m         #;
+ConjDefSg2:^+cConjDefSg2^§sj§§igea§d         #;
+ConjDefSg2:^+cConjDefSg2^§sj§d              #;
+ConjDefSg3:^+cConjDefSg3^§sj§§igea§          #;
+ConjDefPl1:^+cConjDefPl1^§sj§§igeu§k         #;
+ConjDefPl2:^+cConjDefPl2^§sj§§igeaa§t§igeo§k     #;
+ConjDefPl3:^+cConjDefSg1^§sj§§igeaa§k            #;
+PastIndefSg1:^+cPIndefSg1^t§AA§m            #;    ! tem/tam
+PastIndefSg2:^+cPIndefSg2^t§igeaa§l         #;    ! tál/tél
+PastIndefSg3:^+cPIndefSg3^§igetattet§t      #;    ! t
+PastIndefPl1:^+cPIndefPl1^t§igeu§nk         #;    ! tünk/tunk
+PastIndefPl2:^+cPIndefPl2^t§igea§t§igeo2§k  #;    ! tetek/tatok
+PastIndefPl3:^+cPIndefPl3^t§igea§k          #;    ! tek/tak
+PastDefSg1:^+cPDefSg1^t§igea§m              #;    ! tem/tam
+PastDefSg2:^+cPDefSg2^t§igea§d              #;    ! tad/ted
+PastDefSg3:^+cPDefSg3^t§igea§               #;    ! ta/te
+PastDefPl1:^+cPDefPl1^t§igeu§k              #;    ! tuk/tük
+PastDefPl2:^+cPDefPl2^t§igeaa§t§igeo2§k     #;    ! tátok/tétek
+PastDefPl3:^+cPDefPl3^t§igeaa§k             #;    ! ták/ték
+CondIndefSg1:^+cCIndefSg1^nék               #;    ! nék
+CondIndefSg2:^+cCIndefSg2^n§igeaa§l         #;    ! nál/nél
+CondIndefSg3:^+cCIndefSg3^n§igea§           #;    ! na/ne
+CondIndefPl1:^+cCIndefPl1^n§igeaa§nk            #;    ! nánk/nénk
+CondIndefPl2:^+cCIndefPl2^n§igeaa§t§igeo§k      #;    ! nátok/nétek
+CondIndefPl3:^+cCIndefPl3^n§igeaa§n§igea§k      #;    ! nának/nének
+CondDefSg1:^+cCDefSg1^n§igeaa§m                 #;    ! nám/ném
+CondDefSg2:^+cCDefSg2^n§igeaa§d                 #;    ! nád/néd
+CondDefSg3:^+cCDefSg3^n§igeaa§                  #;    ! ná/né
+CondDefPl1:^+cCDefPl1^n§igeaa§nk                #;    ! nánk/nénk
+CondDefPl2:^+cCDefPl2^n§igeaa§t§igeo§k          #;    ! nátok/nétek
+CondDefPl3:^+cCDefPl3^n§igeaa§k                 #;    ! nák/nék


LEXICON AddVerbmely
+Verb:0     Repmely;

LEXICON Repmely
+Inf:^+cInf^ni  #;
+Rep:^+cRep^§felteomely§g§AAmely§t  Impermely;
                    Imper1mely;

LEXICON Impermely
+Imper:^+cImp^t§AAmely§t  Nrepmely;
                      Nrepmely;
LEXICON Imper1mely
+Imper:^+cImp^§tatt§§AAmely§t  Nrepmely;
                      Nrep1mely;

LEXICON Nrepmely
+Rep:^+cNrep^g§AAmely§t  NImpermely;
                      NImpermely;

LEXICON Nrep1mely
+Rep:^+cNrep^§felteomely§g§AAmely§t  NImpermely;
                      NImper1mely;

LEXICON NImpermely
+Imper:^+cImp^t§AAmely§t  Potmely;
                      Potmely;

LEXICON NImper1mely
+Imper:^+cImp^§tatt§§AAmely§t  Potmely;
                      Potmely;

LEXICON Potmely
+Pot:^+cPot^h§AAAmely§t  Casemely;
             Casemely;

LEXICON Casemely
+IndefSg1:^+cIndefSg1^§igeomely§k    #;    ! ek/ok
+IndefSg2:^+cIndefSg2^§szorelolmely§         #;    ! esz, el/ol
+IndefSg3:^+cIndefSg3^           #;    !
+IndefPl1:^+cIndefPl1^§igeumely§nk   #;    ! ünk/unk
+IndefPl2:^+cIndefPl2^t§igeo2mely§k  #;    ! tek/tok
+IndefPl3:^+cIndefPl3^n§igeamely§k   #;    ! nek/nak
+DefSg1:^+cDefSg1^§igeomely§m        #;    ! em/om
+DefSg2:^+cDefSg2^§igeemely§d        #;    ! ed/od
+DefSg3:^+cDefSg3^§igeija1mely§       #;    ! i/sa
+DefPl1:^+cDefPl1^§j§§igeumely§k       #;    ! jük/suk
+DefPl2:^+cDefPl2^§igejatokitek1mely§ #;    ! itek/sátok
+DefPl3:^+cDefPl3^§igejakik1mely§     #;    ! ik/sák
+ConjIndefSg1:^+cConjIndefSg1^§sj§§igeamely§k     #;
+ConjIndefSg2:^+cConjIndefSg2^§sj§§igeaamely§l    #;
+ConjIndefSg2:^+cConjIndefSg2^§sj§           #;
+ConjIndefSg3:^+cConjIndefSg3^§sj§§igeomely§n     #;
+ConjIndefPl1:^+cConjIndefPl1^§sj§§igeumely§nk    #;
+ConjIndefPl2:^+cConjIndefPl2^§sj§§igeamely§t§igeomely§k       #;
+ConjIndefPl3:^+cConjIndefPl3^§sj§§igeamely§n§igeamely§k      #;
+ConjDefSg1:^+cConjDefSg1^§sj§§igeamely§m         #;
+ConjDefSg2:^+cConjDefSg2^§sj§§igeamely§d         #;
+ConjDefSg2:^+cConjDefSg2^§sj§d              #;
+ConjDefSg3:^+cConjDefSg3^§sj§§igeamely§          #;
+ConjDefPl1:^+cConjDefPl1^§sj§§igeumely§k         #;
+ConjDefPl2:^+cConjDefPl2^§sj§§igeaamely§t§igeomely§k     #;
+ConjDefPl3:^+cConjDefSg1^§sj§§igeaamely§k            #;
+PastIndefSg1:^+cPIndefSg1^t§AAmely§m            #;    ! tem/tam
+PastIndefSg2:^+cPIndefSg2^t§igeaamely§l         #;    ! tál/tél
+PastIndefSg3:^+cPIndefSg3^§igetattetmely§t      #;    ! t
+PastIndefPl1:^+cPIndefPl1^t§igeumely§nk         #;    ! tünk/tunk
+PastIndefPl2:^+cPIndefPl2^t§igeamely§t§igeo2mely§k  #;    ! tetek/tatok
+PastIndefPl3:^+cPIndefPl3^t§igeamely§k          #;    ! tek/tak
+PastDefSg1:^+cPDefSg1^t§igeamely§m              #;    ! tem/tam
+PastDefSg2:^+cPDefSg2^t§igeamely§d              #;    ! tad/ted
+PastDefSg3:^+cPDefSg3^t§igeamely§               #;    ! ta/te
+PastDefPl1:^+cPDefPl1^t§igeumely§k              #;    ! tuk/tük
+PastDefPl2:^+cPDefPl2^t§igeaamely§t§igeo2mely§k     #;    ! tátok/tétek
+PastDefPl3:^+cPDefPl3^t§igeaamely§k             #;    ! ták/ték
+CondIndefSg1:^+cCIndefSg1^nék               #;    ! nék
+CondIndefSg2:^+cCIndefSg2^n§igeaamely§l         #;    ! nál/nél
+CondIndefSg3:^+cCIndefSg3^n§igeamely§           #;    ! na/ne
+CondIndefPl1:^+cCIndefPl1^n§igeaamely§nk            #;    ! nánk/nénk
+CondIndefPl2:^+cCIndefPl2^n§igeaamely§t§igeomely§k      #;    ! nátok/nétek
+CondIndefPl3:^+cCIndefPl3^n§igeaamely§n§igeamely§k      #;    ! nának/nének
+CondDefSg1:^+cCDefSg1^n§igeaamely§m                 #;    ! nám/ném
+CondDefSg2:^+cCDefSg2^n§igeaamely§d                 #;    ! nád/néd
+CondDefSg3:^+cCDefSg3^n§igeaamely§                  #;    ! ná/né
+CondDefPl1:^+cCDefPl1^n§igeaamely§nk                #;    ! nánk/nénk
+CondDefPl2:^+cCDefPl2^n§igeaamely§t§igeomely§k          #;    ! nátok/nétek
+CondDefPl3:^+cCDefPl3^n§igeaamely§k                 #;    ! nák/nék


LEXICON AddVerb
+Verb:0     Rep;

LEXICON Rep
+Inf:^+cInf^ni  #;
+Rep:^+cRep^§felteo§g§AA§t  Imper;
                    Imper1;

LEXICON Imper
+Imper:^+cImp^t§AA§t  Nrep;
                      Nrep;
LEXICON Imper1
+Imper:^+cImp^§tatt§§AA§t  Nrep;
                      Nrep1;

LEXICON Nrep
+Rep:^+cNrep^g§AA§t  NImper;
                      NImper;

LEXICON Nrep1
+Rep:^+cNrep^§felteo§g§AA§t  NImper;
                      NImper1;

LEXICON NImper
+Imper:^+cImp^t§AA§t  Pot;
                      Pot;

LEXICON NImper1
+Imper:^+cImp^§tatt§§AA§t  Pot;
                      Pot1;

LEXICON Pot
+Pot:^+cPot^h§AAA§t  Case;
             Case;

LEXICON Pot1
+Pot:^+cPot^h§AAA§t  Case;
             Case; ! case1 if differs

LEXICON Case
+IndefSg1:^+cIndefSg1^§igeo§k    #;    ! ek/ok
+IndefSg2:^+cIndefSg2^§szorelol§ #;    ! esz, el/ol
+IndefSg3:^+cIndefSg3^           #;    !
+IndefPl1:^+cIndefPl1^§igeu§nk   #;    ! ünk/unk
+IndefPl2:^+cIndefPl2^t§igeo2§k  #;    ! tek/tok
+IndefPl3:^+cIndefPl3^n§igea§k   #;    ! nek/nak
+DefSg1:^+cDefSg1^§igeo§m        #;    ! em/om
+DefSg2:^+cDefSg2^§igee§d        #;    ! ed/od
+DefSg3:^+cDefSg3^§igeija1§       #;    ! i/sa
+DefPl1:^+cDefPl1^§j§§igeu§k      #;    ! jük/suk
+DefPl2:^+cDefPl2^§igejatokitek1§ #;    ! itek/sátok
+DefPl3:^+cDefPl3^§igejakik1§     #;    ! ik/sák
+ConjIndefSg1:^+cConjIndefSg1^§sj§§igea§k     #;
+ConjIndefSg2:^+cConjIndefSg2^§sj§§igeaa§l    #;
+ConjIndefSg2:^+cConjIndefSg2^§sj§           #;
+ConjIndefSg3:^+cConjIndefSg3^§sj§§igeo§n     #;
+ConjIndefPl1:^+cConjIndefPl1^§sj§§igeu§nk    #;
+ConjIndefPl2:^+cConjIndefPl2^§sj§§igea§t§igeo§k       #;
+ConjIndefPl3:^+cConjIndefPl3^§sj§§igea§n§igea§k      #;
+ConjDefSg1:^+cConjDefSg1^§sj§§igea§m         #;
+ConjDefSg2:^+cConjDefSg2^§sj§§igea§d         #;
+ConjDefSg2:^+cConjDefSg2^§sj§d              #;
+ConjDefSg3:^+cConjDefSg3^§sj§§igea§          #;
+ConjDefPl1:^+cConjDefPl1^§sj§§igeu§k         #;
+ConjDefPl2:^+cConjDefPl2^§sj§§igeaa§t§igeo§k     #;
+ConjDefPl3:^+cConjDefSg1^§sj§§igeaa§k            #;
+PastIndefSg1:^+cPIndefSg1^t§AA§m            #;    ! tem/tam
+PastIndefSg2:^+cPIndefSg2^t§igeaa§l         #;    ! tál/tél
+PastIndefSg3:^+cPIndefSg3^§igetattet§t      #;    ! t
+PastIndefPl1:^+cPIndefPl1^t§igeu§nk         #;    ! tünk/tunk
+PastIndefPl2:^+cPIndefPl2^t§igea§t§igeo2§k  #;    ! tetek/tatok
+PastIndefPl3:^+cPIndefPl3^t§igea§k          #;    ! tek/tak
+PastDefSg1:^+cPDefSg1^t§igea§m              #;    ! tem/tam
+PastDefSg2:^+cPDefSg2^t§igea§d              #;    ! tad/ted
+PastDefSg3:^+cPDefSg3^t§igea§               #;    ! ta/te
+PastDefPl1:^+cPDefPl1^t§igeu§k              #;    ! tuk/tük
+PastDefPl2:^+cPDefPl2^t§igeaa§t§igeo2§k     #;    ! tátok/tétek
+PastDefPl3:^+cPDefPl3^t§igeaa§k             #;    ! ták/ték
+CondIndefSg1:^+cCIndefSg1^nék               #;    ! nék
+CondIndefSg2:^+cCIndefSg2^n§igeaa§l         #;    ! nál/nél
+CondIndefSg3:^+cCIndefSg3^n§igea§           #;    ! na/ne
+CondIndefPl1:^+cCIndefPl1^n§igeaa§nk            #;    ! nánk/nénk
+CondIndefPl2:^+cCIndefPl2^n§igeaa§t§igeo§k      #;    ! nátok/nétek
+CondIndefPl3:^+cCIndefPl3^n§igeaa§n§igea§k      #;    ! nának/nének
+CondDefSg1:^+cCDefSg1^n§igeaa§m                 #;    ! nám/ném
+CondDefSg2:^+cCDefSg2^n§igeaa§d                 #;    ! nád/néd
+CondDefSg3:^+cCDefSg3^n§igeaa§                  #;    ! ná/né
+CondDefPl1:^+cCDefPl1^n§igeaa§nk                #;    ! nánk/nénk
+CondDefPl2:^+cCDefPl2^n§igeaa§t§igeo§k          #;    ! nátok/nétek
+CondDefPl3:^+cCDefPl3^n§igeaa§k                 #;    ! nák/nék

A <..> közé zárt rendszeres kifejezés (regular expression) minden szót engedélyez, amely egy magyar szóhoz hasonlóan néz ki, azaz legalább egy magánhangzó van benne, és sehol nincs háromnál több magánhangzó illetve négynél több mássalhangzó egymás mellett benne. Ez azért szükséges, mert a magyar nyelv a tárgyak viszonyát ragozással fejezi ki, és tetszőleges, azaz a szótárban nem szereplő szavak ragozása is szükséges, például idegen városok folyók, személyek neve, stb....

foma fájl:

### enhu2.foma ###

# Vowels
define Vowel [ a | á | e | é | i | í | o |ó | u | ú | ü | ű | ö | ő ];
define BackVowel [ a | á | o | ó | u | ú ];
define FrontUnroundedVowel [ e | é | i | í | ü | ű ];
define Front1UnroundedVowel [ e | é | i | í ];
define FrontRoundedVowel [ ö | ő ];
define Front1RoundedVowel [ ö | ő | ü | ű ];
define FrontVowel [ e | é | i | í | ü | ű | ö | ő ];
define PlosivCons [ b | d | g | h | p | t ];
define NonPlosivCons [ c | j | l | r | s | v | z ];
define OppNonPlosivCons [ b | d | f | g | h | k | m | n | p | q | t | w | x | y ];

# Consonant doubling: 1-letter consonant doubled before -ing/-ed (beg/begging)
define Etoee e -> é ||  _ "^"  ?*  [ "+" {cAbl} | "+" {cAcc} | "+" {cAde} | "+" {cAll} | "+" {cCau} | "+" {cDat} | "+" {cDel} | "+" {cEla} | "+" {cFac} | "+" {cIll} | "+" {cIne} | "+" {cIns} | "+" {cSub} | "+" {cSup} | "+" {cTer} | "+" {cFam} | "+" {cDis} | "+" {cEss} | "+" {cSoc}  | "+" {cPosss1}  | "+" {cPosss2}  | "+" {cPosss3}  | "+" {cPossp1}  | "+" {cPossp2}  | "+" {cPossp3} | "+" {cPosss1p} | "+" {cPosss2p} | "+" {cPosss3p} | "+" {cPossp1p} | "+" {cPossp2p} | "+" {cPossp3p} | "+" {cPlur} | "+" {cGen} | "+" {cGenpl}] ?* ; # \0: not zero kor & ként excluded
define Atoaa a -> á ||  _ "^"  ?*  [ "+" {cAbl} | "+" {cAcc} | "+" {cAde} | "+" {cAll} | "+" {cCau} | "+" {cDat} | "+" {cDel} | "+" {cEla} | "+" {cFac} | "+" {cIll} | "+" {cIne} | "+" {cIns} | "+" {cSub} | "+" {cSup} | "+" {cTer} | "+" {cFam} | "+" {cDis} | "+" {cEss} | "+" {cSoc}  | "+" {cPosss1}  | "+" {cPosss2}  | "+" {cPosss3}  | "+" {cPossp1}  | "+" {cPossp2}  | "+" {cPossp3} | "+" {cPosss1p} | "+" {cPosss2p} | "+" {cPosss3p} | "+" {cPossp1p} | "+" {cPossp2p} | "+" {cPossp3p} | "+" {cPlur} | "+" {cGen} | "+" {cGenpl}] ?* ; # \0: not zero kor & ként excluded

define HarmRuleO §oeoez1§ -> 0 // .#. \"^"+ Vowel %^ ?*  _  .o.
                 §oeoez1§ -> o // .#. \"^"+ BackVowel \Vowel+ "^" ?*  _ ,,
                 §oeoez1§ -> e // .#. \"^"+ FrontUnroundedVowel \Vowel+ "^" ?* _ ,,
                 §oeoez1§ -> ö // .#. \"^"+ FrontRoundedVowel \Vowel+  "^" ?* _ ;
define HarmRuleC §AE1§ -> á // .#. \"^"+ BackVowel \Vowel* "^" ?* _ "^"  ?*  [ "+" {cAbl} | "+" {cAcc} | "+" {cAde} | "+" {cAll} | "+" {cCau} | "+" {cDat} | "+" {cDel} | "+" {cEla} | "+" {cFac} | "+" {cIll} | "+" {cIne} | "+" {cIns} | "+" {cSub} | "+" {cSup} | "+" {cTer} | "+" {cFam} | "+" {cDis} | "+" {cEss} | "+" {cSoc}  | "+" {cPosss1}  | "+" {cPosss2}  | "+" {cPosss3}  | "+" {cPossp1}  | "+" {cPossp2}  | "+" {cPossp3} | "+" {cPosss1p} | "+" {cPosss2p} | "+" {cPosss3p} | "+" {cPossp1p} | "+" {cPossp2p} | "+" {cPossp3p} | "+" {cPlur} | "+" {cGen} | "+" {cGenpl}] ?* .o.
                 §AE1§ -> é // .#. \"^"+ FrontVowel \Vowel* "^" ?* _ "^"  ?*  [ "+" {cAbl} | "+" {cAcc} | "+" {cAde} | "+" {cAll} | "+" {cCau} | "+" {cDat} | "+" {cDel} | "+" {cEla} | "+" {cFac} | "+" {cIll} | "+" {cIne} | "+" {cIns} | "+" {cSub} | "+" {cSup} | "+" {cTer} | "+" {cFam} | "+" {cDis} | "+" {cEss} | "+" {cSoc}  | "+" {cPosss1}  | "+" {cPosss2}  | "+" {cPosss3}  | "+" {cPossp1}  | "+" {cPossp2}  | "+" {cPossp3} | "+" {cPosss1p} | "+" {cPosss2p} | "+" {cPosss3p} | "+" {cPossp1p} | "+" {cPossp2p} | "+" {cPossp3p} | "+" {cPlur} | "+" {cGen} | "+" {cGenpl}] ?* .o.
                 §AE1§ -> a // .#. \"^"+ BackVowel \Vowel* "^" ?*  _ %^ [ 0 ] .o. 
                 §AE1§ -> e // .#. \"^"+ FrontVowel \Vowel* "^" ?* _ %^ [ 0 ] ;
define HarmRuleJ §J§ -> j || .#. \"^"+ Vowel %^ ?* _ .o.
                 §J§ -> j || .#. \"^"+ OppNonPlosivCons  %^ ?* _ .o.
                 §J§ -> 0 // .#. \"^"+ PlosivCons "^" ?*  _ ;
define HarmRuleU §oooe§ -> ó // .#. \"^"+ BackVowel \Vowel* "^" ?* _ ,,
                 §oooe§ -> ő // .#. \"^"+ FrontVowel \Vowel* "^" ?* _ ;
define HarmRuleZ §uue§ -> u // .#. \"^"+ BackVowel \Vowel* "^" ?* _ ,,
                 §uue§ -> ü // .#. \"^"+ FrontVowel \Vowel* "^" ?* _ ;
define HarmRuleAAA §AAA§ -> á // .#. \"^"+ BackVowel \Vowel* "^" ?* _ ,,
                   §AAA§ -> é // .#. \"^"+ FrontVowel \Vowel* "^" ?* _ ;
define HarmRuleAA §AA§ -> a // .#. \"^"+ BackVowel \Vowel* "^" ?* _ ,,
                  §AA§ -> e // .#. \"^"+ FrontVowel \Vowel* "^" ?* _ ;
define HarmRuleVV §VV§ -> v || Vowel %^  _ ,,
                  §VV§ -> b || b %^ _ ,,
                  §VV§ -> c || c %^ _ ,,
                  §VV§ -> d || d %^ _ ,,
                  §VV§ -> f || f %^ _ ,,
                  §VV§ -> g || g %^ _ ,,
                  §VV§ -> h || h %^ _ ,,
                  §VV§ -> j || j %^ _ ,,
                  §VV§ -> k || k %^ _ ,,
                  §VV§ -> l || l %^ _ ,,
                  §VV§ -> m || m %^ _ ,,
                  §VV§ -> n || n %^ _ ,,
                  §VV§ -> p || p %^ _ ,,
                  §VV§ -> q || q %^ _ ,,
                  §VV§ -> r || r %^ _ ,,
                  §VV§ -> s || s %^ _ ,,
                  §VV§ -> t || t %^ _ ,,
                  §VV§ -> v || v %^ _ ,,
                  §VV§ -> z || z %^ _ ;
define HarmRuleG §oeoez2§ -> 0 // Vowel %^ _  .o.
                 §oeoez2§ -> a // .#. \"^"+ BackVowel \Vowel* "^" ?* [ \"^" ] ?* _ .o.
                 §oeoez2§ -> o // .#. \"^"+ BackVowel \Vowel* "^" [ \"^" ]* _ ,,
                 §oeoez2§ -> e // .#. \"^"+ FrontUnroundedVowel \Vowel* "^" ?* _ ,,
                 §oeoez2§ -> ö // .#. \"^"+ FrontRoundedVowel \Vowel*  "^" ?* _ ;
define HarmRuleI §oeoe§ -> o // .#. \"^"+ BackVowel \Vowel* "^" ?* _ .o.
                 §oeoe§ -> e //  Front1UnroundedVowel \Vowel* "^" [ \"^" & \Vowel ]+ _ .o.
                 §oeoe§ -> ö //  Front1RoundedVowel \Vowel* "^" [ \"^" & \Vowel ]+ _ ;
define HarmRuleonen §oeoez§ -> 0 //   Vowel %^ _ .o.
                 §oeoez§ -> o // .#. \"^"+ BackVowel \Vowel* "^" ?* _ .o.
                 §oeoez§ -> e //  Front1UnroundedVowel \Vowel* "^" [ \"^" & \Vowel ]* _ .o.
                 §oeoez§ -> ö //  Front1RoundedVowel \Vowel* "^" [ \"^" & \Vowel ]* _ ;
define HarmRuleL §ooez3§ -> 0 // .#. \"^"+ Vowel %^ ?* _  .o.
                 §ooez3§ -> o // .#. \"^"+ BackVowel \Vowel+ "^" ?* _ ,,
                 §ooez3§ -> e // .#. \"^"+ FrontUnroundedVowel \Vowel+ "^" ?* _ ,,
                 §ooez3§ -> ö // .#. \"^"+ FrontRoundedVowel \Vowel+  "^" ?* _ ;
define HarmRuleN §EOA§ -> 0 // .#. \"^"+ Vowel %^  ?* _  .o.
                 §EOA§ -> o // .#. \"^"+ BackVowel \Vowel* "^" ?* _ ,,
                 §EOA§ -> e // .#. \"^"+ FrontUnroundedVowel \Vowel* "^" ?* _ ,,
                 §EOA§ -> ö // .#. \"^"+ FrontRoundedVowel \Vowel*  "^" ?* _ ;
define HarmRuleH §UUE§ -> 0 // .#. \"^"+ Vowel %^ ?* _  .o.
                 §UUE§ -> u // .#. \"^"+ BackVowel \Vowel+  "^" ?* _ ,,
                 §UUE§ -> ü // .#. \"^"+ FrontVowel \Vowel+ "^" ?* _ ;
define HarmRuleK §OEOE1§ -> 0 // .#. \"^"+ Vowel %^  ?* _  .o.
                 §OEOE1§ -> o // .#. \"^"+ BackVowel \Vowel*  "^" ?* _ ,,
                 §OEOE1§ -> e // .#. \"^"+ FrontUnroundedVowel \Vowel* "^" ?* _ ,,
                 §OEOE1§ -> ö // .#. \"^"+ FrontRoundedVowel \Vowel*  "^" ?* _ ;
define HarmRuleQ §OEOE§ -> o // .#. \"^"+ BackVowel \Vowel*  "^" ?* _ ,,
                 §OEOE§ -> e // .#. \"^"+ FrontUnroundedVowel \Vowel* "^" ?* _ ,,
                 §OEOE§ -> ö // .#. \"^"+ FrontRoundedVowel \Vowel*  "^" ?* _ ;
define HarmRuleR §UUE1§ -> u // .#. \"^"+ BackVowel \Vowel*  "^" ?* _ ,,
                 §UUE1§ -> ü // .#. \"^"+ FrontVowel \Vowel* "^" ?* _ ;
define HarmRuleS §JP§ -> j || .#. \"^"+ \Vowel %^  ?* _ .o.
                 §JP§ -> 0 // .#. \"^"+ Vowel+ %^ ?* _ ;
define HarmRuleT §AE§ -> 0 || .#. \"^"+ Vowel %^ ?* _ .o.
                 §AE§ -> a // .#. \"^"+ BackVowel \Vowel+  "^" ?* _ ,,
                 §AE§ -> e // .#. \"^"+ FrontVowel \Vowel+ "^" ?* _ ;
define HarmRuleW §OEOE2§ -> o // .#. \"^"+ BackVowel \Vowel*  "^" ?* _ ,,
                 §OEOE2§ -> e // .#. \"^"+ FrontVowel \Vowel* "^" ?* _ ;


# Cleanup: remove morpheme boundaries
define Cleanup      "^"        -> 0;
define CleanupDis  "^" "+" {cDis}  -> 0;
define CleanupEss  "^" "+" {cEss}  -> 0;
define CleanupSoc  "^" "+" {cSoc}  -> 0;
define CleanupTem  "^" "+" {cTem}  -> 0;
define CleanupPosss1  "^" "+" {cPosss1}  -> 0;
define CleanupPosss2  "^" "+" {cPosss2}  -> 0;
define CleanupPosss3  "^" "+" {cPosss3}  -> 0;
define CleanupPossp1  "^" "+" {cPossp1}  -> 0;
define CleanupPossp2  "^" "+" {cPossp2}  -> 0;
define CleanupPossp3  "^" "+" {cPossp3}  -> 0;
define CleanupPosss1p  "^" "+" {cPosss1p}  -> 0;
define CleanupPosss2p  "^" "+" {cPosss2p}  -> 0;
define CleanupPosss3p  "^" "+" {cPosss3p}  -> 0;
define CleanupPossp1p  "^" "+" {cPossp1p}  -> 0;
define CleanupPossp2p  "^" "+" {cPossp2p}  -> 0;
define CleanupPossp3p  "^" "+" {cPossp3p}  -> 0;
define CleanupPlur    "^" "+" {cPlur}  -> 0;
define CleanupFam     "^" "+" {cFam}  -> 0;
define CleanupGen     "^" "+" {cGen}  -> 0;
define CleanupGenpl   "^" "+" {cGenpl} -> 0;
define CleanupAbl     "^" "+" {cAbl}  -> 0;
define CleanupAcc     "^" "+" {cAcc}  -> 0;
define CleanupAde     "^" "+" {cAde}  -> 0;
define CleanupAll     "^" "+" {cAll}  -> 0;
define CleanupCau     "^" "+" {cCau}  -> 0;
define CleanupDat     "^" "+" {cDat}  -> 0;
define CleanupDel     "^" "+" {cDel}  -> 0;
define CleanupEla     "^" "+" {cEla}  -> 0;
define CleanupFac     "^" "+" {cFac}  -> 0;
define CleanupFor     "^" "+" {cFor}  -> 0;
define CleanupIll     "^" "+" {cIll}  -> 0;
define CleanupIne     "^" "+" {cIne}  -> 0;
define CleanupIns     "^" "+" {cIns}  -> 0;
define CleanupNom     "^" "+" {cNom}  -> 0;
define CleanupSub     "^" "+" {cSub}  -> 0;
define CleanupSup     "^" "+" {cSup}  -> 0;
define CleanupTer     "^" "+" {cTer}  -> 0;

read lexc enhu2.lexc
define Lexicon

define Grammar Lexicon           .o. 
               Etoee             .o. 
               Atoaa             .o. 
               HarmRuleC         .o. 
               CleanupDis        .o.
               CleanupEss        .o.
               CleanupSoc        .o.
               CleanupTem        .o.
               CleanupPosss1p    .o.
               CleanupPosss2p    .o.
               CleanupPosss3p    .o.
               CleanupPossp1p    .o.
               CleanupPossp2p    .o.
               CleanupPossp3p    .o.
               CleanupPosss1     .o.
               CleanupPosss2     .o.
               CleanupPosss3     .o.
               CleanupPossp1     .o.
               CleanupPossp2     .o.
               CleanupPossp3     .o.
               CleanupPlur       .o.
               CleanupFam        .o.
               CleanupGenpl      .o.
               CleanupGen        .o.
               CleanupAbl        .o.
               CleanupAcc        .o.
               CleanupAde        .o.
               CleanupAll        .o.
               CleanupCau        .o.
               CleanupDat        .o.
               CleanupDel        .o.
               CleanupEla        .o.
               CleanupFac        .o.
               CleanupFor        .o.
               CleanupIll        .o.
               CleanupIne        .o.
               CleanupIns        .o.
               CleanupNom        .o.
               CleanupSub        .o.
               CleanupSup        .o.
               CleanupTer        .o.
               HarmRuleO         .o. 
               HarmRuleJ         .o. 
               HarmRuleZ         .o. 
               HarmRuleR         .o. 
               HarmRuleL         .o. 
               HarmRuleN         .o. 
               HarmRuleH         .o. 
               HarmRuleK         .o. 
               HarmRuleQ         .o. 
               HarmRuleS         .o. 
               HarmRuleT         .o. 
               HarmRuleW         .o. 
               HarmRuleG         .o. 
               HarmRuleU         .o. 
               HarmRuleAAA       .o. 
               HarmRuleI         .o. 
               HarmRuleVV        .o. 
               HarmRuleAA        .o. 
               HarmRuleonen      .o. 
               Cleanup;


regex Grammar;

Több fájl (lexc/foma pár) összekapcsolása

Ha több fájlt akarunk összekapcsolni, akkor az egyes foma fájlok végén írjuk be:

read regex Grammar2;
save stack filename.fst

Ez kiirja a transzduktort egy fájlba.

A transzduktor fájlok összefűzése az osszefuz.foma fájlban történik:

read regex @"huna1.fst" | @"huna2.fst" ;


Tesztelés:

foma -l osszefuz.foma

>lower-words
szó1
..
szón
>up
>szó1ragokkal
szó1+N+...
>szó2ragokkal
szó2+N+...
>ctrl-D
>down
>szó2+N+PL+Gen+...
szó2ragokkal
>szó1+N+PL+Gen+...
szó1ragokkal
> Ctrl-d