KomputerProgramming

Broadcaster - iku ... Jinis kompiler. Convert lan program siaran

Program, uga wong kanggo nerjemahake saka basa siji menyang basa liyane perlu interpreter utawa translator.

konsep dhasar

Program perwakilan linguistik petungan: i → P → P (i). Lan interpreter iku program kang wis diwenehake kanggo program input P lan sawetara input x. Iku performs ing P x: aku (P, x) = P (x). Kasunyatan sing ana mung siji translator saged Performing kabeh program bisa (kang bisa ditampung ing sistem formal) punika panemon Turing banget penting lan wujud.

prosesor lan interpreter program ing basa mesin. Umumé banget larang kanggo nulis interpreters kanggo basa-tingkat dhuwur, supaya sing dijarwakake dadi wangun sing luwih gampang kanggo kokwaca.

Sawetara jinis sing duwe jeneng banget aneh:

  • assembler nerjemahake program language Déwan menyang basa mesin.
  • compiler nerjemahake basa-tingkat dhuwur menyang basa ngisor.

Broadcaster - program sing njupuk minangka data input program ing sawetara basa S lan mrodhuksi program T ing kuwi cara sing loro duwe semantik padha: P → X → Q. Sing, ∀x. P (x) = Q (x).

Yen siaran kabeh program menyang soko interpretable, iku diarani ketika sadurunge kompilasi execution, utawa AOT. AOT compiler bisa digunakake ing seri, sing terakhir kang asring assembler, contone:

Kode sumber compiler → (translator) → → Déwan kode assembler (compiler) kode → → mesin CPU (interpreter).

kompilasi Operational utawa dinamis ana yen program siaran, nalika kaleksanan dening part sadurunge nyawiji liyane. JIT-kompiler elinga apa kang wis rampung supaya dadi ora kanggo mbaleni kode sumber maneh lan maneh. Padha bisa malah gawé kompilasi adaptif lan recompilation adhedhasar prilaku saka lingkungan execution program.

Akeh basa ngidini kanggo nglakokaké kode ing wektu ngripta lan ngumpulake ing kode anyar ing durasi.

tataran terjemahan

Siaran dumadi langkah saka nganalisa lan synthesizing:

Kode sumber analyzer → → → konsep perwakilan generator (Synthesizer) → kode Target.

Iki amarga alasan iki:

  • Sembarang cara liyane ora cocok. translation tembung mung ora bisa.
  • Good engineering solusi: yen sampeyan pengin nulis sing kanggo basa M lan N sumber diangkah kudu nulis mung M + N program prasaja (polukompilyatorov) tinimbang M × N Komplek (total translators).

Nanging, ing laku, tampilan konsep saka banget jarang cukup ekspresif lan cukup kuat kanggo nutupi saben sumber lan target kepikiran basa. Nalika sawetara padha bisa teka cedhak iki.

kompiler Real nembus akeh orane tumrap sekolah. Nalika nggawe compiler dhewe ora kudu mbaleni kabeh karya hard sing wong wis rampung kanggo nggawe wujud lan generator. Sampeyan bisa nerjemahake basa langsung ing JavaScript utawa C lan njupuk kauntungan saka JavaScript-engine ana lan C compiler kanggo nggawe liyane. Sampeyan uga bisa nggunakake perwakilan penengah ana lan mesin virtual.

rekaman translator

Broadcaster - program utawa hardware, kang melu telung basa: sumber, panggonan lan basa. Padha bisa ditulis ing T-wangun, manggonke ing kiwa asli, tengen lan target basa ing ngisor iki.

Ana telung jinis kompiler:

  • Broadcaster - iku samokompilyator yen cocok karo basa sumber dhasar.
  • Compiler kang target language punika garis dasar, disebut samorezidentnym.
  • Broadcaster - salib-compiler, yen diangkah lan dhasar macem-macem basa.

Apa iki penting?

Malah yen sampeyan ora nggawe compiler nyata, kawruh saka teknologi kang nggawe, amarga konsep digunakake kanggo maksud iki digunakake digunakake, contone:

  • teks format;
  • pitakon basa kanggo data;
  • arsitektur komputer;
  • masalah Optimization umum;
  • GUIs;
  • basa skrip;
  • pengontrol;
  • mesin virtual;
  • Machine terjemahan.

Kajaba iku, yen sampeyan pengin nulis preprocessors, linkers, loader, debuggers lan profilers, sampeyan kudu pindhah liwat langkah padha nulis compiler sing.

Sampeyan uga bisa sinau carane nulis program luwih, wiwit tumitah, nganti kanggo basa ing tegese pangerten luwih saka intricacies lan ambigu. Sinau saka prinsip umum ing siaran uga ngijini sampeyan kanggo dadi basa Desainer apik. Dadi ora salah carane tajem ing basa yen ora bisa dipun ginakaken èfèktif?

teknologi lengkap

teknologi compiler isine akeh wilayah beda saka ilmu komputer:

  • teori formal basa: grammar, parsing, komputabilitas;
  • arsitektur komputer:. instruction sèt, RISC utawa CISC, siklus jam Processing inti pipelined, etc;
  • konsep saka basa komputer, contone, Performing kontrol urutan, eksekusi saratipun, pengulangan, recursion, bosok fungsi, modularity, sinkronisasi, meta-program, orane katrangan, pancet sub-tipe, Cithakan, jinis output, rancangan, annotations, aliran, monads, mailboxes, terus , Wildcards, expression biasa, memori transactional, pusaka, polimorpisme, setelan mode, lan ing etc..
  • basa abstrak lan mesin virtual;
  • kalkulus lan data struktur: biasa ungkapan, kalkulus parsing, kalkulus grafis, program dinamis, latihan;
  • programming languages: sintaksis, semantik (statis lan dinamis), paradigma support (struktural, OOP, fungsi, logis, tumpukan, parallelism, meta-program);
  • nggawe software (kompiler, biasane gedhe lan Komplek): localization, caching, componentize, API-antar muka, re-nggunakake, sinkronisasi.

desain compiler

Sawetara masalah pinanggih ing pangembangan translator nyata:

  • Masalah karo basa sumber. Apa gampang kanggo ngumpulake iku? Apa ana Preprocessor a? Carane sing jinis? Apa ana perpustakaan?
  • Kelompokan liwat compiler: siji utawa multi-cara?
  • Ing jurusan kang Optimization dikarepake. Fast lan najis program siaran karo sethitik utawa ora Optimization bisa normal. Swara-Optimization compiler alon, nanging kode luwih ing durasi uga worth iku.
  • Unda dibutuhake deteksi kesalahan. Bisa translator mung mungkasi ing kesalahan pisanan? Nalika ngirim mungkasi? Apa dipercaya koreksi kesalahan compiler?
  • Kasedhiyan pribadi. Yen basa asli ora cilik, ing scanner lan generator analyzers sing dibutuhaké. Ana uga generator, generator kode, nanging padha ora dadi umum.
  • Jinis kode target kanggo kui. Milih saka kode mesin ditambah utawa virtual murni. Utawa mung nulis bagean entri sing nggawe perwakilan penengah populer kayata LLVM, RTL, utawa JVM. Utawa nggawe terjemahan saka asli ing kode sumber ing C utawa JavaScript.
  • Ing format kode target. Sampeyan bisa milih basa Déwan, kode mesin hotspot, gambar kode mesin memori.
  • Retargeting. Nalika pesawat saka generator apik kanggo duwe bagean welingan umum. Menawi mekaten iku paling apik kanggo duwe generator kanggo input saka bagéan.

compiler Arsitektur: komponen

Iki komponen fungsi utama saka compiler sing ngasilake kode native (yen program output iku program ing C utawa mesin virtual, sampeyan ora perlu dadi akeh orane tumrap sekolah):

  • Program input (tandha aliran) panganan menyang scanner (paromosastro analyzer), kang ngowahi iku menyang stream token.
  • Parser (parser) mbangun salah siji wit ukara abstrak.
  • analyzer Semantic kaurai informasi semantik lan ngecek kelenjar wit kasalahan. Akibaté, dibangun semantik graph - wit ukara abstrak kanthi tambahan lan pranala diadegaké.
  • generator kode penengah di bangun grafik aliran (tuples sing diklompokaké dadi pamblokiran utama).
  • Machine sawijining kode Pangoptimal ngayahi loro lokal (ing unit basa) lan global (kanggo kabeh pamblokiran) Optimization Sejatine isih ing rutin. Nyuda kode keluwih lan simplifies petungan. Asil punika graph aliran wis dimodifikasi iki.
  • Generator njiret kode target pamblokiran dhasar menyang kode kontrol transmisi rectilinear, nggawe file obyek assembler virtual ndhaftar (bisa èfèktif).
  • Machine-gumantung Pangoptimal, Linker allocates memori antarane ndhaftar lan ndadekake tim planning. Iku performs program konversi ing basa Déwan ing Déwan iki karo apik nggunakake pipelining.

Kajaba iku, nggunakake deteksi kesalahan manager subsistem lan tabel simbol.

analisis paromosastro (mindhai)

scanner ngowahi karakter sumber stream menyang stream token, njabut whitespace, komentar lan ngembangaken macro.

Scanner asring Tembang masalah, kayata apa utawa ora kanggo njupuk menyang akun cilik, bathi, baris ngilangi lan ditempelake komentar.

Kasalahan sing bisa kelakon sak mindhai, disebut paromosastro lan kalebu:

  • karakter sing ora aksara;
  • keluwihan saka nomer karakter ing tembung utawa baris;
  • ora tandha Ana utawa senar harfiah;
  • pungkasan file ing komentar.

Parsing (Sevenval)

parser ngowahi urutan token menyang wit ukara abstrak. Saben simpul ing wit disimpen minangka obyek jenenge kothak, akeh kang piyambak kelenjar wit. Ing tataran iki ana siklus. Nalika nggawe parser sing perlu kanggo mbayar manungsa waé kanggo tingkat kerumitan grammar (LL utawa LR) lan mangerteni apa ana aturan disambiguasi. Sawetara basa sing analisis semantik.

Kasalahan ketemu ing tataran iki disebut kanggo pangrinciané. Contone:

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

analisis semantik

Sak analisis semantik kanggo mriksa permissibility saka aturan lan bagean digandhengake saka wit parse (saéngga jeneng referensi nambahi operasi mata jinis iso dilacak, lan ing. D.) Kanggo mbentuk graph semantik.

Temenan, ing pesawat saka admissibility saka aturan ing basa beda. Yen ngumpulake ing basa Jawa-kaya, kompiler bisa nemokake:

  • global kaping Pranyatan ing sawijining orane katrangan;
  • referensi kanggo variabel sadurunge Pranyatan sawijining;
  • referensi kanggo jeneng undeclared;
  • cipta hak paten;
  • nomer gedhe banget utawa boten cecek bantahan ing telpon cara;
  • jinis mismatch.

generasi

generasi kode penengah mrodhuksi graph aliran dumadi saka tuples, diklompokaké dadi pamblokiran dhasar.

generasi kode mrodhuksi kode mesin nyata. Ing kompiler tradisional kanggo RISC-mesin ing langkah pisanan, sampeyan nggawe assembler karo nomer tanpa wates ndhaftar virtual. Kanggo CISC-mesin mbokmenawa ora kelakon.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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