Code Generation
22 November 2019 OSU CSE 1
Code Generation 22 November 2019 OSU CSE 1 BL Compiler Structure - - PowerPoint PPT Presentation
Code Generation 22 November 2019 OSU CSE 1 BL Compiler Structure Code Tokenizer Parser Generator string of string of abstract string of characters tokens program integers (source code) (words) (object code) The code
22 November 2019 OSU CSE 1
22 November 2019 OSU CSE 2
22 November 2019 OSU CSE 3
22 November 2019 OSU CSE 4
22 November 2019 OSU CSE 5
22 November 2019 OSU CSE 6
22 November 2019 OSU CSE 7
22 November 2019 OSU CSE 8
22 November 2019 OSU CSE 9
public static void executeProgram(Program p) { Statement body = p.newBody(); Map<String, Statement> context = p.newContext(); p.swapBody(body); p.swapContext(context); executeStatement(body, context); p.swapBody(body); p.swapContext(context); }
22 November 2019 OSU CSE 10
22 November 2019 OSU CSE 11
BLOCK IF condition WHILE condition CALL instruction
IF_ELSE condition
public static void executeStatement(Statement s, Map<String, Statement> context) { switch (s.kind()) { case BLOCK: { for (int i = 0; i < s.lengthOfBlock(); i++) { Statement ns = s.removeFromBlock(i); executeStatement(ns, context); s.addToBlock(i, ns); } break; } case IF: {...} ... }
22 November 2019 OSU CSE 12
22 November 2019 OSU CSE 13
22 November 2019 OSU CSE 14
22 November 2019 OSU CSE 15
22 November 2019 OSU CSE 16
22 November 2019 OSU CSE 17
22 November 2019 OSU CSE 18
22 November 2019 OSU CSE 19
22 November 2019 OSU CSE 20
22 November 2019 OSU CSE 21
22 November 2019 OSU CSE 22
IF_ELSE NEXT_IS_WALL BLOCK CALL turnleft BLOCK CALL move
Loc Instruction (symbolic name)
JUMP_IF_NOT_NEXT_IS_WALL 1 5 2 TURNLEFT 3 JUMP 4 6 5 MOVE 6 ...
22 November 2019 OSU CSE 23
IF_ELSE NEXT_IS_WALL BLOCK CALL turnleft BLOCK CALL move
Loc Instruction (“byte code”)
9 1 5 2 1 3 6 4 6 5 6 ...
22 November 2019 OSU CSE 24
22 November 2019 OSU CSE 25
22 November 2019 OSU CSE 26
22 November 2019 OSU CSE 27
22 November 2019 OSU CSE 28
22 November 2019 OSU CSE 29
22 November 2019 OSU CSE 30
22 November 2019 OSU CSE 31
22 November 2019 OSU CSE 32
22 November 2019 OSU CSE 33
22 November 2019 OSU CSE 34
22 November 2019 OSU CSE 35
22 November 2019 OSU CSE 36
22 November 2019 OSU CSE 37
22 November 2019 OSU CSE 38
22 November 2019 OSU CSE 39
Loc Instruction (symbolic name)
k JUMP_IF_NOT_condition k+1 k+n+2 k+2 block (n instructions) ... k+n+1 k+n+2 ...
22 November 2019 OSU CSE 40
Loc Instruction (symbolic name)
k JUMP_IF_NOT_condition k+1 k+n1+4 k+2 block1 (n1 instructions) ... k+n1+2 JUMP k+n1+3 k+n1+n2+4 k+n1+4 block2 (n2 instructions) ... k+n1+n2+4 ...
22 November 2019 OSU CSE 41
Loc Instruction (symbolic name)
k JUMP_IF_NOT_condition k+1 k+n+4 k+2 block (n instructions) ... k+n+2 JUMP k+n+3 k k+n+4 ...
22 November 2019 OSU CSE 42
Loc Instruction (symbolic name)
k MOVE
Loc Instruction (symbolic name)
k TURNLEFT
22 November 2019 OSU CSE 43
Loc Instruction (symbolic name)
k block (of n instructions) ... k+n-1 k+n ...
22 November 2019 OSU CSE 44
Loc Instruction (symbolic name)
k block (of n instructions) ... k+n-1 k+n ...
22 November 2019 OSU CSE 45
Loc Instruction (symbolic name)
k block (of n instructions) ... k+n-1 k+n ...
22 November 2019 OSU CSE 46
Loc Instruction (symbolic name)
k block (of n instructions) ... k+n-1 k+n ...
22 November 2019 OSU CSE 47
22 November 2019 OSU CSE 48
/** * BugsWorld VM instructions and "byte codes". */ enum Instruction { MOVE(0), TURNLEFT(1), ... ; ... }
22 November 2019 OSU CSE 49
enum Instruction { MOVE(0), TURNLEFT(1), ... ; private int blByteCode; private Instruction(int code) { this.blByteCode = code; } public int byteCode() { return this.blByteCode; } }
22 November 2019 OSU CSE 50
enum Instruction { MOVE(0), TURNLEFT(1), ... ; private int blByteCode; private Instruction(int code) { this.blByteCode = code; } public int byteCode() { return this.blByteCode; } }
22 November 2019 OSU CSE 51
enum Instruction { MOVE(0), TURNLEFT(1), ... ; private int blByteCode; private Instruction(int code) { this.blByteCode = code; } public int byteCode() { return this.blByteCode; } }
22 November 2019 OSU CSE 52
enum Instruction { MOVE(0), TURNLEFT(1), ... ; private int blByteCode; private Instruction(int code) { this.blByteCode = code; } public int byteCode() { return this.blByteCode; } }
22 November 2019 OSU CSE 53
22 November 2019 OSU CSE 54
– http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html
22 November 2019 OSU CSE 55