Yaranma tarixi:
Hecalama
Azərbaycan mətnini hecalara ayırmaq üçün müəyyən qaydalar var. Bununla yanaşı bütün dillərdə olduğu kimi burada da qaydalardan istisnalar mövcuddur. Bu günə məlum olan hecalama qaydaları aşağıdakılardır. Əvvəlcə onu deyək ki, sözlərdə olan saitlərin sayı qədər heca var. Sözlər sətirdən sətrə hecalara bölünərək keçirilir.
- Samit səs özündən sonrakı saitin yaratdiği hecaya daxil olur (kü-lək, da-nı-şiq)
- Saitlər arasında iki samit varsa 1-ci samit əvvəlki hecaya, 2-ci samit sonrakı hecaya daxil olur (mək-təb, ki-tab-lar)
- Qoşa samitli sözlərdə samitlərin hər biri ayrı-ayrı hecaya aid olur. Bu əvvəlki qaydadan alınır (am-ma, mü-rək-kəb, qül-lə)
- Kök və şəkilçi sərhəddində 3 samit yanaşı gələrsə, 1-ci və 2-ci samit əvvəlki hecaya, 3-cü samit sonrakına aid edilir (dinc-lik, pə-ləng-dən)
- Söz kökündə 2 sait arasında 3 samit gələrsə, 1-ci əvvəlki hecaya, 2-ci və 3-cü samit sonrakına aid ediləcək (sen-tyabr, ak-tyor, no-men-kla-tu-ra, kon-kret). 4 qoşa samit isə həmişə ortadan bölünür (eks-press, eks-tra-sens).
- Qoşa sait varsa aradan bölünür (sa-at, mü-əl-lim)
- Tək sait sözün əvvəlində və ya axırında gələrsə sətrin sonunda saxlanılmır və yeni sətrə keçirilmir (a-i-lə sətirdən sətrə ai-lə kimi keçirilir, əm-tə-ə sətirdən sətrə əm-təə kimi keçirilir)
- Qısaldılmış soyad və adlar sətrin sonunda saxlanılmır (M.//S.//Ordubadı, Ə.//Vahid)
- Rəqəm və hərf sərhəddində bölgü olmur (15//kq, 100//kv.m)
- Abreviaturalar bölünmür (BDU, BİKİ, BaŞEŞ, AzərTAc)
- Mürəkkəb sözlərin tərkib hissələri ayrı-ayrılıqda hecalara bölünür (Məm-məd-ə-li, kək-lik-o-tu, əl-üz-yu-yan)
Hecalama əməliyyatını Sonlu Deterministik Avtomat vasitəsilə həyata keçirəcəyik. İlkin iterasiyada yuxarıdakı qaydalardan bəzilərini nəzərə almayacağıq. Sonra isə qaydaları əlavə edərək avtomatı mürəkkəbləşdirəcəyik. İlkin variantda mətni hecalara bölən (sətirdən sətrə keçirən yox) avtomat yaradacağıq.
Qurduğumuz avtomat 1, 2, 3, 4, 6, 8, 9 şərtlərini ödəyəcək. 4 və 5 halını birləşdirib 4 kimi baxacağıq. Növbəti iterasiyada isə bu halları ayri-ayriliqda avtomata əlavə edəcəyik. 7 və 10 halını sonradan 3-cü iterasiyada əlavə edəcəyik. 11 halına isə ümumiyyətlə baxılmayacaq. Bu qayda lüğətli axtarış tələb etdiyindən, lüğətin mövcudluğu vacibdir. Hərçənd 4 və 5 halları da lüğət tələb edir, biz onları başqa bir metodla bir-birindən ayıracağıq. Bu barədə bir az sonra. İndi isə qayıdaq ilkin avtomatın qurulmasına.
Mətni avtomata göndərməzdən əvvəl aşağıdakı şəklə salırıq:
- hər bir samiti $m$, saiti isə $s$ ilə əvəz edirik
- mətnin sonuna boş simvol əlavə edirik. Bu avtomat üçün sonluq komandası olacaq. Boş simvolu $0$ (null) ilə işarə edək
- bütün digər simvolları (defis (-), probel ( ) və bütün işarələr( . , ; : ? ’ ” və s.) daxil olmaqla) $u$ ilə işarə edəcəyik
Bir neçə sözün üzərində bu şəkildəyişməni müşahidə edək:
alma → $smms0$
alış-veriş → $smsmumsmsm0$
müəllim → $mssmmsm0$
Bu şəkildə mətni avtomatın girişinə verib çıxışda hecalanmış mətn almalıyıq.
alma → $smms0$ → $sm-ms$ → al-ma
Əslində bu cür əvəzləməni nəzəri cəhətdən edirik. Həqiqətdə isə yazılacaq proqram birbaşa mətn üzərində işləyib hər bir hərfin sait, samit, və ya digər simvol olmasında asılı olaraq avtomatda keçid edəcək və mətni hecalara böləcək.
Sonlu Deterministik Avtomat
Quracağımız avtomat sonlu deterministik olması ilə yanaşı yaddaşlı avtomat olacaq. Normalda avtomatı $(Q, \Sigma, \delta, q_0, F)$ beşliyi xarakterizə edir. Burada $Q$ – bütün mümkün vəziyyətlər çoxluğu, $\Sigma$ – əlifba, $\delta$ – çevirmə funksiyası, $q_0$ – başlanğıc vəziyyət $(q_0 \in Q)$, $F$ – son vəziyyətlər çoxluğudur $(F \subset Q)$.
Bizim halda isə əlavə olaraq avtomatın çıxış əlifbası və yaddaşı var. Ona görə bizim avtomat belə olacaq.
$$(Q, V_1, V_2, q_0, f, \delta, \alpha, M)$$
$Q$ – vəziyyətlər çoxluğudur $Q=\{q_0, q_s, q_m, f\}$.
$V_1= \{s, m, u, –, 0\}$ giriş əlifbasıdır. $m$-samit, $s$-sait səslərdir, $u$-digər simvoldur, $0$-girişə verilən simvolların sonu deməkdir. Defis (–) girişdə $u$ ilə eyni cür emal edilir.
$V_2= \{s, m, u, –\}$ - çıxış əlifbasıdır.
$q_0$– başlanğıc vəziyyətdir, $q_s$– sait nəticəsində keçilən, $q_m$ – samit nəticəsində keçilən vəziyyətdir.
$f$ – son vəziyyətdir. Bizim halda 1 son vəziyyət var.
$M$ – yaddaşdır. Yaddaşa yalnız samitlər $(m)$ yazılır, $M = \{m\}$.
$\alpha$ – funksiya 3 iş görür. Verilən simvolu çap edir, yaddaşa yazır, və ya yaddaşı çap edib silir.
$\delta$ – çevirmə funksiyasıdır. $\delta(q_i, t) \rightarrow (q_j, \alpha(t))$. Avtomat $q_i$ vəziyyətində olarkən $t$ simvolu daxil olarsa $q_j$ vəziyyətinə keçir və $t$ simvoluna $\alpha$ əməliyyatını tətbiq edir.
Avtomatın qurulması
İndi isə nəhayət qaydalara uyğun olaraq avtomatın qurulmasına keçək. İfadələri sadələşdirmək üçün aşağıdakı işarələmələri qəbul edəcəyik.
$()$ – çap əməliyyatı deməkdir, $[m]$ – yadda saxlamaqdır, $([m])$ – yaddaşı çapa verib pozmaqdır.
$([m–])$ – yaddaşda olan sımvolların sonuncusundan (sonuncu samitdən) əvvəl defis (–) yazıb çap etmək və yaddaşı boşaltmaqdır. Əgər yaddaşda cəmi bir samit varsa, defis işarəsi bu samitdən əvvəl yazılır, yəni bir samit üçün $[m–] = –m$. Məsələn, $([m-]s)$ ifadəsi yaddaşdakı samitlərin sonuncusundan əvvəl defis işarəsi əlavə edib çapa göndərir, sonuna da sait əlavə edir. Yaddaşı da pozur.
$(–s)$ əməliyyatı isə çapa defis yazıb saiti də onun arxasınca çapa verir.
Əvvəldə avtomat $q_0$ vəziyyətində olur.
$q_0 \overset{0}\longrightarrow f$ əgər mətndə boş simvol olarsa avtomat son vəziyyətə keçir.
$q_0 \overset{m(m)}\longrightarrow q_0$ əgər mətnin və ya sözün əvvəlində samit gələrsə, avtomat bu samiti olduğu kimi çıxışa verir. Avtomatın vəziyyəti dəyişmir. Nə qədər ki, sait oxunmayıb heç bir hecaya bölmə əməliyyatı ola bilməz. $m(m)$ əməliyyatı samit oxuyub onu çapa vermək deməkdir. Mötərizənin xaricindəki simvol oxunan, daxilindəki isə çapa verilən deməkdir.
$q_0 \overset{u(u)}\longrightarrow q_0$ əgər sait və samitdən digər simvol oxunarsa, o da olduğu kimi çıxışa verilir və vəziyyət dəyişmir. Çünki hərfdən başqa simvollar hamısı yeni sözün başlanmasına əsas verir. Defis (–) işarəsi girişdə naməlum simvol $(u)$ ilə eyni sayılır.
$q_0 \overset{s(s)}\longrightarrow q_s$ əgər sait oxunarsa, artıq avtomatın vəziyyəti dəyişməlidir. Keçdiyi vəziyyət isə elə bir vəziyyət olmalıdır ki, burada sait və samitlər başqa cür emal edilsin. Yeni vəziyyətə saitlə keçildiyindən bu vəziyyəti $q_s$ ilə işarələmişik. Vəziyyət dəyişir və sait çıxışa yazılır. Bu sait avtomatın $q_0$ vəziyyətində rast gəldiyi ilk sait olduğu üçün onu olduğu kimi çapa göndərir, çünki hecaya əsas verən hal hələ baş verməyib.
Beləliklə $q_0$ vəziyyətinin bütün hallarına baxıldı. İndi $q_s$ halından keçilə bilən vəziyyətlərə baxaq.
$q_s \overset{0}\longrightarrow f$ əvvəlki sağlıq.
$q_s \overset{u(u)}\longrightarrow q_0$ qeyri simvol rast gəlincə, avtomat onu çapa verib ilkin vəziyyətə keçməlidir.
$q_s \overset{s(-s)}\longrightarrow q_s$ sait rast gəlibsə, avtomat bunun əvvəlinə defis (–) yazıb çapa verməlidir. Çünki bu vəziyyətə keçərkən artıq 1 sait çıxışa yazılıb.
$q_s \overset{m[m]}\longrightarrow q_m$ samit rast gələrsə, bu simvol çapa yox, yaddaşa yazılmalıdır. Çünki samit halında defis işarəsinin harada duracağı sonrakı simvollardan asılıdır. Avtomatın növbəti vəziyyəti samitlə keçilən $q_m$ olacaq.
$q_m \overset{m[m]}\longrightarrow q_m$ samit rast gələrsə, avtomat onu da yaddaşdakı samitlərin arxasına yazıb vəziyyəti dəyişmir.
$q_m \overset{0([m])}\longrightarrow f$ əgər avtomat $q_m$ vəziyyətinə gəlibsə, deməli mütləq yaddaşda heç olmazsa 1 samit var. Ona görə son vəziyyətə keçərkən yaddaşdakı samitləri çap edib yaddaşı boşaltmalıdır.
$q_m \overset{u([m]u)}\longrightarrow q_0$ qeyri simvol rast gəlincə, avtomat yaddaşdakı samitləri və həmin simvolu çapa verib ilkin vəziyyətə keçməlidir.
$q_m \overset{s([m-]s)}\longrightarrow q_s$ sait rast gələrsə, avtomat yaddaşda olan samitlərdən sonuncusunun önünə defis işarəsi qoyub bütün yaddaşı çapa çıxarır. Arxasınca isə rast gəlinən sonuncu saitı yazır. Əgər yaddaşda bircə samit varsa defis işarəsi bu samitin önünə yazılacaq.
Sonda belə bir avtomat alırıq. Şəkil 1 yuxarıda ifadə etdiyimiz avtomatın qrafıdır. Təpə nöqtələrində vəziyyətlər, tillərdə isə girişə, yaddaşa və çıxışa verilən simvollar durur.
Bu bizim ilkin iterasiyada aldığımız bəsit avtomatdır. İstənilən bir sözlə onu yoxlayaq. Əvvəlcə sadə alma sözünə baxaq. Bu sözü avtomat $smms0$ kimi qəbul edir.
$q_0 \overset{s(s)}\longrightarrow q_s$ çıxışa a hərfi yazılır.
$q_s \overset{m[m]}\longrightarrow q_m$ yaddaşa l hərfi yazılır.
$q_m \overset{m[m]}\longrightarrow q_m$ yaddaşa m hərfi yazılır.
$q_m \overset{s([m-]s)}\longrightarrow q_s$ m hərfindən əvvəl defis qoyulur və l-m çıxışa yazılır və yaddaşdan pozulur. Arxasınca da a hərfi çıxışa yazılır.
$q_s \overset{0}\longrightarrow f$ avtomat son vəziyyətə gəlir. Beləlikə çıxışda al-ma alırıq.
Yuxarıda adı çəkilən qaydalara (1, 2, 3, 4, 6, 8, 9) uyğun istənilən sözü bu avtomat vasitəsilə yoxlamaq olar. Əgər bu avtomat vasitəsilə aktyor sözünü hecaya bölsək, görəcəyik ki, onu 5-ci deyil, 4-cü bəndin qaydalarına uyğun olaraq bölür. Yəni ak-tyor əvəzinə avtomat bizə akt-yor qaytaracaq. Bu isə səhv hecalamadır.
Avtomatın təkmilləşdirilməsi
İndi bu avtomatı bir qədər mürəkkəbləşdirək. 4 və 5 bəndlərini ayırd etmək üçün gərək sözün kökünü tapa bilək. Bunu isə lüğətsiz edə bilməyəcəyik. Ona görə bu iki halı bir-birindən müəyyən qanunauyğunluq ilə ayırd etməyə çalışaq. Hər bir hala uyğun bir-neçə söz yazaq.
4 halına uyğun sözlər: pə-ləng-dən, dinc-lik, gənc-lik, gənc-lər,rəsm-xət, dəst-xət, hüsn-xət
5 halına uyğun sözlər: sen-tyabr, ak-tyor, kon-trakt, kon-kret, no-men-kla-tu-ra, uzun-draz
Diqqətlə baxsaq görərik ki, 4 halında bölünən hecadan əvvəl və sonra incə saitlər gəlir (Azərbaycan dilində incə saitlər: ə, i, ö, ü, e). 5 halında isə bölünən hecadakı samitlər ya qalın saitlərin (a, i, o, u) əhatəsindədir, ya da qarışıq (qalın və incə) əhatədədir. Bunu əsas götürüb 4 və 5 halları üçün saitlərin təsnifatına görə hərəkət etmək olar.
Onda avtomatın $q_s$ və $q_m$ vəziyyətləri hərəsi iki vəziyyətlə əvəz olunmalıdır. $q_s$ əvəzinə incə və qalın saitə uyğun $q_1$ və $q_2$ vəziyyətləri, $q_m$ əvəzinə isə $q_1$ vəziyyətindən keçilərsə $q_3$, $q_2$ vəziyyətindən keçilərsə $q_4$ vəziyyətləri yaradırıq. İncə sait üzrə keçidi $i$, qalın sait üzrə keçidi $q$ ilə işarələsək avtomatda bu dəyişikliklər olacaq.
$$Q=\{q_0,q_1,q_2,q_3,q_3,f\}$$
$V_1=\{i,q,m,u,-,0\}$ giriş əlifbasıdır. $m$ -samit, $i$ – incə saitlər, $q$ – qalın saitlər, $u$ -digər simvoldur, $0$-girişin sonu deməkdir.
$V_2=\{i,q,m,u,-\}$ çıxış əlifbasıdır.
$q_0$ – başlanğıc vəziyyətdir, $q_1$ – incə sait nəticəsində keçilən, $q_2$ – qalın sait nəticəsində keçilən, $q_3$ – $q_1$ vəziyyətindən keçilən, $q_4$ – $q_2$ vəziyyətindən keçilən vəziyyətdir.
Həm əlifba, həm də vəziyyətlər çoxluğu artdı. Bu dəyişikliyi ayrı-ayrılıqda izah etməyərək birbaşa avtomatın qraf şəklini verək. Şəkil 2-də gördüyünüz kimi bir-neçə $f$ vəziyyəti var. Əslində avtomatın 1 son vəziyyəti var. Qrafı sadələşdirmək üçün 3 dənə son vəziyyət çəkmişik. Əlifbada isə yeganə $f$ vəziyyəti var.
Keçidlərdəki işarələmələrə də aydınlıq gətirək.
$i(i)$ işarəsi incə saitin rast gəlinib çapa verilməsi, $q(q)$ işarəsi qalın saitin rast gəlinib çapa verilməsi deməkdir.
$q([-m]q)$ və $i([-m]i)$ qalın və incə sait rast gələrkən yaddaşdakı samitlərin çap olunub, arxasınca saitin çap olunması və samitlərin yaddaşdan silinməsi deməkdir. Defis işarəsinin əvvəldə gəlməsi onun ilk samitdən sonra qoyulacağına işarədir. Yəni sentyabr sözündə nty samitlər ardıcıllığında n-ty kimi qoyulacağı deməkdir.
$i([m-]i)$ isə əvvəlki avtomatda olduğu kimi üç samit ardıcıllığında sonuncudan öndə qoyulan defis deməkdir. Məsələn, dinclik sözündə ncl samitləri nc-l kimi bölünəcək.
Xatırladaq ki, 4 samit halında $[m-]=[-m]=mm-mm$, 2 samit halında $[m-]=[-m]=m-m$ olacaq. Bir samit halında isə $[m-]=[-m]=-m$ olacaq. Yəni defies həmişə qabaqda qalacaq.
Yuxarıdakı dəyişikliyi qrafın üzərində izah edək. Sözdə birinci incə sait rast gəlindikdə avtomat onu çap edib $q_1$ vəziyyətinə keçir. Sonra yenə incə sait oxunarsa onu defis işarəsi ilə çapa verib bu vəziyyətdə qalır. Əgər növbəti sait qalın olarsa onu defis işarəsi ilə çapa verib $q_2$ vəziyyətinə keçir. Bu vəziyyət isə qalın saitləri xarakterizə edir.
Əgər $q_1$ vəziyyətində samit oxunarsa yaddaşa yazılıb $q_3$ vəziyyətinə keçir. Bu vəziyyətdə olan avtomat artıq "bilir" ki, əvvəl rast gəlinən sait incə idi. $q_3$ vəziyyətində oxunan samitlər hamısı yaddaşa yazılır. Növbəti sait oxunan zaman, o da incə sait olarsa defis sonuncu samitdən əvvəl yazılıb çap edilir (4 bəndinə uyğun olaraq), yaddaş pozulur və incə sait sonda çap edilir. Avtomat isə $q_1$ vəziyyətinə keçir. Bu həm də növbəti samit üçün əvvəlki saitin incə olduğunu bildirir. Əgər $q_3$ vəziyyətində oxunan sait qalın olarsa, deməli incə saitlər ardıcıllığı pozulub. Avtomat yaddaşdakı samitlərin birincisindən sonra defis çap edir (5 bəndinə uyğun olaraq), yaddaşı boşaldır və sonda qalın saiti çap edir. Avtomat isə $q_2$ vəziyyətinə keçir.
$q_2$ vəziyyətində olan avtomat qalın sait oxuyarsa onu defis işarəsi ilə çapa verib bu vəziyyətdə qalır. Əgər növbəti sait incə olarsa onu defis işarəsi ilə çapa verib $q_1$ vəziyyətinə keçir. Bu vəziyyət yuxarıda gördüyümüz kimi incə saitləri xarakterizə edir.
Əgər $q_2$ vəziyyətində samit oxunarsa yaddaşa yazılıb $q_4$ vəziyyətinə keçir. Bu vəziyyətdə olan avtomat artıq "bilir" ki, əvvəl rast gəlinən sait qalın idi. $q_4$ vəziyyətində oxunan samitlər hamısı yaddaşa yazılır. Bu vəziyyətdə hansı saitin oxunmasından asılı olmayaraq defis yaddaşdakı birinci samitdən əvvəl yazılıb çap edilir, yaddaş pozulur və sait sonda çap edilir. Çünki avtomat bu vəziyyətə gəlibsə, deməli incə saitlər ardıcıllığı artıq pozulub və sistem 5 bəndinə uyğun hərəkət etməlidir. Avtomat incə sait oxuyarsa $q_1$, qalın sait oxuyarsa $q_2$ vəziyyətinə keçir.
Bütün digər hallarda avtomatın özünü aparması əvvəlki mexanızm ilə eynidir. İndi konkret və gənclər sözlərini bu avtomatdan buraxsaq onları uyğun olaraq olaraq kon-kret və gənc-lər kimi hecalayacaq.
Beləliklə, yenı qurduğumuz avtomat hecalamanın 1, 2, 3, 4, 5, 6, 8, 9 şərtlərini ödəyir. Növbəti addım tək saitin bitişik yazılmasını (7-ci bənd) təmin etməkdir.
Tək saitin emalı
İndi avtomatı elə dəyışdirək ki, tək saiti nə sözün əvvəlində, nə də sonunda hecaya ayırmasın. Yəni ilan, ailə, əmtəə kimi sözləri i-lan, a-i-lə, əm-tə-ə kimi bölmək olmaz. Bu vaxta qədər sait rast gələn kimi çapa göndərirdik. İndi isə saiti də gecikmə ilə çapa göndərməliyik. Birinci saitin tək olub-olmadığını artıq çap edilmiş simvolları saymaqla etmək olar. Lakin son saitin həqiqətən də son olduğunu bilmək üçün sözün sonuna çatmalıyıq. Ona görə bizə daha bir yaddaş da lazım olacaq. Bu yaddaşda yalnız 1 sait saxlamağımız kifayətdir. Ona görə samit yaddaşından fərqli olaraq bu yaddaşda hər vəziyyətdə ya 1 sait olur, ya da ki, yaddaş boş olur. Bir də, rast gəlinən saitdən əvvəl çap olunmuş simvolların sayını bilmək üçün bizə dəyışən lazım olacaq.
Yeni avtomatı belə xarakterizə edərik.
$$(Q, V_1, V_2, q_0, f, \delta, \alpha, M, s, n)$$
Burada, sonuncu saiti saxlayacağımız yaddaş $s$, çap olunmuş simvolları sayan yaddaş $n$ olacaq. Avtomat da dəyişib bu şəkildəki kimi olacaq.
Burada açıq şəkildə yazmasaq da hər bir çap əməliyyatı və ya yaddaşın çapı yerinə yetirilərkən n kəmiyyəti çap olunan simvolların sayı qədər artır. Bütün vəziyyətlərdən başlanğıc vəziyyətə qayıdarkən isə $n=0$ olur. Bunu uyğun vətərlərin üzərində yazmışıq. $u([m]u)[n=0]$ yazılışı yaddaşdakı samiti və ondan sonra gələn son simvolu yazıb, sonda n kəmiyyətinin sıfırlanması deməkdır. Sıfırlanma həmişə sonda olur. Çünki bu kəmiyyətin qiyməti defis simvolunun çap olunacağına qərar verir.
Fikir versəniz görərsiniz ki, hər yerdə defis (–) işarəsi tilda ($\sim$) ilə əvəz olunub. Bu şərti defis deməkdir. Yəni $i(\sim[s])[i]$ yazılışı o deməkdir ki, əgər yaddaşda sait varsa onu çapa göndər və yaddaşdan sil. Əgər çap olunmuş simvolların sayı 1-dən böyükdürsə, onda defis işarəsini də saitdən qabaq çap et. Bu yoxlana sayəsində tək sait əvvəldə hecaya bölünmür. Xatırladaq ki, yaddaşdakı samitlərdən fərqli olaraq sait yaddaşda olmaya da bilər. Ona görə çapdan öncə həmişə yaddaşda saitin mövcudluğu yoxlanılır. Samitlər kimi sait də çap olunan kimi yaddaşdan silinməlidir.
$q_1$ və $q_2$ vəziyyətlərindən $q_0$ və $f$ vəziyyətlərinə keçərkən sadəcə sonuncu saiti çap edirik və defis qoymuruq. Bu sözün sonunda tək saitin hecaya bölunməməsini təmin edir. Söhbət $u([m]u)[n=0]$ və $0([s])$ komandalarından gedir.
Beləlikə 3-cü iterasiyada qurduğumuz avtomat artıq 7-ci bəndin də şərtlərini ödəyir.
Növbəti bənd (10) abreviaturaların bölünməməsi tələbidir. Bunu təmin etmək üçün sözlərdəki baş hərfləri sayırıq. Əgər 1 baş hərf varsa, bu adam və ya yer adı ola bilər. Onu hecalayırıq. Əgər 2 baş hərf varsa, bu artıq sözün abreviatura olmasına əsas verir.
Bunu da avtomata daha bir sayıcı kəmiyyət əlavə etməklə yerinə yetirmək olar. Bu da 3-cü iterasiyaya analoji olaraq yerinə yetiriləcək. Sadəcə defis çap edən şərti funksiya baş hərflərin sayını göstərən kəmiyyəti də yoxlayıb, sonra çap edəcək. Əgər 1-dən çoxdursa defis çıxışa verilmir. Bütün vəziyyətlərdən başlanğıc vəziyyətə qayıdarkən bu kəmiyyət də bütün simvolların sayı kimi sıfırlanır.
Sonuncu bəndin (11) tələbini həyata keçirmək üçün artıq mürəkkəb sözlər lüğəti istifadə olunmalıdır.
Avtomatın tam işini burada izləyə bilərsiniz.
Digər məqalələr
Fellərin şəkildəyişməsi
Bu məqalədə felin başlanğıc formasını götürüb ona qrammatik şəkilçilər əlavə etməklə bütün mümkün söz formalarını alacağıq. Hər bir hal üçün istisnalar mövcuddur.
Əsl Azərbaycan və türk sözlərinin tapılması
Zaman keçdikcə bütün dillərdə olduğu kimi Azərbaycan dilinə də yeni terminlər əlavə olunmuşdur. Alınma sözlər iki qrupa bölünür: ərəb-fars dillərindən alınma və rus, avropa dillərindən alınma sözlər.
Omonimlik problemi
Omonim sözlərin yazılışı, hətta deyilişi eyni olsa da onlar müxtəlif leksik məna ifadə edir. Bu cür sözlər təbii dilin analizində böyük problemlər yaradır.
Stop-sözlərin müəyyən edilməsi
Stop sözlər (doldurucu sözlər, nida, qoşma, ədat, modal) əslində təhlil baxımından mənasız sözlərdir. Bunların bəziləri danışarkən şəxsə fikirləşmək üçün vaxt qazanmaq imkanı yaradır, bəziləri isə emosional təsiri artırmaq üçün işlənir. Yazıda tək-tək də olsa rast gəlinir.
© Müəllif hüquqları qorunur
Bu saytdakı bütün məqalələr Cəfər N.Əliyev tərəfindən yazılıb. Onlar hər hansı üçüncu şəxs tərəfindən digər resurslarda çap edilərsə mənbə və müəllifin adı göstərilməlidir. Sayt özü həmin şərtlərə əməl edir.