Előfeldolgozó

Az előfeldolgozó  olyan számítógépes program , amely bemeneti és kimeneti adatokat vesz fel, amelyeket egy másik program (például fordító ) bevitelére szánt. Az előfeldolgozó kimenete előre feldolgozott formában van, amely alkalmas arra, hogy a következő programok (fordító) feldolgozzák. A feldolgozás eredménye és típusa az előfeldolgozó típusától függ; például egyes előfeldolgozók csak egyszerű szöveghelyettesítést tudnak végrehajtani, mások a programozási nyelvekhez hasonló képességekre képesek. Az előfeldolgozók legáltalánosabb használata a forráskód feldolgozása, mielőtt azt a következő fordítási lépéshez továbbítanák. Programozási nyelvek C / C++és a TeX számítógépes elrendezési rendszer előprocesszorokat használ, amelyek nagymértékben kibővítik a képességeiket.

Egyes programozási nyelvekben a fordítási és fordítási lépéseket "előfeldolgozásnak" nevezik.

Lexikai előfeldolgozók

A lexikális előfeldolgozókat alacsony szintű előfeldolgozóknak nevezzük, mert csak lexikális elemzést igényelnek , vagyis csak a forrásszöveget dolgozzák fel elemzés előtt , egyszerűen lecserélik a lexémákat és a speciális karaktereket adott karaktersorozatokra, a felhasználók által meghatározott szabályok szerint. Általában makróhelyettesítést , szövegbeszúrást más fájlokból, valamint feltételes fordítást vagy fájlhivatkozást hajtanak végre.

Előfeldolgozás C/C++ nyelven

A legszélesebb körben használt lexikális előfeldolgozó a C programozási nyelvekben használt C nyelvi előfeldolgozó és ennek leszármazottja, a C++ . Az előfeldolgozó eltávolítja a megjegyzéseket a kódból , átalakítja a kódot a makróknak megfelelően, és végrehajt más, "#" karakterrel kezdődő direktívákat (például #include, #define, különféle direktívákat, például #pragma).

PHP programozási nyelv

A PHP -t leggyakrabban weboldal -feldolgozásban használják . Az oldal szövege beolvasásra és változatlan formában jelenik meg. Az egyetlen kivétel a PHP utasítások jelenléte az oldal törzsében, elválasztva <?phpaz elején és ?>a végén.

Példa az aktuális időt tartalmazó oldal szövegére:

<!DOCTYPE html NYILVÁNOS "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> < html > < fej > < cím > Jelenlegi idő </ title > </ head > < body > < h1 > Current time </ h1 > <?php print strftime('A jelenlegi idő %H óra, %M perc %S másodperc');  ?> </ body > </ html >

A PHP előfeldolgozó a kiemelt sort a következőre cseréli:

<!DOCTYPE html NYILVÁNOS "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> < html > < fej > < cím > Jelenlegi idő </ title > </ head > < body > < h1 > Current time </ h1 > Most 10 óra 15 perc 20 másodperc van </ body > </ html >

Egyéb lexikális előfeldolgozók

Más lexikális előfeldolgozók támogatják az m4 univerzális nyelvet , amelyet gyakran használnak a többplatformos felépítési rendszerekben, például az autoconf -ban és a GEMA -ban, amely egy kontextussablonokon  alapuló nyílt forráskódú makrómotor .

Szintaxis előfeldolgozók

A szintaxis-előfeldolgozókat először a Lisp nyelvcsaládban vezették be . Feladatuk az volt, hogy a felhasználó által meghatározott szabályok szerint dolgozzák fel a szintaktikai fákat. Egyes programozási nyelvek esetében a szabályokat ugyanazon a nyelven írták, mint magát a programot (fordítási szimmetria). A Lisp és az OCaml példa erre . Egyes nyelvek teljesen független nyelvet használnak az átalakítások leírására, például az XSLT előfeldolgozó XML -hez vagy annak megfelelője a CDuce statikus típusokkal .

A szintaxis-előfeldolgozókat általában egy nyelv szintaxisának finomítására, a nyelv kiterjesztésére új primitívek hozzáadásával vagy egy tartományspecifikus programozási nyelv beágyazására használják a gazdagép nyelvébe.

Szintaxis módosítások

A szintaxis módosításának jó példája a két különböző szintaxis [1] létezése az Objective Caml programozási nyelvben . A programok normál vagy rögzített szintaxissal írhatók , a választás a programozó preferenciáitól függ.

Hasonlóképpen, egy OCaml-ben írt programkészlet képes a nyelv szintaxisának testreszabására új operátorok hozzáadásával.

Nyelvi kiterjesztés

A nyelv makróval való kiterjesztésének kiváló példája a Lisp programozási nyelvcsaládban való használatuk . Míg ezek a nyelvek maguk is egyszerű kernelekkel rendelkeznek, amelyek a dinamikus típusokra összpontosítanak, a szabványos kellékek Scheme , Common Lisp imperatives és objektumorientált programozás a statikus típusokra összpontosít. Ezeket a funkciókat szinte mindegyik szintaktikai előfeldolgozó implementálja, bár ez a Lisp fordító által vezérelt "makrókiterjesztés" fordítási lépés nyomát viseli. Ez továbbra is az előfeldolgozás egy formájának tekinthető, ahogyan ez a fordítás többi lépése előtt is megtörténik.

Hasonlóképpen típusbiztos reguláris kifejezések vagy kódgenerálás is hozzáadható az OCaml szintaxisához és szemantikájához makrók, például mikroszálak (más néven korutinok vagy szálak ), monádok vagy transzparens XML-feldolgozás segítségével.

Szaknyelv

A Lisp nyelvcsalád egyik szokatlan tulajdonsága az a képesség, hogy makrókat lehet használni egy beágyazott tartományspecifikus programozási nyelv létrehozására . Általában sok Lisp nyelven írt projektben egy modul sok ilyen mininyelven írható, azaz az egyik a Lisp SQL dialektusát használhatja, a másik pedig egy grafikus felhasználói felület vagy nyomtató orientált dialektusban írható, és így tovább. A Common Lisp standard könyvtár példát tartalmaz a szintaktikai absztrakció ilyen szintjére a LOOP makró formájában, amely olyan mininyelveket valósít meg, mint az Algol, hogy leírja az összetett iterációt, miközben megtartja a szabványos Lisp operátorok használatának lehetőségét.

Az előfeldolgozó/nyelvi MetaOCaml hasonló képességeket biztosít, mint egy külső tartomány-specifikus programozási nyelv . Ez az előfeldolgozó, amely megkapja a nyelv szemantikájának leírását (az ún. "értelmezés") és a fordítás és a kódgenerálás során az értelmezést kombinálja, ezt a definíciót továbbítja az OCaml nyelv fordítójának , amely a nyelv alapján bájtkódot hoz létre. vagy természetes kód.

Általános célú makroprocesszor

Az előfeldolgozók, amelyek csak a fordítás egyik szakaszát végzik, a töredékes adatfeldolgozás feladatára koncentrálnak (például a C nyelv fordítására ). A hasonló, akkoriban makroprocesszoroknak nevezett programok általános célokat is szolgálhatnak, vagyis nem egy meghatározott használati vagy programozási nyelv megvalósítására szolgálnak, hanem adatfeldolgozási feladatok széles körének felhasználására készültek.

Az m4 makroprocesszor valószínűleg a legismertebb példa egy ilyen általános célú makroprocesszorra.

Példák

Érdekes tények

  • A széles körben használt PHP előfeldolgozó neve rekurzív mozaikszó : PHP " p hp: h ypertext preprocessor " .

Lásd még

Jegyzetek

  1. A felülvizsgált szintaxis . Letöltve: 2008. július 13. Az eredetiből archiválva : 2015. szeptember 24..
  2. T. Snyder. A JavaScript nem ipari erő Archivált 2008. január 16. a Wayback Machine -nél Hogyan használjuk a C előfeldolgozót JavaScript kódhoz
  3. J. Korpela. C előfeldolgozó használata HTML-készítő eszközként Archiválva : 2015. december 8. a Wayback Machine 2000-ben.

Linkek