A Stratego termátíró rendszer

Fordítók

A nyelv nem szabványosított; a http://strategoxt.org/ webhelyen leírtak és az onnan letölthető implementáció tekinthető de facto standardnak.

A keretrendszer eredeti megvalósításának nyelve a C és az eszközök parancssori használatra lettek optimalizálva. Később elkészült egy port Java környezetbe, melyre egy Eclipse-alapú integrált fejlesztőkörnyezet is épül (Spoofax/IMP).

Referencia-implementáció

Interaktív interpreter

A nyelv lehetőségei leggyorsabban a Stratego Shell programmal próbálhatóak ki. A program nem az alapvető Stratego/XT disztribúció része, de a fejlesztők megegyeznek. A szoftvert a Stratego/XT fejlesztői készítik; ugyanarról a honlapról tölthető le.

Telepítés után a stratego-shell programot elindítva egy stratego> paranccsor fogad. Az aktív sorba egy stratégiát, stratégiadefiníciót, szabálydefiníciót vagy import direktívát írhatunk vagy az interpreternek egy interpreter-specifikus utasítást adhatunk. A legfontosabbak:

Az interpreter - mint egy Stratego program - rendelkezik egy aktív termmel. Ha egy stratégiát hajttatunk végre, és a végrehajtás sikeres, megfelelően változik az aktív term. Ha a végrehajtás sikertelen, erről a tényről az interpreter a command failed közléssel tájékoztat; ekkor az aktív term nem változik. Az aktív termet minden utasítás végrehajtása után kiírja.

Az interpreter használatára példa található a 15. fejezetben.

Fordító

Stratego nyelvű programok fordításához az strc program használható. A program egyetlen kötelező parancssori paramétere a -i, amivel a lefordítandó fájl nevét adjuk meg.

Például:

$ strc -i identity.str [ strc | info ] Compiling 'identity.str' [ strc | info ] Front-end succeeded : [user/system] = [0.59s/0.56s] [ strc | info ] Back-end succeeded : [user/system] = [0.46s/0.16s] [ strc | info ] C compilation succeeded : [user/system] = [0.28s/0.23s] [ strc | info ] Compilation succeeded : [user/system] = [1.35s/0.95s]

A fordító a következő fájlokat generálja:

Az strc program további fontos kapcsolói:

Függvénykönyvtár az aktuális verzióban több lépésben hozható létre: először létrehozzuk a megfelelő C nyelvű forrásállományt, majd azt - immár C programként - fordítjuk le. Például a következő munkamenetben statikusan szerkeszthető függvénykönyvtárat hozunk létre a prop-laws.str fájl alapján:

$ strc -i prop-laws.str -c -o libproplib.rtree --library [ strc | info ] Compiling 'proplib.str' [ strc | info ] Front-end succeeded : [user/system] = [4.71s/0.77s] [ strc | info ] Abstract syntax in 'libproplib.rtree' [ strc | info ] Concrete syntax in 'libproplib.str' [ strc | info ] Export of externals succeeded : [user/system] = [2.02s/0.11s] [ strc | info ] Back-end succeeded : [user/system] = [6.66s/0.19s] [ strc | info ] Compilation succeeded : [user/system] = [13.4s/1.08s] $ libtool --mode=compile gcc -g -O -c libproplib.c -o libproplib.o -I $ libtool --mode=link gcc -g -O -o libproplib.la libproplib.lo

Spoofax/IMP

A Spoofax/IMP rendszer egy Stratego-fordító Javára, egy hozzá tartozó, Eclipse alapú integrált fejlesztőkörnyezet és néhány, az Eclipse-alapú IDE-fejlesztést támogató könyvtár. Saját nyelv fejlesztéséhez sok segítséget ad, melyek közül a legfontosabbak:

Az alábbi ábrán egy mintaprojekt szerkesztője látható, ahol egy saját nyelv környezetfüggő súgóját láthatjuk működés közben.

A súgót az alábbi kóddal készítettük el:

editor-hover: (target, position, ast, path, project-path) -> $[Hover help: [ target]]