Proqramlaşdırma dili yaratmaq

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 🙂


Yadda saxlama
Kateqoriya: Sual . . Qısa keçid.

Verilmiş cavablar və yazılan şərhlər (5 cavab var)

(00:22, 20/11/2016 ) #66036

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.

Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

(20:09, 20/11/2016 ) #66046

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.

Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

    (22:14, 20/11/2016 ) #66050

    Ətraflı izah üçün çox sağolun 🙂

    Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

    (23:49, 20/11/2016 ) #66057

    Mükəmməl yazılıb. Bravo!

    Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

      (10:43, 31/01/2020 ) #77151

      Salam mən kiçik bir kodlama dili yaratmışam.Zəhmət olmasa baxın

      Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

Bu suala aid öz sualım var:
Sual verin
Bu suala cavab vermək istəyirəm:
Cavab verin

Cavab verin


Cavab yazmaq üçün lütfən sağ sütundan və ya buradan hesaba daxil olun.

Üzvlər üçün giriş

Qeydiyyat

Elan qutusu

Son cavablar və şərhlər

Software Developer cavab verdi - Rus dilindən mətni tərcümə etmək (3 saat əvvəl)

Cənab cavab verdi - Almanca söz bazası yığmaq (3 gün əvvəl)

rdrobert cavab verdi - Mikrofon süngərinə yazı (4 gün əvvəl)

rdrobert cavab verdi - Yerli virtual olaraq dost tapmaq platforması (4 gün əvvəl)

rdrobert cavab verdi - Almanca söz bazası yığmaq (4 gün əvvəl)

rdrobert cavab verdi - Playstation 4 almaq, Playsation klub açmaq (4 gün əvvəl)

rdrobert cavab verdi - Proqramistin ixtsasi hansidir? (4 gün əvvəl)

Software Developer cavab verdi - Azercell Kabinetim aplikasiyasında İstəSən tarifi haqqında (5 gün əvvəl)

Software Developer cavab verdi - Proqramistin ixtsasi hansidir? (5 gün əvvəl)

byshako cavab verdi - Google Azərbaycan nömrələrini qəbul etmir (15 gün əvvəl)

rdrobert cavab verdi - Honeygain, passiv gelir (17 gün əvvəl)

rdrobert cavab verdi - Xaricdən telefon getirmek (17 gün əvvəl)

rdrobert cavab verdi - Google Azərbaycan nömrələrini qəbul etmir (17 gün əvvəl)

rdrobert cavab verdi - AliExpress, Telefon, Rüsum (17 gün əvvəl)

MiMov cavab verdi - Özəl ip tv qurmaq (25 gün əvvəl)

Software Developer - 615 xal

E. Hacı - 607 xal

Onar Alili - 526 xal

Dilsuz - 448 xal

Cabbarov Sübhan - 434 xal

Maqa - 346 xal

Ruslan Butdayev - 328 xal

Namiq Bəndəli - 297 xal

U.Tarlan - 244 xal

Meherremoff - 234 xal

Sistemə daxil olmuş 23234 sualdan 92%-dən çoxu cavablandırılmışdır.

Proyekt haqqında

E-Haci.net istehsalı. © 2010-2024