TietokoneetOhjelmointi

Broadcaster - on ... Tyypit kerääjiä. Muuntaa ja lähetettävien ohjelmien

Ohjelmia, sekä ihmiset kääntää kielestä toiseen tarvitset tulkkia tai kääntäjä.

peruskäsitteet

Ohjelma on kielellinen esitys laskelmat: i → P → P (i). Tulkki on ohjelma, joka syötetään tuloon ohjelman P ja noin arvolla x. Se esiintyy P x: I (P, x) = P (x). Se, että on olemassa vain yksi kääntäjä pystyy suorittamaan kaikki mahdolliset ohjelmat (jotka voidaan esittää virallisen järjestelmä) on hyvin syvällinen ja merkittävä löytö Turingin.

Prosessori on tulkki ohjelmia konekielisesti. Yleensä liian kallista kirjoittaa tulkkeja korkean tason kielillä, joten ne kääntää muotoon, joka on helpompi tulkita.

Tietyntyyppiset kääntäjät ovat hyvin outoja nimiä:

  • Kokoajan kääntää konekieliset osaksi konekieli.
  • Kääntäjä kääntää korkean tason kieli alemmalle kieltä.

Yleisradioyhtiö - on ohjelma, joka ottaa syötteenä dataa ohjelman jollain kielellä S- ja tuottaa T-ohjelman siten, että niillä molemmilla on sama semantiikkaa: P → X → Q. Eli ∀x. P (x) = Q (x).

Jos lähettää koko ohjelman joksikin tulkittavia, sitä kutsutaan koottu ennen toteuttamista tai AOT kokoelma. AOT-kääntäjä voidaan käyttää sarjassa, joista jälkimmäinen on usein kokoajan, esimerkiksi:

Lähdekoodi kääntäjä → (kääntäjä) → → assembly kokoajan (kääntäjä) → → CPU konekielelle (tulkki).

Toiminnassa tai dynaaminen kokoaminen tapahtuu, kun ohjelma lähetetään, kun suoritetaan muita aikaisemmin koottu osa. JIT-kääntäjät muistaa, mitä he ovat jo tehneet niin, ettei toista lähdekoodin uudelleen ja uudelleen. Ne voivat jopa tuottaa mukautuva kokoaminen ja yhdistelyohjelma käyttäytymisen perusteella ohjelman suoritusympäristön.

Monta kieltä sallia suorittaa koodia käännöksen yhteydessä ja koota uuden koodin suorituksen.

käännös vaiheessa

Lähetys käsittää vaiheet analysoida ja syntetisoimiseksi:

Lähdekoodi analysaattori → → → käsitteellinen esitys generaattori (syntetisaattori) → Target koodi.

Tämä johtuu seuraavista syistä:

  • Mikä tahansa muu menetelmä ei ole sopiva. Sanan kääntäminen ei yksinkertaisesti toimi.
  • Hyvä insinööri ratkaisu: jos haluat kirjoittaa kääntäjää M ja N lähdekielistä kohdennettuja tarvitsee kirjoittaa ainoastaan M + N yksinkertaisia ohjelmia (polukompilyatorov) eikä M x N monimutkaisia (yhteensä kääntäjiä).

Kuitenkin käytännössä, käsitteellinen kuva erittäin harvoin ilmeikäs tarpeeksi ja tarpeeksi tehokas kattamaan kaikkia mahdollisia lähde ja kohde kielellä. Vaikka jotkut pystyivät tulemaan lähelle tätä.

Real kerääjiä läpi monta vaihetta. Kun luot oman kääntäjä ei tarvitse toistaa kaikkia kovasta työstä, jota ihmiset ovat tehneet luoda esityksiä ja generaattoreita. Voit kääntää kieltä suoraan JavaScript tai C ja hyödyntää olemassa olevia JavaScript-moottori ja C-kääntäjän hoitaa loput. Voit myös käyttää olemassa olevia väli edustus ja virtuaalikoneita.

ennätys kääntäjä

Yleisradioyhtiö - on ohjelma tai laitteisto, johon osallistui kolme kieltä: lähde, kohde ja perusta. Ne voidaan kirjoittaa T-muoto, asettamalla alkuperäinen vasen, oikea ja kohdetukiasema alla.

On olemassa kolmenlaisia kerääjiä:

  • Lähetystoiminnan - on samokompilyator, jos se vastaa perus lähdekielen.
  • Kääntäjä joka kohdekieltä perustason, nimeltään samorezidentnym.
  • Yleisradioyhtiö - rajat kääntäjä, jos hän kohdennettuja ja perus eri kielillä.

Miksi tämä on tärkeää?

Vaikka et koskaan tehdä todellista kääntäjä, hyvä tuntemus teknologian perustamisestaan koska käsite käyttää tähän tarkoitukseen käytetään laajasti, esimerkiksi:

  • Tekstin;
  • kieli kyselyitä tietokantoihin;
  • kokeneille tietokoneiden arkkitehtuuri;
  • yleistynyt optimointiongelmia;
  • graafisia;
  • ohjelmointikieliä;
  • ohjaimet;
  • virtuaalinen kone;
  • Konekääntäminen.

Lisäksi, jos haluat kirjoittaa esiprosessorit, linkkereitä, kuormaajat, testaustyökalutkin ja profilers, sinun täytyy käydä läpi samat vaiheet kuin kirjoitettaessa kääntäjä.

Voit myös opetella kirjoittamaan parempia ohjelmia, perustamisen jälkeen kääntäjän kielen tarkoittaa parempaa ymmärtämistä sen koukeroita ja epäselvyyksiä. Tutkimus yleisten periaatteiden yleisradio voi myös tulla hyvä suunnittelija kieltä. Joten sillä on väliä miten jyrkkä kieltä, jos sitä ei voida toteuttaa tehokkaasti?

kattava teknologia

kääntäjätekniikka kattaa monia eri alojen tietojenkäsittelytieteen:

  • muodollinen teoria kieli: kielioppi, jäsennys, laskettavuuden;
  • tietokone arkkitehtuuri: käskykannat, RISC tai CISC, liukuhihna käsittely ydin kellojaksoa, jne.;
  • käsitteet ohjelmointikieliä, esimerkiksi, suorittaa sekvenssin ohjaus, ehdollinen suorittamisen, iteraatio, rekursio, toiminnallisia hajoaminen, modulaarisuus, synkronointi, meta-ohjelmointi, laajuus, vakio alatyyppejä, malleja, lähtö tyyppi, prototyyppejä, merkinnät, virtaus, monadeja, postilaatikoita, jatkaa jokerimerkit, säännöllinen lauseke, kaupallisen muisti, periytyminen, polymorfismi, tila-asetukset, ja niin edelleen. jne.;
  • abstrakteja kieliä ja virtuaalikoneiden;
  • algoritmit ja tietorakenteet: säännöllisiä lausekkeita, jäsentämiseen algoritmeja, grafiikka algoritmit, dynaaminen ohjelmointi, koulutus;
  • ohjelmointikieliä: syntaksi, semantiikka (staattinen ja dynaaminen), tuki paradigmoja (rakenteellinen, OOP, funktionaalinen, looginen, pino, rinnakkaisuus, meta-ohjelmointi);
  • -ohjelmiston (kääntäjiä, yleensä suuria ja monimutkaisia): lokalisointi, välimuisti, componentize, API-rajapinnat, uudelleen käyttöön, synkronointi.

kääntäjä muotoilu

Jotkut ongelmat kehittämisessä todellinen kääntäjä:

  • Ongelmia lähdekieli. Onko helppo kääntää sen? Onko esikäsittelijään? Miten tyyppejä? Onko kirjastossa?
  • Ryhmittely kääntäjä kulkee: yhden tai usean tavalla?
  • Aste optimointi halutaan. Nopea ja saastainen lähettävät ohjelmia, joilla on vähän tai ei lainkaan optimointi voi olla normaalia. Yli-optimointi kääntäjä hidastuu, mutta parempaa koodia suorituksen voi olla sen arvoista.
  • Koska haluttu virheiden havaitsemiseen. Voiko kääntäjä vain pysähtyy ensimmäisen virheen? Kun se pitäisi lopettaa? Onko luottaa kääntäjä virheenkorjausta?
  • Saatavuuden työkaluja. Jos alkuperäinen kieli ei ole kovin pieni, skannerin ja generaattorin analysaattorit tarvitaan. Myös generaattorit, koodi generaattorit, mutta ne eivät ole niin yleisiä.
  • Kohdenukleiinihapon tyypistä, koodi generoidaan. Valittava puhtaasta täydennetty tai virtuaalikoneen koodia. Tai vain kirjoittaa tekstin osa, joka luo suosittu väli esitys kuten llvm, RTL, tai JVM. Tai tehdä käännös alkuperäisestä lähdekoodin C tai JavaScript.
  • Muodon määränpääkoodi. Voit valita konekielellä, kannettava kone koodin, konekielelle muistikuva.
  • Uudelleenkohdistaminen. Kun joukko generaattorit on hyvä olla yhteinen sisäänmeno-osan. Tästä syystä se on parasta olla yksi generaattori panos monista osista.

kääntäjä Arkkitehtuuri: komponentit

Nämä ovat tärkeimmät toiminnalliset osat kääntäjä, joka luo koodiksi (jos tuotanto-ohjelma on C tai virtuaalikoneen, sinun ei tarvitse niin monta vaihetta):

  • Ohjelmoidun (virtaus tavaramerkit) syötetään skannerin (sanastoanalysaattori), joka muuntaa sen virran kuponkia.
  • Parser (jäsennin) rakentamalla yksi abstraktin syntaksipuun.
  • Semanttinen analysaattori hajottaa semanttista informaatiota ja tarkistaa puun solmut virheitä. Tämän seurauksena rakennettu semanttinen kuvaaja - tiivistelmä syntaksipuun ylimääräisiä ominaisuuksia ja luonut yhteyksiä.
  • Välikoodigeneraattorin rakentaa tilavuokaavio (monikon on ryhmitelty päälohkosta).
  • Kone riippumaton koodi Optimizer tekee sekä paikallisia (etäisyys tukiasemaan) ja globaalin (kaikki lohkot) optimointi pohjimmiltaan pysyen rutiineja. Vähentää tarpeeton koodi ja yksinkertaistaa laskutoimituksia. Tuloksena on muunnettu tilavuokaavio.
  • Generaattori sitoutuu kohde-koodi peruslohkoja suoraviivaiseksi lähetyksen koodin, luodaan objekti tiedosto assembler virtuaalisen rekistereihin (mahdollisesti tehoton).
  • Konekohtaisia Optimizer, linkkeri varaa muistia rekistereiden välillä ja tekee suunnittelu joukkueet. Se suorittaa muuntaminen ohjelman konekielellä tämä kokoonpano, jossa on hyvä käyttää Liukuhihnoituksen.

Lisäksi käyttö virheiden alijärjestelrnä johtaja ja symboli taulukot.

Leksikaalinen analyysi (skannaus)

Skanneri muuntaa streamin lähde merkkejä virraksi merkkejä, välilyöntien poistaminen, kommentteja ja laajentaa makroja.

Skannerit usein ongelmia, kuten vai ei oteta huomioon tapauksen, marginaalit, rivinvaihdot ja sulautettujen kommentteja.

Virheitä, jotka voivat ilmetä skannauksen aikana, jota kutsutaan leksikaalisia ja sisältää:

  • merkkejä, jotka eivät aakkosissa;
  • ylimäärä merkkien määrä sana tai rivi;
  • ei ole suljettu merkki tai merkkijono kirjaimellisesti;
  • tiedoston loppu kommentoida.

Jäsennys (jäsennys)

Jäsennin muuntaa sekvenssin rahakkeiden osaksi abstrakti syntaksin puu. Kukin solmu puussa tallennetaan objektin nimi kenttiä, joista monet ovat itse puun solmut. Tässä vaiheessa ei ole sykliä. Kun luot tulkinta on tarpeen kiinnittää huomiota tasolle monimutkaisuuden kieliopin (LL tai LR) ja selvittää, onko olemassa mitään sääntöjä täsmennyssivulta. Jotkin kielet eivät vaadi semanttinen analyysi.

Virheitä löytyi tässä vaiheessa kutsutaan syntaksin. Esimerkiksi:

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

semanttinen analyysi

Aikana semanttinen analyysi tarkistaa hyväksyttävyyttä sääntöjen ja yhdistää osat jäsennyspuu (jolloin viite nimet lisäämällä operaation implisiittinen tyyppi tuloksia, ja niin edelleen. D.) muodostamista varten semanttisen kuvaajan.

On selvää, että joukko hyväksyttävyyttä sääntöjä eri kielillä eri. Jos käännät Java-kuin kieliä, kääntäjät voivat löytää:

  • Useiden Muuttujan piirissään;
  • viittaus muuttujaan ennen ilmoitustaan;
  • viittauksia nimi pimeän;
  • rikkominen patenttioikeuksien;
  • Liian suuri tai riittämätön määrä argumentteja menetelmässä puhelun;
  • tyyppivirhe.

sukupolvi

Välituote koodin generointi tuottaa virtauksen kuvaaja koostuu monikon, ryhmitelty peruslohkot.

koodin generointi on todellinen konekielelle. Perinteisessä kääntäjät RISC-koneiden ensimmäinen askel, luot kokoonpanija kanssa ääretön määrä virtuaalisia rekistereitä. For CISC-koneissa ei luultavasti tapahdu.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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