[Instructions] [Search] [Current] [Syllabus] [Links] [Handouts] [Outlines] [Assignments] [Labs]
Back to Introduction to Formal Semantics. On to Denotational Semantics, Continued.
Held Friday, February 19
Summary
Contents
Notes
Program ::= StatementList
StatementList ::= Statement
| Statement ';' StatementList
Statement ::= Assignment
| Conditional
| Loop
| Input
| Output
Assignment ::= identifier '=' Expression
Conditional ::= 'if' Expression 'then' StatementList 'fi'
| 'if' Expression 'then' StatementList 'else' StatementList 'fi'
Loop ::= 'while' Expression 'do' StatementList 'od'
Input ::= 'read' '(' Identifier ')'
Output ::= 'write' '(' Expression ')'
V in Val Numeric constants I in Id Variables E in Exp Expressions S in Sta Statements L in SL Statement Lists P in Prog Programs
// Programs
Prog => L
// Lists of statements
SL => S
| S ; L
// Statements
Stat => I = E
| if E then L fi
| if E then L0 else L1 fi
| while E do L od
| read(I)
| write(E)
// Expressions
Exp => E1 + E2
| E1 * E2
| E1 - E2
| E1 / E2
| (E)
| V
| I
meaningProg, meaningStat,
meaningExp, and meaningSL.
N Natural numbers U = Id -> N Environments I = N* Input (a sequence of numbers) O = N* Output (a sequence of numbers)
meaningProg : Prog -> I -> O
add function.
(define add (lambda (x y) (+ x y)))
(define add (lambda (x) (lambda (y) (+ x y))))
(add 3 4), you would write
((add 3) 4).
;;; Determine if x is a multiple of n (define multiple (lambda (n) (lambda (x) (zero? (modulo x n)))))
filter function to
get only multiples of 3 from a list.
(filter (multiple 3) lst)
C = U -> I -> O
meaningStat. To determine
the meaning of a statement, we need its continuation, environment, and
input. The result is output.
meaningStat : Stat -> C -> U -> I -> O
meaningSL : SL -> C-> U -> I -> -> O
meaningExp? It might be useful to specify what happens
with the expression, or it might be useful just to give a value. In
either case, we need the environment (since the expression may contain
variables). Rather than using continuations, we'll just have
the meaning of an expression be a value.
meaningExp : Exp -> U -> N
meaningProg[[SL]] = meaningSL[[SL]] cleanup basicEnv basicEnv : U basicEnv = \x . undefined cleanup = \env . \inp . nil
\var . body
for lambda var . body
meaningProg[[SL]] = \inp . meaningSL[[SL]] cleanup basicEnv inp
meaningSL[[S]] = meaningS[[S]]
meaningSL[[S;L]] = \cont . \env . \inp . meaningS[[S]] (meaningSL[[L]]] cont) env inp
t -> a, b,
which means ``if t then a else b''.
car and cdr for list selection.
meaningStat[[read(I)]] =
\cont . \env . \inp .
cont (setenv env I (car inp)) (cdr inp)
setenv : U -> Id -> N -> U
setenv env id num =
\x . (x == id) -> num , (env id)
cons operation. (See the Scheme specification for a
more formal version.)
meaningStat[[write(E)]] =
\cont . \env . \inp .
cons (meaningExp[[E]] env) (cont env inp)
meaningStat[[I = E]] =
\cont . \env . \inp .
cont (setenv env I (meaningExp[[E]] env)) inp
meaningStat[[while E do L od]] = F(E,L) s.t.
F(E,L) : C -> U -> I -> O
F(E,L) cont env inp =
((meaningExp[[E]] env) == 0) -> cont env inp,
meaningSL(L) (\e . \i . F(E,L) cont e i ) env inp
F(E,L) cont env inp =
((meaningExp[[E]] env) == 0) -> cont env inp,
meaningSL(L) (F(E,L) cont) env inp
F(E,L) cont env =
((meaningExp[[E]] env) == 0) -> cont env,
meaningSL(L) (F(E,L) cont) env
History
Back to Introduction to Formal Semantics. On to Denotational Semantics, Continued.
[Instructions] [Search] [Current] [Syllabus] [Links] [Handouts] [Outlines] [Assignments] [Labs]
Disclaimer Often, these pages were created ``on the fly'' with little, if any, proofreading. Any or all of the information on the pages may be incorrect. Please contact me if you notice errors.
This page may be found at http://www.math.grin.edu/~rebelsky/Courses/CS302/99S/Outlines/outline.12.html
Source text last modified Fri Mar 12 10:38:08 1999.
This page generated on Fri Mar 12 12:48:02 1999 by SiteWeaver. Validate this page's HTML.
Contact our webmaster at rebelsky@math.grin.edu