A Stratego műveleteit termeken végzi; ezeket az Annotated Term Format (ATerm) szerint jelölhetjük. Egy term a következő szabályok rekurzív alkalmazásával keletkezik:
12345
"Ez egy \"sztring\"\n"
Var("a",4)
[Var("a",5),Plus(Var("a"),Var("b")]
|
jel után adjuk meg. Például: [Int(5),Int(9)|[Int(1)]]
. Ennek a jelölésnek igazi jelentősége mintaillesztések esetén van; ekkor funkcionális stílusban, láncolt listaként kezelhető a lista. Azonban ebben az esetben is a lista elemeit - a példában Int(5), Int(9), Int(1)
- tekintjük közvetlen résztermeknek, s nem a láncolt reprezentációjú fejelemet és folytatást.
("a",Var("a",5))
A nyelv alapvető művelete a mintaillesztés. Mintát a term-alkotáshoz hasonló módon kapunk. Minta az előzőekben megadott szabályok rekurzív alkalmazásával történik (cseréljük le a "term" szavakat "mintára"), továbbá:
Termek konstrukciójához felhasználhatunk változókat is. A változónevek tetszőleges angol betűkkel kezdődnek és angol betűk, számok, _, ', - jelek alkothatják (a lista lehet, hogy nem teljes, mivel a dokumentációban nincsenek a jelek felsorolva). Például: alma, Kor, a', b-c-d
A változók csak egy adott hatókörben érvényesek. Változó alapértelmezett hatóköre a változó feletti első elnevezett stratégia. Egy hatókörben egy változóhoz legfeljebb egy értéket rendelhetünk. Ha egy változó már kötött és egy a kötött értéktől különböző értéket kívánunk hozzá kötni, a kötés sikertelen.
Ha változókat csak egy helyi hatáskörben kívánunk használni, úgy al-hatáskört hozhatunk létre. A {
és }
jelek közötti kódrészleten belül kötötté váló változók a blokkon kívül szabadok.
A műveletek zárójelezhetők; a zárójelpár a megszokott ( )
.
A nyelv kulcsszavai a következők (a lista lehet, hogy nem teljes, mivel a dokumentációban nincsenek a kulcsszavak szisztematikusan felsorolva):
constructors, else, end, exports, fail, if, imports, module, not, rules, signature, strategies, then, where, with
. A kulcsszavak nem fogalaltak; azaz - ha az kétértelműséget nem okoz - e szavak használhatóak azonosítóként.
A nyelv blokkszerkezetűnek tekinthető, de a blokkok vége - ahol az egyértelmű - nem jelzett semmilyen kulcsszóval. A fehér szóköz jelentéktelen.
Speciális operátorok: :, ->, <+, <, +, =>
.
A C++-hoz hasonló a megjegyzések szintaxisa:
//
jel utáni részét figyelmen kívül hagyja a fordító./*
jellel kezdődik és a */
jellel végződik. Ilyen megjegyzések egymásba nem ágyazhatóak, azaz
/* ez egy /* jelet
tartalmazó megjegyzés */
helyes megjegyzés/* ez egy /* megjegyzést */ tartalmazó megjegyzés */
szintaktikai hiba, mivel az első */
jel az egész megjegyzést lezárja.