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

  1. Lees p. ix en Notes for the instructor (p. xi-xii) van Semantics with applications.
  2. Lees p. 1-14. Kernbegrippen:
  3. Exercise 1.8 op p. 14 kunt u gebruiken om na te gaan of u de definitie van expressie-semantiek kunt toepassen.
  4. Lees Paragraaf 15.22, 15.23 en 15.24 van de Java Language Specification door. Breid de BNF voor While in Paragraaf 1.2 van Nielson en Nielson uit met syntaxis voor && (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?
  5. Bekijk het volgende Java programma. Bepaal de waarden van 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