Leertaak 1
Semantiek van expressies in programmeertalen
Achtergrond
Bij het ontwikkelen van een nieuwe programmeertaal (maar ook bij het uitbreiden van een taal met bijvoorbeeld een nieuw datatype of nieuwe operaties), zal de ontwerper aangeven hoe expressies voor objecten van een bepaald datatype eruit zien en met welke waarde ze overeenkomen.
Een informaticus zal vaak verzeild raken in gevallen waarin semantiek maar ten dele precies is vastgelegd. Bovendien houden programmeertalen zich zelden aan de strikte scheiding van expressies en statements uit de theorieboekjes: zo kan het evalueren van een expressie in sommige programmeertalen een zij-effect hebben. Ook (of juist?) in deze gevallen geeft een (gedeeltelijke) formele semantiek-specificatie een bruikbaar houvast.
Leerdoel
Na het voltooien van deze taak kunt u
Instructie
&&
(conditional-And)
en ||
(conditional-Or). Geef de semantiek voor deze uitbreiding
in de stijl van Tabel 1.2 in Paragraaf 1.3 van Semantics
with applications. Zijn de gewone And en de conditional-And equivalent?result1
en result2
als van een nieuw Voorbeeld
object de
methode m()
één keer is aangeroepen.
public class Voorbeeld { boolean result1, result2; boolean b = true; boolean f() { b = !b; return b; } void m() { result1 = f() || !f(); result2 = !f() && f(); } }Verandert het resultaat als
||
vervangen wordt door |
en &&
door &
? Zo ja, verklaar hoe dat
komt. Zo nee, bekijk of het programma aangepast kan worden zodat het resultaat
wél verandert.Product
Reflectie