Salam dostlar )
Sualım budur ki, proqramlaşdırma dili necə yaradılır və yaradılmasında hansı texnologiyalardan istifadə olunur? Bu işin məntiqi necədi?
Öncədən təşəkkürlər 🙂
Salam dostlar )
Sualım budur ki, proqramlaşdırma dili necə yaradılır və yaradılmasında hansı texnologiyalardan istifadə olunur? Bu işin məntiqi necədi?
Öncədən təşəkkürlər 🙂
Verilmiş cavablar və yazılan şərhlər (5 cavab var)
2
Ahmed bəyin hazırladığı “Əsrin” dilinin rəsmi saytında proses barədə xeyli məlumat var, ki nələrdən istifadə edilib, proses necə olub və.s. http://www.esrin.org/
Əhməd bəy özü də bu sualınızı 1-2 günə görər və ətraflı cavablayar ümid edirəm.
5
Salam. Yeni proqramlaşdırma dili yaratmaq üçün əvvəlcə dilin əlifbası və lüğətini tərtib etməlisiniz. Yəni sizin yeni dildə hansı simvollardan və hansı açar sözlərdən istifadə olunacaq. Daha sonra dilin sintaksis qaydalarını tərtib etməlisiniz. Yəni operatorların, dəyişənlərin elanının, funksiyalar dəstəklənəcəksə onların tərtibi və çağırılması v.s. yeni dilinizdə nəyin olmasını istəyirsinizsə onun sintaksis – qrammatik qaydalarını tərtib edirsiniz. Vəssalam yeni diliniz hazırdır.
Lakin siniz dildə proqram tərtib olunması üçün siz yeni yaratdığınız dili tanıyan və ondan icraolunabilən kod yaradan kompilyator proqramını hazırlamalısınız. Kompilytorların dizaynı ayrı bir elm sahəsidi, amma qısa olaraq kompilyasiya prosesi aşağıdakı mərhələlərdən ibarətdir.
Əvvəlcə sizin yeni dilinizdə tərtib olunmuş proqram mətni kompilyator tərəfindən simvol-simvol oxunaraq, qrammatik baxımdan məna daşıyan hissələrə bölünür. Bu hissələr ədəbiyyatda token adlanır. Misal üçün
x = 6 + (y – 2);
sətri aşağıdakı tokenlərə ayrılacaq.
Dəyişən
Bərabərlik simvolu
Ədəd
Üstəgəl simvolu
Açılan mötərizə simvolu
Dəyişən
Çıxma simvolu
Ədəd
Bağlayan mötərizə simvolu
Nöqtə-vergül işarəsi
Aradakı boş məsafə simvolları heç bir məna daşımadığından inkar olunur. Nəticədə bütün mətn bu cür tokenlərdən ibarət ardıcıllığa çevrilir. Bu mərhələ ədəbiyyatda adlanır tokenizing.
Növbəti mərhələ kifayət qədər mürəkkəb mərhələdir və parsinq ağacının qurulması, qısa olaraq parsinq mərhələsi adlanır. Bu mərhələdə tokenlər ardıcıllığı sizin dilin qrammatik qaydalarına əsasən ierarxik struktur halına gətirilir. Misal üçün yuxarıdakı koda uyğun parsinq ağacı aşağıdakı kimi olar: Ağacın ən başında Mənimsətmə operatoru və onun qolları olacaq. Soldan sağa müvafiq olaraq x dəyişəni, BƏrabərlik sinvolu, İFADƏ və Nöqtəvergül. Əlbəttdə siniz dildə mənimsətmə operatorunun sonu Nöqtə, və ya digər işarə ilə quratara bilər. Bu zaman bizdə artıq qrammatik səhv var. Daha sonra İFADƏ-nin qollarına müvafiq olaraq aşağıdakılar birləşəcək. 6 ədədi Üstəgəl simvolu və İFADƏ. Sonuncu ifadənin qolları isə y dəyişəni , ÇIXMA işarəsi və 2 ədədi olacaq, Aşağıdakı kimi:
MƏnimsətmə operatoru
/ | \ \
x = İFADƏ ;
/ | \
6 + İFADƏ
/ | \
y – 2
Bütün proqram kodunun bu formada yekun parsinq ağacı qurulur. Bunun üçün müxtəlif alqoritmlər mövcuddur. Ən güclüsü LR(k) alqoritmidir. O(n) mürəkkəbliyi ilə tokenləri soldan – sağa (Left – Right) bir dəfə oxumaqla parsinq ağacını qurur. LR(k) -dan sonra nisbətən zəif, SLR, TOP-Down, Bottom Up recursiv v.s. parsinq alqoritmləri mövcuddur. Qeyd eliyim ki tokenlərə parçalama və parsinq ağacının qurulması üçün kodu özünüzün tərtib etməyinə ehtiyac yoxdur. Bunun üçün avtomatlaşdırılmış vastələrdən yararlana bilərsiniz. Misal üçün flex-bison proqramları. Siz dilin lüğətini və qrammatik qaydaları daxil edirsiniz, bu proqramlar isə tokenləyici və parser kodunu generasiya edirlər. Bunlar adlanır kompilyator kompilyatorları. LAkin çatışmamazlıqları odur ki Bu proqramlar sizə öz kompilyatorunuz üzərində istədiyiniz qədər manevr imkanı vermir. Səhvlərin istədiniz kimi diqanostikası üçün avtomatlaşdırılmış kompilyator generatorları sizə problem yarada bilər. PArsinq ağacı qurulduqdan sonra qrammatik səhvlər tapılmalı və istifadəçiyə bildirilməlidir. Bu ümumi işin ən çətin hissəsidir. Burada ağacın müxtəlif budaqları və yarpaqlarında olan tokenləri, onların birləşmə ardıcıllığını v.s. qrammatik qaydalara nisbbətən müqaisə etməklə natamam, səhv budaqlar müəyyən olunur və yaddan çıxarılmış elementlər istifadəçiyə bildirilir. Sintaktik səhvlər düzəldildikdən sonra Simvollar cədvəli qurulur. Simvollar cədvəlində elan olunan dəyişən və funksiyalar, ötürülən parametrlər, onların tipləri v.s. kimi məlumatlar cəmlənir. Daha sonra isə Semantik səhvlər yoxlanılır. Misal üçün heç yerdə elan edilməyən x dəyişəninə müraciət olunursa bu səhv istifadəçiyə bildirilir. Bu mərhələ də bitdikdən sonra artıq hər şey yoxlanılıb və kod generasiya etmək olar. Burada iki seçiminiz var: Birbaşa ikili kod generasiya etmək və ya interbayt kod generasiya etmək. İkili kod generasiya etmək çətindir, lakin kod sürətli olacaq və icra olunması üçün heçnəyə ehtiyacı omayacaq, Misal üçün C++ dilinin kompilyatoru ikili kod generasiya edir – exe fayl. Amma interbayt kod generasiya etsəniz bu zaman həmin kodun icra olunması üçün əlavə icraçı – interpretator proqramı da tərtib etməlisiniz. Bu nisbətən asan yoldur. Çatışmamazlıq isə odur ki, nisətən zəif sürət və sizin proqramlarınızın icrası üçün kompüterə interpretatorun mütləq quraşdırılmalı olmasıdır. Misal üçün JAVA, PHP dilləri.
0
Ətraflı izah üçün çox sağolun 🙂
0
Mükəmməl yazılıb. Bravo!
0
Salam mən kiçik bir kodlama dili yaratmışam.Zəhmət olmasa baxın
Sual verin
Cavab verin