Vorige                       Inhoud                      Volgende
_________________________________________________________________

NANOL                   860409          (c) 1986 by ORD-GROUP  44


Deze  waarde wordt teruggevoerd naar het  aanroepende  programma-
     onderdeel.

In  NANOL  zijn er geen beperkingen.  De compiler  vertaalt  elke
legale constructie naar assembler.  Als men vergeet een variabele
te  declareren  dan merkt de compiler dat niet maar de  assembler
geeft  een error omdat een identifier niet gedeclareerd  was.  De
compiler doet niet aan typechecking.

In  NANOL  bestaat de mogelijkheid om op elk  moment  een  stukje
assembler  tussen  te voegen.  Dit is soms nodig om aan  speciale
eisen te voldoen.  (B.v.  dat een bepaalde waarde in een  bepaald
register moet staan bij het aanroepen van het operating systeem.)

Bij  recursie moet men voorzichtig zijn.  Een tweede aanroep  van
een functie binnen de eerste vernietigd namelijk de inhoud van de
argumentvariabelen.

In  het  algemeen kunnen we zegeen dat we erin zijn geslaagd  een
taal  te  ontwikkelen die uiterst eenvoudig is en toch  een  stuk
makkelijker programmeert dan assembler.  We hebben NANOL gebruikt
om  een  SMALL-C  compiler in te schrijven  en  dit  ging  zonder
grote  problemen.  Het  enige  echte probleem  was  de  recursie.
Hiervoor hebben we de volgende oplossing gevonden.

functie locall(n)  : alloceer n locale variabelen op de stack
functie locvar(n)  : de waarde van locale variabele nummer n
functie locass(n,e): stop  de  waarde van expressie e  in  locale
                     variabele nummer n.

Locall(n)  is  gewoonlijk  het eerste statement  in  de  functie.
Locall  plaatst  een  extra returnadres op de stack die  naar  de
dealloceerroutine  wijst.  Op  deze  manier  is  het  dealloceren
transparant.  In  het programma ziet het er wat  onoverzichtelijk
uit, maar het werkt uitstekend.

_________________________________________________________________

Vorige                       Inhoud                      Volgende