I222 - Semantikk til programmeringsspråk

Oppgavesett 3, vår 2000

  1. På forelesningen definerte vi semantikken til produksjonen
    <imp> ::= while <bexp> do <imp> od
    ved et rekursivt uttrykk:
    MM [[ while b do imp od ]] (inp,h,outp) 
    	= if BB [[ b ]] h
    	  then MM [[while b do imp od]] ( MM [[imp]] (inp,h,outp) )
    	  else (inp,h,outp). 
    For at dette skal ha mening må vi vise at alle funksjonene på høyresiden (utenom MM) er kontinuerlige. Vis dette.
    Husk å omgjøre de semantiske domenene fra kap. 2 til CPOer der det er nødvendig.

  2. Fra læreboken: oppgave 6.8.1, men i kontekst av Loop (kap. 2). Du kan teste koden ved å bruke ml-programmene gitt til oppgavesett 1.

  3. Ta for deg ml-programmene gitt til oppgavesett 1. Utvid disse med while-konstruksjonen (syntaks-definisjon, semantikk-definisjon, syntaksanalyse, utskrift av AST).

  4. Fra læreboken: oppgave 6.8.1, men i kontekst av Loop (kap. 2) utvidet med while-løkker. Skriv programmet ved å bruke while-løkken. Du kan teste koden ved å bruke ml-programmet du skrev over.
    Hvorfor kan du ikke skrive fakultetsfunksjonen som et rekursivt program i noen av disse versjonene av Loop?

  5. Se på oppgaver 6.8.4, 6.8.6, 6.8.7 og 6.8.8 (nesten identisk til 2.6.9) og vurder hva som kreves av endringer i den formelle semantikken til Loop