A Snobol programozási nyelv

Mintaillesztés

A mintaillesztéshez kell egy tárgy (subject) string és egy minta (pattern). A tárgyat megelőzi a címke mező az utasításban, és a tárgy után jön a minta, amiket szóköz vagy tabulátor választ el. Ha a tárgy egy string és a minta egy pattern, akkor így néz ki egy mintaillesztő utasítás:

label SUBJECT PATTERN

A mintaillesztés sikeres, ha a minta megtalálható a tárgyban, különben failure jelzést ad vissza. Ezeket a jelzéseket ellenőrizni lehet a GOTO mezőben:

label SUBJECT PATTERN :S(label1) F(label2)

A zárójelek használatával egyértelművé tehetjük, hogy mi a tárgyunk és a mintánk:

X Y Z

Ebben az esteben X a subject, és Y a Z-vel konkatenálva a minta.

(X Y) Z

Most a tárgy az X és Y string konkatenációja, és Z a minta.

A tárgy string lehet string literál, változó, vagy kifejezés.

Ha P1 és P2 két részminta (subpattern), akkor a P1 P2 kifejezés szintén minta.
Az alternation operátor a függőleges vonal (|). Ennek az operátornak is mindkét oldalán white space-nek kell állnia.
A P1 | P2 kifejezés egy minta, vagy P1 minta, vagy P2 minta. Mintaillesztésnél a SNOBOL balról jobbra próbálkozik.
A P1 | P2 P3 kifejezésben P1 minta egyedül van, míg P2 mintát P3 minta követi.
Persze itt is lehet a zárójelet használni: (P1 | P2) P3. P1 vagy P2 mintát P3 minta követi.
Zárójelek használatával egy minta tényezőkre bontható. A 'COMPATIBLE', 'COMPREHENSIBLE', és 'COMPRESSIBLE' stringeket egyeztetni lehet az alábbi mintával:

'COMP' ('AT' | 'RE' ('HEN' | 'S') 'S') 'IBLE'

Egyszerű mintaillesztések

'BLUEBIRD' 'BIRD' * Success 'BLUEBIRD' 'bird' * Failure B = 'THE BLUEBIRD' B 'FISH' * Failure B 'FISH' | 'BIRD' * Success B ('GOLD' | 'BLUE') ('FISH' | 'BIRD') * Success

A minta adattípus

COLOR = 'BLUE' B COLOR * Success * a COLOR változó string adattípusú COLOR = 'GOLD' | 'BLUE' * a COLOR változó most minta (pattern) adattipusú CRITTER = 'FISH' | 'BIRD' BOTH = COLOR CRITTER B BOTH * Success

Feltételes értékadás operátor

A B BOTH mintaillesztés sikeres volt, de nem tudjuk, hogy melyik minták illeszkedtek. Ennek lekérdezésére használható a bináris feltételes értékadás operátor, melynek jele a pont (.):

COLOR = ('GOLD' | 'BLUE') . SHADE CRITTER = ('FISH' | 'BIRD') . ANIMAL BOTH = COLOR CRITTER B BOTH * Success OUTPUT = SHADE * BLUE OUTPUT = ANIMAL * BIRD

Ebben mintában (('B' | 'F' | 'N') . FIRST 'EA' ('R' | 'T') . LAST) . WORD illeszkedik a következő szavakra:

Az első betűt a FIRST-tel méri össze, az utolsó betűt a LAST-tal, és az egész eredmény a WORD.

Primitív minták

Hét primitív mintát építettek bele a SNOBOL4-be. Ebből 2-vel fogunk tüzetesebben foglalkozni. Az egyik a REM a REMainder pattern (maradék minta) rövidítése:

'THE WINTER WINDS' 'WIN' REM . OUTPUT TER WINDS * Success 'THE WINTER WINDS' 'WINDS' REM . OUTPUT * Success -- a null stringet adja

A másik az ARB, amely tetszőleges karaktereket tud összehasonlítani:

'MOUNTAIN' 'O' ARB . OUTPUT 'A' * UNT * Success 'MOUNTAIN' 'O' ARB . OUTPUT 'U' * Success -- az 'O' és az 'U' között nincs karakter, vagyis null string az eredmény

Kurzor pozíció operátor

Mintaillesztés közben szükségünk lehet a kurzor pozíciójára, ami a tárgy stringre mutató pointer. A pointer értéke egy integer. A kurzor pozíció operátorral le tudjuk kérdezni az érvényes kurzor változó értékét. Az unáris operátor jele az "at jel" (@):

'VALLEY' 'A' @OUTPUT ARB 'E' @OUTPUT * 2 -- A * 5 -- E * Success 'DOUBT' @OUTPUT 'B' * 0 -- D * 1 -- O * 2 -- U * 3 -- B * Success * 'FIX' @OUTPUT 'B' * 0 -- F * 1 -- I * 2 -- X * Failure

Mintaillesztő függvények