Esiprosessori

Esiprosessori  on tietokoneohjelma, joka vastaanottaa ja tulostaa tietoja, jotka on tarkoitettu toisen ohjelman (kuten kääntäjän ) syöttäviksi. Esiprosessorin lähdön sanotaan olevan esikäsitellyssä muodossa, joka soveltuu myöhempien ohjelmien (kääntäjän) käsittelyyn. Prosessoinnin tulos ja tyyppi riippuvat esiprosessorin tyypistä; Esimerkiksi jotkut esiprosessorit voivat suorittaa vain yksinkertaisen tekstin korvaamisen, toiset pystyvät verrattavissa ohjelmointikieliin. Esiprosessorin yleisin käyttötapa on käsitellä lähdekoodia ennen sen siirtämistä seuraavaan käännösvaiheeseen. C / C++ - ohjelmointikielet ja TeX - tietokoneasettelujärjestelmä käyttävät esiprosessoreita , jotka laajentavat huomattavasti niiden ominaisuuksia.

Joissakin ohjelmointikielissä käännös- ja käännösvaiheita kutsutaan "esikäsittelyksi".

Leksiset esiprosessorit

Leksisia esikäsittelijöitä kutsutaan matalan tason esiprosessoreiksi, koska ne vaativat vain leksikaalista analyysiä , eli ne käsittelevät vain lähdetekstin ennen jäsentämistä , yksinkertaisesti korvaamalla lekseemit ja erikoismerkit tietyillä merkkisarjoilla käyttäjien asettamien sääntöjen mukaisesti. Ne suorittavat yleensä makrokorvauksia , tekstin lisäyksiä muista tiedostoista ja ehdollisen käännöksen tai tiedostolinkityksen.

Esikäsittely C/C++:ssa

Yleisimmin käytetty leksikaalinen esiprosessori on C-ohjelmointikielissä käytetty C-kielen esiprosessori ja sen jälkeläinen C++ . Esiprosessori poistaa kommentit koodista , muuntaa koodin makrojen mukaisesti ja suorittaa muut #-merkillä alkavat käskyt (kuten #include, #define, erilaisia ​​ohjeita, kuten #pragma).

PHP-ohjelmointikieli

PHP :tä käytetään yleisimmin web-sivujen käsittelyssä . Sivun teksti luetaan ja näytetään muuttumattomana. Ainoa poikkeus on PHP-ohjeiden läsnäolo sivun rungossa, erotettuna <?phpalussa ja ?>lopussa.

Esimerkki nykyisen ajan sisältävän sivun tekstistä:

<!DOCTYPE html JULKINEN "-//W3C//DTD HTML 4.01 Transitional//FI" "http://www.w3.org/TR/html4/loose.dtd"> < html > < head > < title > Current aika </ title > </ head > < body > < h1 > Nykyinen aika </ h1 > <?php print strftime('Nykyinen aika on %H tuntia, %M minuuttia %S sekuntia');  ?> </ body > </ html >

PHP-esiprosessori korvaa korostetun rivin seuraavasti:

<!DOCTYPE html JULKINEN "-//W3C//DTD HTML 4.01 Transitional//FI" "http://www.w3.org/TR/html4/loose.dtd"> < html > < head > < title > Current aika </ title > </ head > < body > < h1 > Nykyinen aika </ h1 > Kello on nyt 10 tuntia, 15 minuuttia 20 sekuntia </ body > </ html >

Muut leksikaaliset esiprosessorit

Muut leksikaaliset esiprosessorit tukevat yleismaailmallista m4 -kieltä , jota käytetään yleisesti monialustaisissa rakennusjärjestelmissä, kuten autoconf , ja GEMA  , avoimen lähdekoodin makromoottori, joka perustuu kontekstimalleihin .

Syntaksin esiprosessorit

Syntaksin esiprosessorit esiteltiin ensimmäisen kerran Lisp - kieliperheessä . Heidän tehtävänsä oli käsitellä syntaksipuita käyttäjän määrittelemien sääntöjen mukaisesti. Joillekin ohjelmointikielille säännöt kirjoitettiin samalla kielellä kuin itse ohjelma (käännössymmetria). Lisp ja OCaml ovat esimerkkejä . Jotkut kielet käyttävät täysin itsenäistä kieltä kuvaamaan muunnoksia, kuten XSLT - esiprosessori XML :lle tai sen vastaava CDuce- staattisten tyyppien kanssa .

Syntaksin esikäsittelijöitä käytetään yleisesti kielen syntaksin tarkentamiseen, kielen laajentamiseen lisäämällä uusia primitiivejä tai toimialuekohtaisen ohjelmointikielen upottamiseksi isäntäkieleen.

Syntaksin muutokset

Hyvä esimerkki syntaksin muuttamisesta on Objective Caml -ohjelmointikielessä kahden eri syntaksin [1] olemassaolo . Ohjelmat voidaan kirjoittaa tavallisella syntaksilla tai kiinteällä syntaksilla , valinta riippuu ohjelmoijan mieltymyksistä.

Samoin OCamlissa kirjoitetuilla ohjelmilla on mahdollisuus mukauttaa kielen syntaksia lisäämällä uusia operaattoreita.

Kielilaajennus

Erinomainen esimerkki kielen laajentamisesta makroilla on niiden käyttö Lisp - ohjelmointikieliperheessä . Vaikka näillä kielillä itsessään on yksinkertaisia ​​ytimiä, jotka keskittyvät dynaamisiin tyyppeihin, vakiovarusteet Scheme , Common Lisp imperatives ja olio-ohjelmointi keskittyvät staattisiin tyyppeihin. Melkein kaikki nämä ominaisuudet toteutetaan syntaktisilla esiprosessoreilla, vaikka tässä onkin jäljennös Lisp-kääntäjän ohjaamasta "makrolaajennus"-kääntämisvaiheesta. Tätä voidaan edelleen pitää esikäsittelynä, kuten se tapahtuu ennen muita käännösvaiheita.

Samoin tyyppiturvallisia säännöllisiä lausekkeita tai koodin luontia voidaan lisätä OCamlin syntaksiin ja semantiikkaan käyttämällä makroja, kuten mikrosäikeitä (tunnetaan myös nimellä korutiinit tai kuidut ) , monadeja tai läpinäkyvää XML-käsittelyä.

Erikoiskieli

Yksi Lisp -kieliperheen epätavallisista ominaisuuksista on kyky käyttää makroja upotetun verkkotunnuskohtaisen ohjelmointikielen luomiseen . Tyypillisesti suuressa määrässä Lisp-kielellä kirjoitettuja projekteja moduuli voidaan kirjoittaa monilla tällaisilla minikielillä, eli yksi voidaan käyttää Lispin SQL - murretta ja toinen voidaan kirjoittaa GUI- tai tulostinsuuntautuneella murteella ja niin edelleen. Common Lisp -standardikirjasto sisältää esimerkin tällaisesta syntaktisesta abstraktiosta LOOP-makron muodossa, joka toteuttaa Algolin kaltaisia ​​minikieliä kuvaamaan monimutkaista iteraatiota säilyttäen samalla mahdollisuuden käyttää tavallisia Lisp-operaattoreita.

Esiprosessori /kieli MetaOCaml tarjoaa samanlaisia ​​ominaisuuksia kuin ulkoinen toimialuekohtainen ohjelmointikieli . Tämä esiprosessori, joka vastaanottaa kuvauksen kielen semantiikasta (ns. "tulkinta") ja yhdistää tulkinnan kääntämisen ja koodin luomisen aikana, välittää tämän määritelmän OCaml -kielen kääntäjälle , joka tämän kielen perusteella luo tavukoodin. tai luonnollinen koodi.

Yleiskäyttöinen makroprosessori

Esikäsittelijät, jotka suorittavat vain yhden käännösvaiheista, keskittyvät fragmentaariseen tietojenkäsittelyyn (esimerkiksi C - kielen kääntämiseen ). Samankaltaiset ohjelmat, joita silloin kutsutaan makroprosessoreiksi , voivat olla myös yleiskäyttöisiä, eli niitä ei ole tarkoitettu toteuttamaan tiettyä käyttö- tai ohjelmointikieltä, vaan ne on suunniteltu käyttämään monenlaisia ​​tietojenkäsittelytehtäviä.

M4- makroprosessori on luultavasti tunnetuin esimerkki tällaisesta yleiskäyttöisestä makroprosessorista.

Esimerkkejä

  • C-esiprosessorin käyttö JavaScript - koodin esikäsittelyyn [2] .
  • M4 :n (katso esimerkki artikkelista) tai C-esiprosessorin käyttäminen mallimoottorina HTML : n luomiseen . [3]
  • imake ( liittymästä make ) käyttää C-esiprosessoria. Käytettiin X Window System -projektissa ennen siirtymistä automakeen .
  • grompp on makroprosessori GROMACS -projektin mallitiedostoille (Free Open Source Software for Computational Chemistry ). Oletusarvoisesti se käyttää C-esisuoritinta, mutta mikä tahansa muu esiprosessori voidaan määrittää mallitiedostoon. Käytetään merkintöjen vahvistamiseen. Käyttää direktiivejä #defineja #include.

Mielenkiintoisia faktoja

  • Yleisesti käytetyn PHP -esikäsittelyohjelman nimi on rekursiivinen lyhenne : PHP on " p hp: h ypertext preprocessor " .

Katso myös

Muistiinpanot

  1. Tarkistettu syntaksi . Haettu 13. heinäkuuta 2008. Arkistoitu alkuperäisestä 24. syyskuuta 2015.
  2. T. Snyder. JavaScript is Not Industrial Strength Arkistoitu 16. tammikuuta 2008 Wayback Machinessa Kuinka käyttää C-esiprosessoria JavaScript-koodille
  3. J. Korpela. C-esiprosessorin käyttäminen HTML-muotoilutyökaluna Arkistoitu 8. joulukuuta 2015 Wayback Machine 2000:ssa.

Linkit