A Stratego termátíró rendszer

Típusok, típuskonstrukciók

A Stratego típusrendszerében a központi fogalom a szort; minden term rendelkezik valamiféle szorttal. Előre definiált szort az Integer és a String. A konstruktorok szignatúrája kötött: az egyes pozíciókon elfogadható termek szortját előre meg kell adni, s egy helyen csak egyfajta szort elfogadható. A szortok között implicit konverzió adható meg név nélküli unáris konstruktorral. Ezt injekciónak is nevezik.

Szortok

A program signature szakaszában adjuk meg az ismert szortok neveit és a konstruktorok szignatúráit.

A szortot nevének leírásával deklaráljuk és definiáljuk a szakasz sorts kezdetű blokkjában. A blokkot nem zárjuk le speciális kulcsszóval.

A szortok rendelkezhetnek paraméterekkel; ezeket a név után zárójelben, vesszővel elválasztva sorolhatjuk fel. Figyeljünk arra, hogy a paraméterek nem ütközhetnek a modulba importált és a modulban definiált szortok neveivel. Beépített szort a List(a), aminek a lista-termek felelnek meg.

Speciális a rendezett n-es (tuple) szortja. Jelölése: (s1,s2,...,sn)

Konstruktorok

A konstruktorok a funkcionális nyelvekből ismert adatkonstruktornak megfelelőek: függvényként viselkednek, melyek a paraméterként megadott termek alapján új, adott szortú termet hoznak létre. Deklarációjuk és definíciójuk a constructors szakaszban történik. A konstruktor általános formája: név : s1*s2*...*sn -> s, ahol si az i. paraméter szortja. A név elhagyása esetén kötelezően n=1.

Például aritmetikai kifejezések egy nyelvének szignatúrája:

signature sorts Id Exp constructors : String -> Id Var : Id -> Exp Int : Int -> Exp Plus : Exp * Exp -> Exp Mul : Exp * Exp -> Exp App : Id * List(Exp) -> Exp

Ez a szignatúra többek között a következőeket fogalmazza meg:

Szignatúra-helyesség ellenőrzése

Az elméleti keretek ugyan adottak, de a jelenlegi verzióban a fordító nem ellenőriz szignatúra-helyességet - tetszőleges ATermek megadhatók; olyanok is melyeknek van olyan konstruktoros résztermje, mely nem felel meg egyszetlen megadott szignatúrának sem. A fordító a szignatúrákat csak az aritás ellenőrzésére használja. Mindazonáltal javasolt, hogy a programozó szort-helyesen készítse programjait; ezzel sok hibától kímélheti meg magát, s egy jövőbeli ellenőrző fordító is hatékonyabban használható.