Movatterモバイル変換


[0]ホーム

URL:


Preskočiť na obsah
WikipédiaSlobodná encyklopédia
Hľadať

Preprocessor

z Wikipédie, slobodnej encyklopédie

Preprocesor alebopredkompilátor je v informatikeprogram, ktorý spracováva svoje vstupné dáta, aby vytvoril výstup, ktorý sa používa ako vstup pre iný program. Výstup je považovaný zapredspracovanú formu vstupných údajov, ktoré často používajú niektoré následné programy, ako súkompilátory. Množstvo a druh vykonaného spracovania závisí od povahy preprocesora; niektoré preprocesory sú schopné vykonávať iba relatívne jednoduché textové substitúcie a rozšírenia makier, zatiaľ čo iné majú silu plnohodnotnýchprogramovacích jazykov.

Bežným príkladom zpočítačového programovania je spracovanie vykonané nazdrojovom kóde pred ďalším krokom kompilácie. V niektorýchpočítačových jazykoch (napr.C aPL/I) existuje fázaprekladu známa ako predspracovanie (preprocessing). Môže tiež zahŕňať spracovanie makier, zahrnutie súborov a jazykové prípony.

Lexikálne preprocesory

[upraviť |upraviť zdroj]

Lexikálne preprocesory sú najnižšou úrovňou preprocesorov, pretože vyžadujú ibalexikálnu analýzu, to znamená, že pracujú so zdrojovým textom pred akoukoľvekanalýzou vykonávaním jednoduchého nahradeniatokenizovaných sekvencií znakov za iné tokenizované sekvencie znakov podľa užívateľom definovaných pravidiel. Zvyčajne vykonávajúsubstitúciu makra,textové zahrnutie iných súborov a podmienenú kompiláciu alebo zahrnutie.

C preprocesor

[upraviť |upraviť zdroj]

Najbežnejším príkladom jeC preprocesor, ktorý používa riadky začínajúce znakom '#' akodirektívy. Pretože nevie nič o základnom jazyku, jeho použitie bolo kritizované a mnohé z jeho funkcií sú priamo zabudované do iných jazykov. Napríklad makrá nahradené agresívnym vložením a šablónami, vrátane importov v čase kompilácie (to si vyžaduje zachovanie typových informácií v kóde objektu, čo znemožňuje spätné prispôsobenie tejto funkcie do jazyka);podmienená kompilácia sa v niektorých jazykoch efektívne vykonáva pomocouif-then-else aeliminácie mŕtveho kódu. Kľúčovým bodom na zapamätanie je však to, že všetky príkazy preprocesora by mali začínať na novom riadku.

Iné lexikálne preprocesory

[upraviť |upraviť zdroj]

Medzi ďalšie lexikálne preprocesory patrí univerzálny m4, ktorý sa najčastejšie používa v systémoch zostavovania medzi platformami, ako je autoconf, a GEMA, makroprocesor s otvoreným zdrojovým kódom, ktorý pracuje so vzormi kontextu.

Syntaktické preprocesory

[upraviť |upraviť zdroj]

Syntaktické preprocesory boli zavedené s rodinou jazykovLisp. Ich úlohou je transformovať syntaktické stromy podľa niekoľkých pravidiel definovaných používateľom. Pre niektoré programovacie jazyky sú pravidlá napísané v rovnakom jazyku ako program. To je prípadLisp aOCaml. Niektoré iné jazyky sa pri definovaní transformácií spoliehajú na úplne externý jazyk, ako napríklad preprocesorXSLT preXML alebo jeho staticky typovaný náprotivokCDuce.

Syntaktické preprocesory sa zvyčajne používajú na prispôsobenie syntaxe jazyka, rozšírenie jazyka pridaním nových primitív alebo vloženiedoménovo špecifického programovacieho jazyka (DSL) do jazyka na všeobecné použitie.

Prispôsobenie syntaxe

[upraviť |upraviť zdroj]

Dobrým príkladom prispôsobenia syntaxe je existencia dvoch rôznych syntaxov v programovacom jazykuObjective Caml. Programy môžu byť napísané ľahostajne pomocou „normálnej syntaxe“ alebo „revidovanej syntaxe“ a môžu byť na požiadanie pekne vytlačené s ktoroukoľvek syntaxou.

Podobne množstvo programov napísaných vOCaml prispôsobuje syntax jazyka pridaním nových operátorov.

Rozšírenie jazyka

[upraviť |upraviť zdroj]

Najlepšie príklady rozšírenia jazyka prostredníctvom makier možno nájsť v rodine jazykovLisp. Zatiaľ čo jazyky sú samy osebe jednoduchými dynamicky typovanými funkčnými jadrami, štandardné distribúcieScheme alebo Common Lisp umožňujú imperatívne alebo objektovo orientované programovanie, ako aj statické písanie. Takmer všetky tieto funkcie sú implementované syntaktickým predspracovaním, aj keď je potrebné poznamenať, že fázu kompilácie „rozširovania makra“ má na starosti kompilátor v Lispe. Toto možno stále považovať za formu predspracovania, pretože prebieha pred ďalšími fázami kompilácie.

Špecializácia na jazyk

[upraviť |upraviť zdroj]

Jednou z neobvyklých vlastností rodiny jazykovLisp je možnosť použitia makier na vytvorenie interného DSL. Vo veľkom projekte založenom na jazykuLisp môže byť modul zvyčajne napísaný v rôznych minijazykoch, jeden môže používať dialekt jazykaLisp založený naSQL, ďalší je napísaný v dialekte špecializovanom nagrafické používateľské rozhranie alebo peknú tlač atď. Štandardná knižnica Common Lisp obsahuje príklad tejto úrovne syntaktickej abstrakcie vo forme makra LOOP, ktoré implementuje minijazyk podobný Algolu na opis komplexnej iterácie, pričom stále umožňuje použitie štandardných operátorov Lisp.

Preprocesor/jazykMetaOCaml poskytuje podobné funkcie pre externé DSL. Tento preprocesor preberá popis sémantiky jazyka (tj tlmočníka) a kombináciou interpretácie v čase kompilácie a generovania kódu premení túto definíciu na kompilátor do programovacieho jazykaOCaml – az tohto jazyka buď do bajtkódu alebo do natívny kód.

Predprocesor na všeobecné použitie

[upraviť |upraviť zdroj]

Väčšina preprocesorov je špecifická pre konkrétnu úlohu spracovania údajov (napr.kompilácia jazyka C). Preprocesor môže byť propagovaný akovšeobecný, čo znamená, že nie je zameraný na konkrétne použitie alebo programovací jazyk a je určený na použitie pre širokú škálu úloh spracovania textu.

M4 je pravdepodobne najznámejším príkladom takéhoto preprocesora na všeobecné použitie, hoci preprocesor C sa niekedy používa v úlohe, ktorá nie je špecifická pre C.

Príklady:

  • pomocou C preprocesora na predspracovanieJavaScriptu.
  • pomocou C preprocesora na spracovanie stromu zariadení vjadre Linuxu.
  • pomocou M4 alebo C preprocesora ako šablónového nástroja na generovanieHTML.
  • imake, make rozhranie využívajúce C preprocesor, napísané preX Window System, ale teraz zastarané v prospech automake.
  • grompp, preprocesor pre simulačné vstupné súbory pre GROMACS (rýchly, bezplatný, open-source kód pre niektoré problémy vovýpočtovej chémii), ktorý volá systémový preprocesor C (alebo iný preprocesor, ako je určený vstupným súborom simulácie), aby analyzoval topológiu, na určenie efektívnej topológie v čase behu grompp väčšinou používame mechanizmy #define a #include.

GPP je všeobecný lexikálny preprocesor, ktorý sa podobá cpp. Okrem iného ho možno použiť na predbežné spracovanie markdown súborov.

Zdroj

[upraviť |upraviť zdroj]

Tento článok je čiastočný alebo úplný preklad článkuPreprocessor na anglickej Wikipédii.

Zdroj: „https://sk.wikipedia.org/w/index.php?title=Preprocessor&oldid=7880469
Kategórie:

[8]ページ先頭

©2009-2026 Movatter.jp