EECS 321 Programming Languages: Instructor
EECS 321 Programming Languages: Instructor
Winter 2012
Course Details
This course teaches concepts in two ways: By implementing interpreters new concept ! new interpreter By using Racket and variants we dont assume that you already know Racket
Interpreters vs Compilers
An interpreter takes a program and produces a result DrRacket x86 processor desktop calculator bash Algebra student
Interpreters vs Compilers
An interpreter takes a program and produces a result DrRacket x86 processor desktop calculator bash Algebra student A compiler takes a program and produces a program DrRacket x86 processor gcc javac
Interpreters vs Compilers
An interpreter takes a program and produces a result DrRacket x86 processor desktop calculator bash Algebra student Good for understanding program behavior, easy to implement
A compiler takes a program and produces a program DrRacket x86 processor gcc javac Good for speed, more complex (come back next quarter)
Interpreters vs Compilers
An interpreter takes a program and produces a result DrRacket x86 processor desktop calculator bash Algebra student Good for understanding program behavior, easy to implement
A compiler takes a program and produces a program DrRacket x86 processor gcc javac Good for speed, more complex (come back next quarter) So, whats a program?
7
!id" !num"
!id" !num"
The set !id" is the set of all variable names The set !num" is the set of all numbers
10
The set !id" is the set of all variable names The set !num" is the set of all numbers To make an example member of !num", simply pick an element from the set
11
The set !id" is the set of all variable names The set !num" is the set of all numbers To make an example member of !num", simply pick an element from the set 2 " !num" 298 " !num"
12
13
To make an example !expr": choose one case in the grammar pick an example for each meta-variable combine the examples with literal text
14
To make an example !expr": choose one case in the grammar pick an example for each meta-variable combine the examples with literal text
15
To make an example !expr": choose one case in the grammar pick an example for each meta-variable 7 " !num" combine the examples with literal text
16
To make an example !expr": choose one case in the grammar pick an example for each meta-variable 7 " !num" combine the examples with literal text 7 " !expr"
17
To make an example !expr": choose one case in the grammar pick an example for each meta-variable combine the examples with literal text
18
To make an example !expr": choose one case in the grammar pick an example for each meta-variable f " !id" combine the examples with literal text
19
To make an example !expr": choose one case in the grammar pick an example for each meta-variable f " !id" 7 " !expr"
20
To make an example !expr": choose one case in the grammar pick an example for each meta-variable f " !id" 7 " !expr"
To make an example !expr": choose one case in the grammar pick an example for each meta-variable f " !id" f(7) " !expr"
22
To make an example !expr": choose one case in the grammar pick an example for each meta-variable f " !id" f(7) " !expr"
24
f(x) = (x + 1) " !defn" To make a !prog" pick some number of !defn"s (x + y) " !prog" f(x) = (x + 1) g(y) = f((y - 2)) " !prog" g(7)
25
Programming Language
A programming language is dened by a grammar for programs rules for evaluating any program to produce a result
26
Programming Language
A programming language is dened by a grammar for programs rules for evaluating any program to produce a result For example, Algebra evaluation is dened in terms of evaluation steps: (2 + (7 - 4)) # (2 + 3) # 5
27
Programming Language
A programming language is dened by a grammar for programs rules for evaluating any program to produce a result For example, Algebra evaluation is dened in terms of evaluation steps: f(x) = (x + 1) f(10) # (10 + 1) # 11
28
Evaluation
Evaluation # is dened by a set of pattern-matching rules: (2 + (7 - 4)) # (2 + 3)
29
Evaluation
Evaluation # is dened by a set of pattern-matching rules: f(x) = (x + 1) f(10) # (10 + 1) due to the pattern rule ... !id"1(!id"2) = !expr"1 ... ... !id"1(!expr"2) ... # ... !expr"3 ...
30
31
where !expr"3 is !expr"1 with !id"2 replaced by !expr"2 Rules 2 - $ special cases ... (0 + 0) ... # ... 0 ... ... (1 + 0) ... # ... 1 ... ... (2 + 0) ... # ... 2 ... etc. ... (0 - 0) ... # ... 0 ... ... (1 - 0) ... # ... 1 ... ... (2 - 0) ... # ... 2 ... etc.
32
where !expr"3 is !expr"1 with !id"2 replaced by !expr"2 Rules 2 - $ special cases ... (0 + 0) ... # ... 0 ... ... (1 + 0) ... # ... 1 ... ... (2 + 0) ... # ... 2 ... etc. ... (0 - 0) ... # ... 0 ... ... (1 - 0) ... # ... 1 ... ... (2 - 0) ... # ... 2 ... etc.
When the interpreter is a program instead of an Algebra student, the rules look a little different
33
HW 1
34