De
GATE-constructie, onderwerp van dit artikeltje,
is een zelfstandige platte structuur zonder nesting, die zich gedraagt als een Forthwoord.
Hij is dus toepasbaar binnen Forth-programma's en lijkt op een Finite State automaat.
Je kunt er op een overzichtelijke manier die geminachte GOTO-spaghetti-code mee
compileren waar sommige problemen om vragen.
GATE is een geschikt hulpmiddel bij het specificeren of beschrijven van
een bepaald type problemen.
Het heeft iets weg van het invullen van formulieren, met de aardige bijkomstigheid
dat het uitvoerbare code oplevert.
Het zet je op het spoor van een goede factorisering,
waardoor je het probleem gemakkelijker kunt oplossen, ook met gewone Forthcode.
Eerst komt er een toepassingsvoorbeeld aan de hand van
INTERPRET dat
door zijn vertrouwdheid zonder commentaar waarschijnlijk toch meteen leesbaar is.
De
GATE-woorden daarin zijn vetgedrukt.
Om verwarring te vermijden spel ik
INTERPRED met een
D.
Daarna volgt een uitleg van de
GATE-woorden en aan het eind
staat het
GATE-programma dat je samen met het
INTERPRED-voorbeeld
kunt downloaden.
Het zou op ANS Forth moeten werken.
Forth file: c213.frt
Eerst een voorbeeld
De voorbereidende code dient voor het omzetten van strings naar getallen.
Om niet in details te verzanden is ondersteuning van double numbers weggelaten.
\ : } postpone exit postpone then ; immediate
: s>cijfers ( a n -- x ) 0 0 2swap
>number if -13 throw then 2drop ;
: minteken? ( a n -- vlag )
1 > swap c@ [char] - = and ;
: s>number ( a n - x ) 2dup MINTEKEN?
if 1 /string s>cijfers negate exit then s>cijfers ;
: ?stack depth 0< if -4 throw then ;