Qo‘shimchalar turlari va ularni qay tartibda kelishi \Affixes*.qoida fayllarida, so‘zlarning ro‘yxati esa \Dictionaries*.txt fayllarda beriladi. Hunspell lug‘atlarini hosil qilish uchun:
uzhungen.exe -s .\Affixes\*.qoida -d .\Dictionaries\*.txt
Natijada Generated papkasida uz.aff va uz.dic fayllarini hosil qiladi.
Qo‘shimchalar to‘plamini berish uchun SFX bloki ishlatiladi. Bitta guruhga oid qo‘shimchalar (masalan, kelishik, egalik qo‘shimchalari) bir blok ostida kiritiladi. Sintaksis:
SFX <Qo‘SHIMCHA_GURUHI>
<Qo‘SHIMCHA_NOMI> = "<Qo‘SHIMCHA>" [ENDSWITH "<REGEX_IFODA>" [STRIP [<QIRQILADIGAN_BELGI>]]]
...
END SFX
Sintaksisda berilgan to‘rtburchak qavs ichidagi buyruqlar majburiy emas, tushirib qoldirilishi mumkin.
<Qo‘SHIMCHA_GURUHI> - Qo‘shimchalar guruhining nomi, masalan EGALIK. TAG blokida qo‘shimchalar ketma-ketliklarni berishda ishlatiladi.
<Qo‘SHIMCHA_NOMI> - Qo‘shimchaning nomi, masalan 1-SHAXS BIRLIK.
<Qo‘SHIMCHA> - Qo‘shimchaning o‘zi, masalan "ning".
ENDSWITH "<REGEX_IFODA>" - Bu qo‘shimchalar guruhidan oldingan qo‘shimcha yoki o‘zak so‘zning qaysi harf bilan tugashini tekshirish buyrug‘i.
<REGEX_IFODA> - soddalashtirilgan qolipli ifoda. To‘plam ([]), ihtiyoriy belgi (.) va inkor buyruqlaridan (^) foydalanish mumkin xolos. Inkor faqat to‘plamni inkor etadi va [^abs] shaklida beriladi. Ya’ni [^abs] bu oxirgi harf "a" ham emas, "b" ham emas, "s" ham emas bo‘lsa degan shartni berish uchun ishlaydi.
STRIP <QIRQILADIGAN_BELGI> - So‘z oxiridan qirqiladigan harf(lar)ni berish buyrug‘i. Agar qirqiladigan belgi berilmasa harflar avtomat qirqiladi (qolipli ifodaga mos tarzda)
Misol:
SFX EGALIK
[ENDSWITH "q" STRIP] # Agar bundan oldingi kelgan qo‘shimcha yoki o‘zak so‘z "q" harfi bilan tugasa (ENDSWITH "q"), "q" ni tashlab yubor (STRIP)
1SHB = "g‘im"
1SHK = "g‘imiz"
2SHB = "g‘ing"
2SHK = "g‘ingiz"
3SHB = "g‘i"
[ENDSWITH "[ai]"] # Agar bundan oldin kelgan qo‘shimcha/o‘zak so‘z "a" yoki "i" harflaridan biri bilan tugasa
1SHB = "m"
1SHK = "miz"
2SHB = "ng"
2SHK = "ngiz"
3SHB = "si"
END SFX
Bir qolipga tushmaydigan, harf almashishiga uchraydigan istisno holatlarni quyidagicha berish mumkin:
SFX EGALIK
[ENDSWITH "q" STRIP] # Agar bundan oldingi kelgan qo‘shimcha yoki o‘zak so‘z "q" harfi bilan tugasa (ENDSWITH "q"), "q" ni tashlab yubor (STRIP)
1SHB = "g‘im"
1SHK = "g‘imiz"
2SHB = "g‘ing"
2SHK = "g‘ingiz"
3SHB = "g‘i"
[ENDSWITH "[ai]"] # Agar bundan oldin kelgan qo‘shimcha/o‘zak so‘z "a" yoki "i" harflaridan biri bilan tugasa
1SHB = "m"
1SHK = "miz"
2SHB = "ng"
2SHK = "ngiz"
3SHB = "si"
[CLASS .IL ONLYROOT]
[ENDSWITH "il" STRIP] # singil => singlim, ko'ngil => ko'ngli
1SHB = "lim"
1SHK = "limiz"
2SHB = "ling"
2SHK = "lingiz"
3SHB = "li"
END SFX
Bunda EGALIK.IL nomli alohida sinf hosil bo‘ladi. Chunki "singil" so‘zi kabi ba‘zi so‘zlar umumiy qoidalarga tushmaydi, harf almashishiga uchraydi. Hunspell da esa qolipli ifodalar va bunday holatlarni boshqarish imkoniyati cheklangan. Ushbu EGALIK to‘plami qaysidir TAG da uchrasa, o‘sha tegning alohida sinfi sifatida yaratiladi va lug‘atda bunday so‘zlarni quyidagicha ko‘rsatish mumkin:
kitob/OT
singil/OT.IL
Qo‘shimchalar ketma-ketligini berish uchun TAG bloki ishlatiladi. Bitta so‘z turkumiga oid qoidalarni bitta shunda TAG bloki ostida yoziladi. Sintaksis:
TAG <TURKUM_NOMI>
<QOIDA_NOMI> = <Qo‘SHIMCHA_GURUHI_1> + <Qo‘SHIMCHA_GURUHI_2> + ... + <Qo‘SHIMCHA_GURUHI_N>
END TAG
<QOIDA_NOMI> - Morfologik ma’lumot sifatida ishlatish mumkin.
<Qo‘SHIMCHA_GURUHI_1>, <Qo‘SHIMCHA_GURUHI_2>, <Qo‘SHIMCHA_GURUHI_N> - Qo‘shimchalar guruhi nomlari. Bu guruhlar qaysi ketma-ketlikda kelishiga qarab qo‘shimchalar shunday tarzda qo‘shiladi. Qo‘shish ifodasida to‘rtburchak va shaklli qavslardan foydalanish mumkin. To‘rtburchak qavs ichida keladigan qo‘shimchalar guruhlari majburiy bo‘lmagan, tushib qolishi mumkin bo‘lgan qo‘shimchalarni, shaklli qavs ichida esa majburiy qo‘shimchalarni yozish mumkin.
Misol:
TAG OT
O1 = EGALIK + [KELISHIK, YUKLAMA] # EGALIK dan keyin yo KELISHIK yoki YUKLAMA kelishi mumkin, yoki ikkalasi ham kelmasligi mumkin ([] ichida)
O2 = {KO‘PLIK, KELISHIK} + [YUKLAMA] # Ko‘PLIK yoki KELISHIK dan biridan ({} ichida) keyin YUKLAMA kelishi mumkin, lekin majburiy emas.
END TAG
Yuqoridagi ikkita qoida quyidagicha qo'shimchalar ketma-ketligini hosil qiladi:
# O1 uchun
EGALIK
EGALIK + KELISHIK
EGALIK + YUKLAMA
# O2 uchun
KO‘PLIK
KO‘PLIK + YUKLAMA
KELISHIK
KELISHIK + YUKLAMA
Ichida hech qanday ketma-ketlik yozilmagan teg ham to‘g‘ri hisoblanadi. Bunday teg bilan belgilangan so‘zlarda bu teg morfologik ma’lumot sifatida ishlatilishi mumkin.
Fayl ichida izohlardan foydalanish mumkin. Izoh # belgisi bilan boshlanadi va qayerda ushbu qo‘yilishidan qat’i nazar qator oxirigacha amal qiladi. Ya’ni # belgisidan to shu qator oxirigacha izoh hisoblanadi.
So‘zlar har bir qatorga alohida qilib kiritiladi. So‘zdan keyin "/" belgisi va undan keyin qoida faylidagi biror TAG nomi berilishi mumkin. Agar bir so‘zga bir nechta TAG berilishi kerak bo‘lsa, teglar "/" belgisi bilan ajratib yoziladi. Yoki so‘zga hech qanday teg bermaslik uchun so‘zdan keyin hech narsa yozilmaydi.
Misol:
olma/OT
kitob/OT
yaxshi/OT/SIFAT
va
Yuqoridagi misoldagi holatga ko‘ra "olma" so‘ziga OT tegi ostida berilgan barcha qo‘shimchalar ketma-ketligi to‘g‘ri hisoblanadi va AFF faylda ham shunga mos ravishda flaglar hosil qilinadi. So‘zlar kichik harflar bilan yoziladi. Agar so‘zda katta harflar ham mavjud bo‘lsa (masalan birinchi harf) ushbu register Hunspell orqali tekshirilganda ham huddi shunday holda yozilsagina to‘g‘ri hisoblanadi. Bu asosan atoqli nomlarni yozishda ishlatiladi. Masalan, "o‘zbekiston" deb yozilgan so‘z "o‘zbekiston" shaklida yozilganda Hunspell uni noto‘g‘ri hisoblaydi.