Datori, Programmēšana
Raidsabiedrība - ir ... veidi kompilatoru. Konvertēt un apraides programmas
Programmas, kā arī cilvēkiem, tulkot no vienas valodas uz otru ir nepieciešams tulks vai tulkotājs.
pamatjēdzieni
Programma ir valodas attēlojums aprēķinu: i → P → P (i). Interpretators ir programma, kas ir apgādāts ar ievadprogrammā P un kādu ievadītās x. Tā veic pie P x: I (P, x) = P (x). Tas, ka ir tikai viens tulkotājs ir spējīga veikt visus iespējamos programmas (kas var attēlot formālajā sistēmā) ir ļoti dziļa un nozīmīgs atklājums Turing.
Procesors ir tulks programmu mašīnvalodā. Parasti ir pārāk dārga, lai rakstītu tulkus augsta līmeņa valodas, tāpēc tie tulkot formā, kas ir vieglāk interpretēt.
Daži tulkotāju veidi ir ļoti dīvaini nosaukumi:
- Komplektētājs pārveido montāžas valodas programmas uz mašīnu valodā.
- Kompilators pārveido augsta līmeņa valodu uz zemāku valodu.
Raidsabiedrība - ir programma, kas notiek kā ievaddatus programmu kādā valodā S un ražo T programmu tādā veidā, ka viņi abi ir tādas pašas semantiku: P → X → Q. Tas ir, ∀x. P (x) = Q (x).
Ja pārraidīt visu programmu uz kaut interpretējami, to sauc par kompilēšanu pirms izpilde vai AOT apkopošanai. AOT kompilators var izmantot sērija, pēdējais no kuriem nereti ir montētājs, piemēram:
Pirmkods kompilatoru → (tulkotājs) → → montāža kods montētājs (sastādītājs) → → CPU mašīnu kodu (tulks).
Darbības vai dinamiskās apkopojums rodas, ja programma tiek pārraidīta, ja izpilda otras iepriekš sastādīta puses. JIT-kompilatori atcerēties, ko viņi ir izdarījuši, lai neatkārtotu pirmkodu atkal un atkal. Tie var pat radīt adaptīvais apkopošanu un recompilation, pamatojoties uz uzvedību programmas izpildes vidē.
Daudzas valodas ļauj izpildīt kodu kompilēšanas laikā, un apkopo jauno kodu runtime.
tulkošanas posms
Apraides satur šādus posmus analizē un sintēzes:
Avota kodu analizatoru → → → konceptuāla pārstāvība ģenerators (sintezators) → Target kodu.
Tas ir saistīts ar šiem iemesliem:
- Jebkura cita metode nav piemērota. Vārda tulkošana vienkārši nedarbojas.
- Laba inženieru risinājums: ja vēlaties rakstīt tulkotāju mērķtiecīgām nepieciešams rakstīt tikai M + N vienkāršas programmas (polukompilyatorov) M un N avotvalodām nevis M × N kompleksu (kopā tulkotāju).
Tomēr praksē, konceptuāla skats ļoti reti pietiekami izteiksmīga un pietiekami jaudīga, lai segtu visas iedomājamās avota un mērķa valodu. Lai gan daži varēja nākt tuvu tam.
Real kompilatori iet cauri daudziem posmiem. Veidojot savu kompilatoru nav nepieciešams atkārtot visu smago darbu, ko cilvēki ir darījuši, lai radītu pārstāvniecības un ģeneratori. Varat tulkot valodu tieši JavaScript vai C, un izmantot esošās JavaScript dzinēju un C kompilatoru darīt pārējo. Jūs varat arī izmantot esošo starpposma pārstāvību un virtuālās mašīnas.
ieraksts tulkotājs
Raidsabiedrība - ir programma vai aparatūra, kas iesaistītas trīs valodas: avots, galamērķa un bāzes. Tos var rakstīt T-formas, ievietojot oriģinālu pa kreisi, pa labi un mērķa bāzi zemāk.
Ir trīs veidu kompilatoru:
- Raidsabiedrība - ir samokompilyator ja tas atbilst pamata avota valodu.
- Compiler kas mērķa valoda ir pamata, ko sauc samorezidentnym.
- Raidsabiedrība - pārrobežu kompilators, ja viņš mērķtiecīgu un pamata dažādās valodās.
Kāpēc tas ir svarīgi?
Pat ja jūs nekad veikt reālu kompilatoru, labas zināšanas par tehnoloģiju tās izveidošanas, jo jēdziens, ko izmanto šim nolūkam tiek izmantoti plaši, piemēram:
- formatēšana teksta;
- valodas vaicājumus uz datu bāzēm;
- modernu datoru arhitektūra;
- ģeneralizētas optimizācijas problēmas;
- GUI;
- skriptu valodas;
- kontrolieri;
- virtuālās mašīnas;
- Mašīntulkošanu.
Turklāt, ja jūs vēlaties rakstīt preprocessors, linkers iekrāvēji, debuggers un profilers, jums jāiet cauri tādas pašas kā rakstot kompilatoru.
Jūs varat arī uzzināt, kā izveidot labākas programmas, jo izveide tulkotāja valodas nozīmē labāku izpratni par tās intricacies un neskaidrības. Par vispārējiem principiem apraides Pētījumā arī ļauj kļūt par labu dizainers valoda. Tātad, tas ir svarīgi, cik stāvas valodu, ja tas nav iespējams efektīvi īstenot?
visaptveroša tehnoloģija
kompilators tehnoloģijas aptver daudzas dažādas jomas datorzinībās:
- formāla teorija valodas: gramatiku, analizējot, computability;
- datora arhitektūra. instrukciju komplekti, RISC un CISC, nesaslēgtās apstrāde galvenie pulksteni cikliem, uc;
- koncepcijas programmēšanas valodas, piemēram, veicot secības kontrole, nosacījumu izpildes, atkārtojuma, recursion, funkcionālā sadalīšanās, modularitāte, sinhronizācija, meta-programmēšana, jomu, pastāvīga apakštipos, kas veidnes, izejas tipa, prototipi, anotācijas, plūsmas, monads, pastkastes, turpināt , aizstājējzīmes, regulāra izteiksme, darījumu atmiņas, mantojuma, polimorfisms, režīma iestatījumus, un tā tālāk, utt..;
- abstraktas valodas un virtuālās mašīnas;
- algoritmi un datu struktūras: regulāras izteiksmes, parsēšanas algoritmus, grafikas algoritmus, dinamiskā programmēšana, apmācības;
- programmēšanas valodas: sintakse, semantika (statisko un dinamisko), atbalsta paradigmām (strukturālais, OOP, funkcionālas, loģiski, kaudze, paralēlisms, meta-programmēšana);
- izveides programmatūru (kompilatori, parasti lielas un sarežģītas): lokalizācijas, caching, componentize, API saskarnēm, atkārtotas izmantošanas, sinhronizācija.
kompilators dizains
Dažas no problēmām, kas radušās, izstrādājot reālās tulkotājs:
- Problēmas ar avota valodā. Vai tas ir viegli, lai apkopotu to? Vai ir apstrādātāju? Kā veidi? Vai ir bibliotēka?
- Grupēšana kompilators caurlaides: viena vai vairāku veidu?
- Optimizācijas pakāpe vēlēšanās. Ātri un netīrs apraides programmas ar nelielu vai nekādu optimizācija var būt normāls. Over-optimizācijas kompilators būs lēns, bet labāk kods runtime var būt tā vērts.
- Nepieciešamā pakāpe kļūdu atklāšanai. Vai tulkotājs tikai pieturas pie pirmās kļūdas? Kad tas ir jāpārtrauc? Vai uzticēties kompilators kļūdu labošanu?
- Par instrumentu pieejamība. Ja oriģinālvaloda nav ļoti mazs, skeneris un ģeneratoru analizatoriem ir nepieciešams. Ir arī ģeneratori, kodu ģeneratori, bet tie nav tik bieži.
- Type of mērķa kodu, kas var rasties. Izvēlas no tīra papildināt vai virtuālo mašīnu kodu. Vai vienkārši uzrakstīt ierakstu daļu, kas rada tautas starpposma pārstāvību, piemēram, LLVM, RTL vai JVM. Vai veikt tulkojumu oriģinālu pirmkodā C vai JavaScript.
- No mērķa koda formātā. Jūs varat izvēlēties montāžas valodu, portatīvo mašīnu kodu mašīnu kodu atmiņas attēlu.
- Retargeting. Kad kopa ģeneratoru ir labi, lai būtu kopēja ieplūdes daļu. Šī iemesla dēļ tas ir labākais, lai būtu viens ģenerators, lai ieguldījumu daudzu daļām.
kompilators arhitektūra: sastāvdaļas
Tās ir galvenās funkcionālās sastāvdaļas kompilatoru, kas rada dzimtā kods (ja izejas programma ir programma, C vai virtuālo mašīnu, jums ir nepieciešams, ne tik daudz posmi):
- Ieejas programma (plūsmas zīmes) tiek padots skeneri (leksikas analizatoru), kas pārvērš to par straumē žetonu.
- Parser (parsētājs) izbūvējot vienu abstraktās sintakses koks.
- Semantic analizators sadalās semantisko informāciju, un pārbauda koku mezgliem par kļūdu. Tā rezultātā, kas celta semantikas diagrammu - abstraktās sintakses koks ar papildus īpašībām un nodibinātajiem kontaktiem.
- Intermediate koda ģenerators būvē plūsmas grafiku (tuples ir sagrupēti galvenajos blokos).
- Machine-neatkarīgs kods optimizētājs veic gan vietējā (robežās bāzes stacijas) un pasaules (visiem blokiem) optimizācijas pamatā atlikušo laikā rutīnas. Samazina lieks kodu un vienkāršo aprēķinus. Rezultāts ir modificēts plūsmas diagramma.
- Generator saistās mērķa kodu pamata bloku taisnvirziena pārraides vadības kodeksu, veidojot objektu fails montētājs virtuālo reģistru (iespējams neefektīva).
- Mašīna atkarīga optimizētājs Linker piešķir atmiņu starp reģistriem un padara plānošanas komandas. Tā veic konversijas programmu montāžas valodā šajā montāžas ar labu izmantošanu pipelining.
Turklāt, izmantojot kļūdas atklāšanas apakšsistēmas vadītājs un simbolu tabulas.
Leksiskais analīze (skenēšana)
Skeneris pārvērš plūsma avota rakstzīmes plūsmā žetonu, noņemot atstarpes, komentāriem un paplašinās makro.
Skeneri bieži sastopas ar problēmām, piemēram, to, vai ņemt vērā gadījumā, piemales, rindiņu pārtraukumi un iegultās komentārus.
Kļūdas, kas var rasties skenēšanas laikā, ko sauc par leksikas un ietver:
- rakstzīmes, kas nav alfabēta;
- liekā skaita rakstzīmes vārdu vai līnijas;
- nav slēgta zīme vai virknes literālis;
- faila beigas komentārā.
Parsēšana (parsēšana)
Sadalīšana pārvērš secību žetonu abstraktā sintakse koku. Katrs mezgls kokā tiek saglabāts kā objekts ar nosauktajām jomām, no kuriem daudzi paši ir koku mezgliem. Šajā posmā nav cikli. Kad jūs izveidot parsētājs ir nepieciešams pievērst uzmanību sarežģītības līmenim gramatikas (LL vai LR), un noskaidrot, vai ir kāds noteikumi disambiguation. Dažās valodās, to pieprasa semantisko analīzi.
Ir atrastas kļūdas šajā posmā sauc sintakse. Piemēram:
- k = 5 * (7 - y;
- j = / 5;
- 56 = x * 4.
semantiskā analīze
Laikā semantiskās analīzes , lai pārbaudītu pieļaujamību noteikumi un asociēto daļās parsēt koka (ļaujot atsauces vārdus ievietojot darbību netiešiem tipa konversiju, un D. utt.) Par veido semantisko grafiku.
Protams, kopa pieņemamības noteikumu dažādās valodās dažāda. Ja jūs sastādīt Java līdzīgu valodu, sastādītāji var atrast:
- Vairāku mainīgo deklarācija savas kompetences ietvaros;
- atsauce uz mainīgo pirms tās deklarācijā;
- norādes uz nosaukumu no nedeklarētu;
- Patenttiesību pārkāpums;
- pārmērīgi vai nepietiekams skaits argumentus par metodi zvanu;
- tips neatbilstība.
paaudze
Intermediate koda ģenerēšana rada plūsmas grafiku, kas sastāv no tuples, sagrupētas pamata blokiem.
koda ģenerēšanas ražo īstu mašīnu kodu. Tradicionālajā kompilatori šādām RISC automātiem par pirmo soli, jūs izveidojat montētājs ar neierobežotu skaitu virtuālās reģistriem. Par CISC automātiem, iespējams, nenotiks.
Similar articles
Trending Now