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