9 January 2019 OSU CSE 1
BL Compiler Structure
string of characters (source code)
Copyright By Assignmentchef assignmentchef
string of tokens (words)
abstract program
integers (object code)
9 January 2019
A BL program consists of some Statements, and more
Code Generator
The Program component family allows you to manipulate values that are models
of complete BL programs
The mathematical model of a Program
includes that of a Statement (specifically, a BLOCK) for its body, plus more:
the program name
the new user-defined instructions, each of which also has a body
9 January 2019 OSU CSE 3
Structure of a BL Program
The programs name (must be an IDENTIFIER).
The context: a set of new instructions (names and bodies).
The body Statement (the main program; kind must be BLOCK).
PROGRAM MyProg IS
END MyProg
9 January 2019
Structure of a
The instructions name (must be an IDENTIFIER).
The body Statement (kind must be BLOCK).
INSTRUCTION Instr IS
9 January 2019 OSU CSE
PROGRAM MyProg IS
INSTRUCTION Instr1 IS BLOCK
END Instr1
INSTRUCTION Instr2 IS BLOCK
END Instr2
END MyProg
9 January 2019
The programs
comprises zero or more new instructions.
Example: Draw the Value
PROGRAM SteerClear IS INSTRUCTION Avoid IS
IF random THEN turnright
ELSE turnleft
END Avoid INSTRUCTION Flee IS
turnright END Flee
WHILE true DO
IF next-is-empty THEN move
IF next-is-enemy THEN
Avoid END IF
END IF END WHILE
END SteerClear
9 January 2019
Example: Draw the Value
PROGRAM SteerClear IS BEGIN
INSTRUCTION Avoid IS
IF random THEN turnright
ELSE turnleft
END Avoid INSTRUCTION Flee IS
turnright turnright
WHILE true DO
IF next-is-empty THEN
IF next-is-enemy THEN Flee
ELSE Avoid
END IF END IF
9 January 2019 OSU CSE 8
END SteerClear
p = (SteerClear,
{(Avoid,
), (Flee,
9 January 2019
p = (SteerClear,
{(Avoid,
), (Flee,
9 January 2019
IF random THEN turnright
ELSE turnleft
p = (SteerClear,
{(Avoid,
), (Flee,
turnright turnright
9 January 2019
p = (SteerClear,
{(Avoid,
), (Flee, )},
WHILE true DO BLOCK
IF next-is-empty THEN move
IF next-is-wall THEN
Avoid END IF
END IF END WHILE
9 January 2019
Interfaces and Classes
Program- Kernel
implements
9 January 2019
OSU CSE 13
Interfaces and Classes
Program- Kernel
implements
ProgramKernel
has contracts for these methods:
newContext
swapContext
9 January 2019
OSU CSE 14
Interfaces and Classes
has these additional methods (not all
discussed here):
prettyPrint
generatedCode
Program- Kernel
implements
9 January 2019
OSU CSE 15
Mathematical Model
CONTEXT is finite set of (name: IDENTIFIER, body: STATEMENT_MODEL)
exemplar c constraint
[the names of instructions in c are unique] and
[the names of instructions in c do not match the names of primitive instructions in the BL language] and
[the bodies of instructions in c are all
BLOCK statements]
9 January 2019 OSU CSE 16
Mathematical Model
PROGRAM_MODEL is ( name: IDENTIFIER, context: CONTEXT, body: STATEMENT_MODEL
exemplar p constraint
[p.body is a BLOCK statement]
type ProgramKernel is modeled by PROGRAM_MODEL
9 January 2019 OSU CSE 17
No-argument Constructor
Ensures:
this = (Unnamed, {}, compose((BLOCK, ?, ?), <>))
9 January 2019 OSU CSE 18
No-argument Constructor
Ensures:
this = (Unnamed, {}, compose((BLOCK, ?, ?), <>))
The corresponding BL program is:
PROGRAM Unnamed IS BEGIN
END Unnamed
9 January 2019 OSU CSE 19
Program p =
new Program1();
9 January 2019 OSU CSE 20
Program p =
new Program1();
p = (Unnamed, {}, compose((BLOCK, ?, ?),
9 January 2019 OSU CSE 21
String name()
Returnsthenameofthis. Ensures:
name = this.name
9 January 2019 OSU CSE
p = (MyBug,
p.context,
String pn = p.name();
9 January 2019 OSU CSE 23
p = (MyBug,
p.context,
String pn = p.name();
p = (MyBug,
p.context,
pn = MyBug
9 January 2019 OSU CSE 24
void setName(String n)
Replacesthenameofthiswithn.
Replaces:this.name
Requires:
[n is a valid IDENTIFIER]
Ensures:
this.name = n
9 January 2019 OSU CSE
p = (Unnamed,
p.context,
p.setName(Pest);
9 January 2019 OSU CSE 26
p = (Unnamed,
p.context,
p.setName(Pest);
p = (Pest,
p.context,
9 January 2019 OSU CSE 27
newContext Map
CreatesandreturnsanemptyMap
Ensures:
newContext = {}
9 January 2019 OSU CSE 28
p = (p.name,
p.context,
Map
p.newContext();
9 January 2019 OSU CSE 29
p = (p.name,
p.context,
Map
p.newContext();
p = (p.name,
p.context,
p.body) c = {}
9 January 2019 OSU CSE 30
swapContext void swapContext(Map
Exchanges the context of this with that of c; c must have the dynamic type returned by newContext.
Updates: this.context, c
Requires:
[names in c are valid IDENTIFIERs] and
[names in c do not match the names of primitive
instructions in the BL language] and [bodies in c are all BLOCK statements]
Ensures:
c = #this.context and this.context = #c
9 January 2019 OSU CSE
p = (p.name,
{(Foo, )},
c = {(Bar, )}
p.swapContext(c);
9 January 2019 OSU CSE 32
p = (p.name,
{(Foo, )},
c = {(Bar, )}
p.swapContext(c);
p = (p.name,
{(Bar, )},
c = {(Foo, )}
9 January 2019 OSU CSE 33
newBody Statement newBody()
CreatesandreturnsaStatementwithadefault initial value, of the dynamic type needed in
swapBody. Ensures:
compose((BLOCK, ?, ?), <>)
9 January 2019 OSU CSE
p = (p.name,
p.context,
Statement b = p.newBody();
9 January 2019 OSU CSE 35
p = (p.name,
p.context,
Statement b = p.newBody();
p = (p.name,
p.context,
9 January 2019 OSU CSE 36
swapBody void swapBody(Statement b)
Exchanges the body of this with that of b; b must have the dynamic type returned by newBody.
Updates: this.body, b
Requires:
[b is a BLOCK statement]
Ensures:
b = #this.body and this.body = #b
9 January 2019 OSU CSE
p = (p.name,
p.context,
p.swapBody(b);
9 January 2019 OSU CSE 38
p = (p.name,
p.context,
p.swapBody(b);
p = (p.name,
p.context,
9 January 2019 OSU CSE 39
OSU CSE Components API: Program
http://cse.osu.edu/software/common/doc/
9 January 2019 OSU CSE 40
CS: assignmentchef QQ: 1823890830 Email: [email protected]
Reviews
There are no reviews yet.