Leertaak 7
Blokken en procedures
Achtergrond
Vrijwel elke programmeertaal heeft eigen scope-regels die
de 'levensduur' en het waardeverloop van gedeclareerde objecten bepalen. Scope-problemen
zijn een belangrijke bron van programmeerfouten. Daarom is een precieze karakterisering
van scope-regels van belang. De formele semantiek kan gebruikt worden om programma's
te controleren, liefst via een geautomatiseerde 'tool'.
Met behulp van een administratie van proceduredeclaraties
is het mogelijk om dynamische en statische scope voor procedures te beschrijven.
Het onderscheid is uit te drukken via een verschil in het mechanisme om nieuwe
procedure-declaraties in de administratie te verwerken. In compilers kunnen
we deze mechanismen terugvinden. Soms is er een speciale ingreep nodig om aan
recursieve procedures de juiste semantiek toe te kennen.
De beschrijvingsmethode die we hier bekijken, leent zich
goed als basis om andere proceduremechanismen te karakteriseren.
Leerdoel
Na het voltooien van deze taak kunt u
- onderstaande kernbegrippen (zie 'Instructie') verklaren;
- de semantiek van programma's met blokken beredeneren;
- de semantiek van programma's met dynamische scope voor variabelen en procedures
beredeneren;
- het effect van verschillende keuzen voor scope-mechanismen vergelijken aan
de hand van de betreffende semantiekregels;
- evaluatiemechanismen voor recursieve aanroepen van procedures vergelijken.
Instructie
- Lees p. 50-57. Kernbegrippen:
- declaraties (van variabelen en procedures)
- scope (van variabelen en procedures)
- statische scope, dynamische scope
- locaal, globaal
- recursie
- Ga via Exercise 2.37 (p. 52) na of u de semantiekregels voor blokken kunt
toepassen.
- Bekijk het programma in Exercise 2.39 (p. 55). Bepaal de waarde van y na
uitvoering van het programma in het geval van
- dynamische scope voor variabelen en procedures,
- dynamische scope voor variabelen en statische scope voor procedures
Beredeneer de resultaten aan de hand van de semantiekregels.
- Construeer een statement dat het verschil tussen de twee regels in Tabel
2.6 (p. 56) illustreert. Motiveer het antwoord aan de hand van de semantiekregels.
Wellicht lukt het ook zónder de gehele afleidingsbomen te tekenen (vgl.
Exercise 2.40, p. 57) om een overtuigende redenering te geven.
Product
- Uitwerking van Exercise 2.37: redenering die aantoont dat executie van het
gegeven statement tot een toestand leidt waarin x de waarde 4 heeft. Aandachtspunt:
tekent u een afleidingsboom of zijn er andere mogelijkheden?
- Analyse van de semantiek van het programma in Exercise 2.39, toegespitst
op de waarde van y.
- Programma-voorbeelden (met semantiek-analyse) die het verschil tussen de
alternatieve call-regels aangeven.
Reflectie
- Is uw redenering over semantiek van het blok-statement kernachtig en maakt
u gebruik van de afleidingsregels?
- Maken uw uitwerkingen gebruik van de juiste technische semantische begrippen?
Zijn uw beweringen en redeneerstappen duidelijk aangegeven?
- Zijn de programma-voorbeelden 'minimaal', dat wil zeggen: bevatten ze de
essentie van een verschilpunt, zonder overbodige ballast? Is het verschil
in effect concreet gemaakt met behulp van semantische begrippen?