KompüterProqramlaşdırma

Broadcaster - ... derleyiciler növləri var. Convert və yayım proqramları

Programs, eləcə də insanlar tərcüməçi və ya tərcüməçi lazımdır bir dildən başqa tərcümə.

əsas anlayışlar

proqram hesablamalar linqvistik təmsil edir: i P → P (i) →. Tərcüməçi giriş proqramı P və bəzi giriş x təchiz bir proqramdır. Bu P x yerinə yetirir: I (P, x) = P (x). yalnız bir tərcüməçi (formal sistemdə təmsil oluna bilər) bütün mümkün proqramları həyata malikdir var ki, bir çox dərin və əhəmiyyətli kəşf Turing edir.

prosessor maşın dilində proqramların bir tərcüməçi edir. onlar şərh asan bir formaya tərcümə, belə ki, yüksək səviyyəli dillər üçün şifahi yazmaq Ümumiyyətlə çox bahalı.

tərcümə Bəzi növ çox qəribə adları var:

  • assembler maşın dilinə toplaşmaq dil proqramları çevirir.
  • compiler aşağı dilinə yüksək səviyyəli dil çevirir.

P → X → Q., ∀x: - yayım onlar eyni semantika var ki, belə bir şəkildə T proqram bəzi dil S input data kimi proqram edir və istehsal edən bir proqramdır. P (x) = Q (x).

interpretable bir şey bütün proqram yayımlanacaq, bu, icra və ya AOT tərtib əvvəl tərtib adlanır. AOT compiler sıra istifadə edilə bilər, ikinci tez-tez misal üçün assembler edir:

mənbə kodu compiler → (tərcüməçi) → → toplaşmaq kodu assembler (compiler) → → CPU maşın kodu (tərcüməçi).

digər əvvəllər tərtib hissəsi icra zaman proqramı yayımlanır əgər əməliyyat və ya dinamik yığma baş verir. JIT-derleyiciler təkrar kodunu təkrar deyil, belə ki onlar artıq nə xatırlayıram. Onlar hətta proqram icra mühitin davranış əsasında adaptiv tərtib və recompilation istehsal edə bilər.

Bir çox dillərdə tərtib zamanda kodu icra və iş zamanı yeni kodu tərtib etməyə imkan verir.

tərcümə mərhələ

Broadcast təhlil və sintez addımlar ibarətdir:

Target kodu → mənbə kodu analizator → → → konseptual təmsil generator (sintezatoru).

Bu bu səbəblərə görə:

  • Hər hansı digər üsul uyğun deyil. Word tərcümə sadəcə iş deyil.
  • Yaxşı engineering həll: Siz daha M × N kompleksinin daha yalnız M + N sadə proqramları (polukompilyatorov) yazmaq lazımdır hədəf M və N mənbə dil üçün tərcümə (tərcümçilərin ümumi) yazmaq istəyirsinizsə.

Lakin praktikada, bir qədər çox nadir hallarda ifadəli və kifayət qədər güclü konseptual baxış hər akla mənbə və hədəf dil əhatə edir. bəzi bu yaxın gələ isə.

Real derleyiciler çox mərhələdən keçir. Öz compiler oluştururken nəfər nümayəndəlik və generatorları yaratmaq üçün görülən bütün ağır iş təkrar lazım deyil. Siz JavaScript və ya C birbaşa dil tərcümə və mövcud JavaScript-mühərrik və istirahət etmək üçün C compiler istifadə edə bilər. Siz həmçinin mövcud aralıq təmsil və istifadə edə bilərsiniz virtual maşın.

rekord tərcüməçi

mənbə, hedef və baza - yayım üç dildə cəlb bir proqram və ya hardware edir. Onlar aşağıda orijinal sol, sağ və hədəf baza yerləşdirilməsi, bir T-formalı yazılı bilər.

derleyiciler üç növü var:

  • Broadcaster - bu əsas mənbə dil uyğundur, əgər samokompilyator edir.
  • dil hədəf Compiler baza adlı samorezidentnym edir.
  • Broadcaster - bir cross-compiler, o hədəf əgər əsas müxtəlif dillərdə.

Niyə bu vacibdir?

Hətta bu məqsədlə istifadə konsepsiyası məsələn, geniş istifadə olunur, çünki, bir real compiler, onun yaradılması texnologiyası yaxşı bilik etmək heç vaxt əgər:

  • biçimlendirme mətn;
  • dil sorğu verilənlər bazası;
  • Qabaqcıl kompüter memarlıq;
  • ümumiləşdirilmiş optimallaşdırılması problemləri;
  • GUIs;
  • scripting languages;
  • nəzarətçiləri;
  • virtual maşın;
  • Maşın tərcüməsi.

Siz preprocessors, linkers, yükləyicilər, debuggers və profilers yazmaq istəyirsinizsə Bundan əlavə, siz bir compiler yazarkən eyni addımlar vasitəsilə getmək lazımdır.

Siz həmçinin dil üçün tərcüməçi yaradılması onun intricacies və ambiguities daha yaxşı anlaşılması deməkdir ildən, daha yaxşı proqramları yazmaq üçün necə öyrənə bilərsiniz. yayım ümumi prinsipləri öyrənilməsi də yaxşı bir dizayner dil olmaq üçün imkan verir. Belə ki, necə dik səmərəli həyata keçirilə bilməz, əgər dil fərqi yoxdur?

hərtərəfli texnologiya

compiler texnologiya kompüter elm çox müxtəlif sahələri əhatə edir:

  • dil formal nəzəriyyəsi: qrammatika, təhlil, computability;
  • kompüter memarlıq. təlimat dəstləri, RISC və ya CISC, pipelined emal core saat dövründən, və s;
  • proqramlaşdırma dilləri anlayışlar, misal üçün, bir ardıcıllıqla nəzarət şərti icra, iteration, recursion, funksional parçalanma, modularity, sinxronizasiya, meta-proqramlaşdırma, əhatə dairəsi, daimi sub-növləri, şablonlar, çıxış növü, prototipləri, ek, axın, monads, poçt həyata davam , joker, normal ifade, belə s işlem yaddaş, miras, polimorfizm, rejimi parametrləri və s..
  • mücərrəd dil və virtual maşın;
  • alqoritmlər və data strukturları: normal ifadeler, təhlil alqoritmlər, qrafik alqoritmlər, dinamik proqramlaşdırma, təlim;
  • proqramlaşdırma dilləri: sintaksis, (statik və dinamik) semantika, dəstək paradiqmaları (struktur, OOP, funksional, məntiqi, yığını paralellik, meta-proqramlaşdırma);
  • yaradılması proqram (adətən böyük və mürəkkəb derleyiciler) localization, caching, componentize, API-interfeys, yenidən istifadə sinxronizasiya.

compiler dizayn

real tərcüməçi inkişafında rast problemlərin bəziləri:

  • mənbə dili ilə problemləri. onu tərtib etmək asandır? bir preprocessor varmı? Necə növləri var? kitabxana var mı?
  • compiler keçir qruplaşdırılması: bir və ya multi-yol?
  • optimallaşdırılması dərəcəsi istəyirdi. az və ya heç optimallaşdırılması ilə sürətli və murdar yayım proqramları normal ola bilər. Over-optimallaşdırılması compiler yavaş, lakin iş zamanı yaxşı code dəyər ola bilər.
  • səhv aşkar tələb dərəcəsi. tərcüməçi yalnız ilk səhv dayandırmaq edə bilərəmmi? Bu dayandırmaq lazımdır? compiler səhv düzəliş etibar olsun?
  • alətlər mövcudluğu. Orijinal dil çox kiçik deyil, skaner və generator analizatorları tələb olunur. Orada generatorları, kodu generatorları də var, amma onlar belə ümumi deyil.
  • hədəf kodu tip yaradılan. təmiz əlavə və ya virtual maşın kodu seçiləcək. Və ya yalnız belə LLVM, RTL, və ya JVM kimi məşhur aralıq təmsil yaradır giriş hissəsini yazın. Və ya C və ya JavaScript mənbə kodu orijinal bir tərcümə etmək.
  • hədəf kodu format. Siz seçə bilərsiniz akt dil, portativ maşın kodu, maşın kodu yaddaş image.
  • Retargeting. generatorları set yaxşı zaman ümumi giriş hissəsini var. Bu səbəbdən bir çox hissələrinin daxil bir generator üçün yaxşı deyil.

compiler Architecture: komponentləri

Bu (output proqram C və ya bir virtual maşın bir proqram varsa, siz bir çox mərhələlərində lazımdır) doğma kodu yaradır bir compiler əsas funksional komponentləri:

  • input proqram (flow işarələri) ayələr bir axın onu çevirir skaner (leksik analizator) daxil qidalanır.
  • bir mücərrəd sintaksis ağac inşa Parser (parser).
  • Semantik analizator semantik məlumat decomposes və səhvlər üçün ağac qovşaqlarının yoxlayır. əlavə xüsusiyyətləri və müəyyən bağlantılar mücərrəd sintaksis ağac - Nəticədə, semantik grafik inşa edilmişdir.
  • Intermediate code generator (tuples əsas blokları qruplaşdırılıb) bir hərəkəti grafik qurur.
  • Machine müstəqil kodu optimizer əsasən routines ərzində qalan (əsas vahid daxilində) yerli və qlobal (bütün blokları) optimallaşdırılması həm aparır. lazımsız kodu azaldır və hesablamalar asanlaşdırır. Nəticədə redaktə axını graph edir.
  • Generator (bəlkə səmərəsiz) bir obyekt fayl assembler virtual qeydə yaradılması, düzxətli ötürülməsi nəzarət kodu daxil hədəf kodu əsas blokları bağlar.
  • Machine asılı optimizer, linker qeydiyyat arasında yaddaş ayırır və planlaşdırma qrupları edir. Bu Boru yaxşı istifadə bu toplantıda məclis dilində dönüşüm proqram həyata keçirir.

Bundan əlavə, səhv aşkar alt meneceri və rəmzi masalar istifadə.

Leksik təhlili (scanning)

skaner ayələr aradan qaldırılması ağ, şərh və genişləndirilməsi makro bir dərəyə stream mənbə simvol çevirir.

Skanerlər tez-tez belə nəzərə halda, qaydalarından, line fasilələri və əlaqədar şərh etmək və ya kimi problemləri qarşılaşa.

tarama zamanı baş verə bilər səhvlər, leksik adlanır və daxildir:

  • əlifba deyil simvol;
  • bir söz və ya xətt simvol sayı artıq;
  • bir qapalı işarə və ya hərfi bir string;
  • Şərh fayl sonu.

Təhlil (təhlil)

parser mücərrəd sintaksis ağaca ayələr ardıcıllığı çevirir. ağac hər node özləri ağac qovşaqlarının olan bir çox adlı sahələri ilə bir obyekt kimi saxlanılır. Bu mərhələdə heç bir dövründən var. yaratmaq zaman parser qrammatika (LL ya LR) mürəkkəbliyi səviyyəsinə diqqət və hər hansı qaydaları dəqiqləşdirmə olub olmadığını tapmaq lazımdır. Bəzi dillərdə semantik təhlili tələb yoxdur.

Bu mərhələdə aşkar səhvlər sintaksis deyilir. Məsələn:

  • k = 5 * (7 - y;
  • j = / 5;
  • 56 = x * 4.

semantik təhlili

Zamanı semantik təhlili analiz ağacı qaydaları və asılı hissələri caiz yoxlamaq üçün (gizli növü dönüşüm üçün əməliyyat daxil arayış adları imkan, və s. D.) semantik graph təşkil edir.

Aydındır ki, müxtəlif müxtəlif dillərdə qaydaları qəbul toplusu. Java kimi dillərində tərtib varsa, derleyiciler tapa bilərsiniz:

  • onun daxilində çox dəyişən bəyannamə;
  • onun elan əvvəl dəyişən bir arayış;
  • qeydiyyatdan kənar xarici adına istinadlar;
  • patent hüquqlarının pozulması;
  • bir üsul zəng dəlilləri həddindən artıq və ya qeyri-kafi nömrəsi;
  • növü uyğunsuzluq.

nəsil

Intermediate kodu nəsil əsas blokları qruplaşdırılıb tuples ibarət axını grafik istehsal edir.

kodu nəsil bir real maşın kod hazırlayır. ilk addım RISC-maşınlar üçün ənənəvi derleyiciler, siz virtual qeydə sonsuz sayda ilə assembler yaradır. CISC-maşınlar üçün yəqin ki, olmayacaq.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 az.delachieve.com. Theme powered by WordPress.