Using Statement and Programweb.cse.ohio-state.edu › ... › extras › slides ›...
Transcript of Using Statement and Programweb.cse.ohio-state.edu › ... › extras › slides ›...
![Page 1: Using Statement and Programweb.cse.ohio-state.edu › ... › extras › slides › 24.Using-Statement-Prog… · Statementand Program • The Statementand Program component families](https://reader036.fdocuments.in/reader036/viewer/2022062302/5f0391387e708231d409b0b5/html5/thumbnails/1.jpg)
Using Statement and Program
19 March 2019 OSU CSE 1
![Page 2: Using Statement and Programweb.cse.ohio-state.edu › ... › extras › slides › 24.Using-Statement-Prog… · Statementand Program • The Statementand Program component families](https://reader036.fdocuments.in/reader036/viewer/2022062302/5f0391387e708231d409b0b5/html5/thumbnails/2.jpg)
Statement and Program
• The Statement and Programcomponent families for the BL language are similar to what a Java compiler uses to represent a Java program
• Consider refactoring of Java or BL programs, e.g.:– Simplifying if-then-else constructs– Renaming methods/instructions
19 March 2019 OSU CSE 2
![Page 3: Using Statement and Programweb.cse.ohio-state.edu › ... › extras › slides › 24.Using-Statement-Prog… · Statementand Program • The Statementand Program component families](https://reader036.fdocuments.in/reader036/viewer/2022062302/5f0391387e708231d409b0b5/html5/thumbnails/3.jpg)
Statement and Program
• The Statement and Programcomponent families for the BL language are similar to what a Java compiler uses to represent a Java program
• Consider refactoring of Java or BL programs, e.g.:– Simplifying if-then-else constructs– Renaming methods/instructions
19 March 2019 OSU CSE 3
Refactoring means restructuring code
(presumably to improve its readability, etc.) without changing its behavior.
![Page 4: Using Statement and Programweb.cse.ohio-state.edu › ... › extras › slides › 24.Using-Statement-Prog… · Statementand Program • The Statementand Program component families](https://reader036.fdocuments.in/reader036/viewer/2022062302/5f0391387e708231d409b0b5/html5/thumbnails/4.jpg)
simplifyIfElse for Statement
void simplifyIfElse(Statement s)• Refactors s so that every IF_ELSE statement
with a negated condition (NEXT_IS_NOT_-EMPTY, NEXT_IS_NOT_ENEMY, NEXT_IS_-NOT_FRIEND, NEXT_IS_NOT_WALL) is replaced by an equivalent IF_ELSE with the opposite condition and the “then” and “else” BLOCKs switched. Every other statement is left unmodified.
19 March 2019 OSU CSE 4
![Page 5: Using Statement and Programweb.cse.ohio-state.edu › ... › extras › slides › 24.Using-Statement-Prog… · Statementand Program • The Statementand Program component families](https://reader036.fdocuments.in/reader036/viewer/2022062302/5f0391387e708231d409b0b5/html5/thumbnails/5.jpg)
simplifyIfElse for Statement
void simplifyIfElse(Statement s)• Updates: s• Ensures:
s = [#s refactored so that IF_ELSE
statements with "not" conditions are
simplified so the "not" is removed]
19 March 2019 OSU CSE 5
![Page 6: Using Statement and Programweb.cse.ohio-state.edu › ... › extras › slides › 24.Using-Statement-Prog… · Statementand Program • The Statementand Program component families](https://reader036.fdocuments.in/reader036/viewer/2022062302/5f0391387e708231d409b0b5/html5/thumbnails/6.jpg)
The Idea• Before: • After:
19 March 2019 OSU CSE 6
IF_ELSENEXT_IS_NOT-
_EMPTY
IF_ELSENEXT_IS_-
EMPTY
![Page 7: Using Statement and Programweb.cse.ohio-state.edu › ... › extras › slides › 24.Using-Statement-Prog… · Statementand Program • The Statementand Program component families](https://reader036.fdocuments.in/reader036/viewer/2022062302/5f0391387e708231d409b0b5/html5/thumbnails/7.jpg)
The Idea• Before: • After:
19 March 2019 OSU CSE 7
IF_ELSENEXT_IS_NOT-
_EMPTY
IF_ELSENEXT_IS_-
EMPTY
The same transformation happens for every IF_ELSE
statement in the entire statement s.
![Page 8: Using Statement and Programweb.cse.ohio-state.edu › ... › extras › slides › 24.Using-Statement-Prog… · Statementand Program • The Statementand Program component families](https://reader036.fdocuments.in/reader036/viewer/2022062302/5f0391387e708231d409b0b5/html5/thumbnails/8.jpg)
simplifyIfElse for Program
void simplifyIfElse(Program p)• Refactors p so that every IF_ELSE statement in
the program body or the body of any user-defined instruction with a negated condition (NEXT_IS_NOT_EMPTY, NEXT_IS_NOT_-ENEMY, NEXT_IS_NOT_FRIEND, NEXT_IS_-NOT_WALL) is replaced by an equivalent IF_ELSE with the opposite condition and the “then” and “else” BLOCKs switched. Everything else is left unmodified.
19 March 2019 OSU CSE 8
![Page 9: Using Statement and Programweb.cse.ohio-state.edu › ... › extras › slides › 24.Using-Statement-Prog… · Statementand Program • The Statementand Program component families](https://reader036.fdocuments.in/reader036/viewer/2022062302/5f0391387e708231d409b0b5/html5/thumbnails/9.jpg)
simplifyIfElse for Program
void simplifyIfElse(Program p)• Updates: p• Ensures:
p = [#p refactored so that IF_ELSE
statements with "not" conditions are
simplified so the "not" is removed]
19 March 2019 OSU CSE 9
![Page 10: Using Statement and Programweb.cse.ohio-state.edu › ... › extras › slides › 24.Using-Statement-Prog… · Statementand Program • The Statementand Program component families](https://reader036.fdocuments.in/reader036/viewer/2022062302/5f0391387e708231d409b0b5/html5/thumbnails/10.jpg)
Challenge
• Assume you are given an implementation of simplifyIfElse(Statement)
• Write an implementation of simplifyIfElse(Program)
19 March 2019 OSU CSE 10
![Page 11: Using Statement and Programweb.cse.ohio-state.edu › ... › extras › slides › 24.Using-Statement-Prog… · Statementand Program • The Statementand Program component families](https://reader036.fdocuments.in/reader036/viewer/2022062302/5f0391387e708231d409b0b5/html5/thumbnails/11.jpg)
Structure of the Code{
/*
* For each user-defined instruction body,
* simplify its IF_ELSE statements
*/
/*
* For the program body, simplify its
* IF_ELSE statements
*/
}
19 March 2019 OSU CSE 11
![Page 12: Using Statement and Programweb.cse.ohio-state.edu › ... › extras › slides › 24.Using-Statement-Prog… · Statementand Program • The Statementand Program component families](https://reader036.fdocuments.in/reader036/viewer/2022062302/5f0391387e708231d409b0b5/html5/thumbnails/12.jpg)
Structure of the Code{
Map<String, Statement> ctxt = p.newContext();
Map<String, Statement> c = p.newContext();
p.swapContext(ctxt);
while (ctxt.size() > 0) {
Map.Pair<String, Statement> instr = ctxt.removeAny();
// simplify IF_ELSE for body of instr (a Statement)
c.add(name, body);
}
p.swapContext(c);
Statement pBody = p.newBody();
p.swapBody(pBody);
// simplify IF_ELSE for pBody (a Statement)
p.swapBody(pBody);
}
19 March 2019 OSU CSE 12
![Page 13: Using Statement and Programweb.cse.ohio-state.edu › ... › extras › slides › 24.Using-Statement-Prog… · Statementand Program • The Statementand Program component families](https://reader036.fdocuments.in/reader036/viewer/2022062302/5f0391387e708231d409b0b5/html5/thumbnails/13.jpg)
Structure of the Code{
Map<String, Statement> ctxt = p.newContext();
Map<String, Statement> c = p.newContext();
p.swapContext(ctxt);
while (ctxt.size() > 0) {
Map.Pair<String, Statement> instr = ctxt.removeAny();
// simplify IF_ELSE for body of instr (a Statement)
c.add(name, body);
}
p.swapContext(c);
Statement pBody = p.newBody();
p.swapBody(pBody);
// simplify IF_ELSE for pBody (a Statement)
p.swapBody(pBody);
}
19 March 2019 OSU CSE 13
We need to use the removeAny style for this loop
(not the iterator style) because we need to modify the
Map in the loop body.
![Page 14: Using Statement and Programweb.cse.ohio-state.edu › ... › extras › slides › 24.Using-Statement-Prog… · Statementand Program • The Statementand Program component families](https://reader036.fdocuments.in/reader036/viewer/2022062302/5f0391387e708231d409b0b5/html5/thumbnails/14.jpg)
Another Refactoring Idea
• Eclipse allows you to change the name of a Java method, including all calls to it, with a single refactoring step– See: Refactor >> Rename ...
• You can write code to do the same thing for a BL program; how?
19 March 2019 OSU CSE 14
![Page 15: Using Statement and Programweb.cse.ohio-state.edu › ... › extras › slides › 24.Using-Statement-Prog… · Statementand Program • The Statementand Program component families](https://reader036.fdocuments.in/reader036/viewer/2022062302/5f0391387e708231d409b0b5/html5/thumbnails/15.jpg)
renameInstruction for Statementvoid renameInstruction(Statement s,
String oldName, String newName)• Refactors s by renaming every occurrence of
instruction oldName to newName. Every other statement is left unmodified.
• Updates: s• Requires:
[newName is a valid IDENTIFIER]
• Ensures:s = [#s refactored so that every
occurrence of instruction oldName isreplaced by newName]
19 March 2019 OSU CSE 15
![Page 16: Using Statement and Programweb.cse.ohio-state.edu › ... › extras › slides › 24.Using-Statement-Prog… · Statementand Program • The Statementand Program component families](https://reader036.fdocuments.in/reader036/viewer/2022062302/5f0391387e708231d409b0b5/html5/thumbnails/16.jpg)
The Idea• Before: • After:
19 March 2019 OSU CSE 16
CALLoldName
CALLnewName
![Page 17: Using Statement and Programweb.cse.ohio-state.edu › ... › extras › slides › 24.Using-Statement-Prog… · Statementand Program • The Statementand Program component families](https://reader036.fdocuments.in/reader036/viewer/2022062302/5f0391387e708231d409b0b5/html5/thumbnails/17.jpg)
renameInstruction for Programvoid renameInstruction(Program p,
String oldName, String newName)• Refactors p by renaming instruction oldName, and every call
it, to newName. Everything else is left unmodified.• Updates: p• Requires:
oldName is in DOMAIN(p.context) and[newName is a valid IDENTIFIER but not the nameof a primitive instruction in the BL language] andnewName is not in DOMAIN(p.context)
• Ensures:p = [#p refactored so that instruction
oldName and every call to it arereplaced by newName]
19 March 2019 OSU CSE 17
![Page 18: Using Statement and Programweb.cse.ohio-state.edu › ... › extras › slides › 24.Using-Statement-Prog… · Statementand Program • The Statementand Program component families](https://reader036.fdocuments.in/reader036/viewer/2022062302/5f0391387e708231d409b0b5/html5/thumbnails/18.jpg)
Example: Rename bar to carPROGRAM Example ISINSTRUCTION foo ISIF random THENbar
ELSEturnleft
END IFEND fooINSTRUCTION bar ISturnrightturnright
END bar
BEGINWHILE true DO
IF next-is-empty THENmove
ELSEIF next-is-enemy THENbar
ELSEfoo
END IFEND IF
END WHILEEND Example
19 March 2019 OSU CSE 18
![Page 19: Using Statement and Programweb.cse.ohio-state.edu › ... › extras › slides › 24.Using-Statement-Prog… · Statementand Program • The Statementand Program component families](https://reader036.fdocuments.in/reader036/viewer/2022062302/5f0391387e708231d409b0b5/html5/thumbnails/19.jpg)
Example: Rename bar to carPROGRAM Example ISINSTRUCTION foo ISIF random THENbar
ELSEturnleft
END IFEND fooINSTRUCTION bar ISturnrightturnright
END bar
BEGINWHILE true DO
IF next-is-empty THENmove
ELSEIF next-is-enemy THENbar
ELSEfoo
END IFEND IF
END WHILEEND Example
19 March 2019 OSU CSE 19
![Page 20: Using Statement and Programweb.cse.ohio-state.edu › ... › extras › slides › 24.Using-Statement-Prog… · Statementand Program • The Statementand Program component families](https://reader036.fdocuments.in/reader036/viewer/2022062302/5f0391387e708231d409b0b5/html5/thumbnails/20.jpg)
Example: Rename bar to carPROGRAM Example ISINSTRUCTION foo ISIF random THENcar
ELSEturnleft
END IFEND fooINSTRUCTION car ISturnrightturnright
END car
BEGINWHILE true DO
IF next-is-empty THENmove
ELSEIF next-is-enemy THENcar
ELSEfoo
END IFEND IF
END WHILEEND Example
19 March 2019 OSU CSE 20
![Page 21: Using Statement and Programweb.cse.ohio-state.edu › ... › extras › slides › 24.Using-Statement-Prog… · Statementand Program • The Statementand Program component families](https://reader036.fdocuments.in/reader036/viewer/2022062302/5f0391387e708231d409b0b5/html5/thumbnails/21.jpg)
Challenge
• Assume you are given an implementation of renameInstruction(Statement, String, String)
• Write an implementation of renameInstruction(Program, String, String)
19 March 2019 OSU CSE 21
![Page 22: Using Statement and Programweb.cse.ohio-state.edu › ... › extras › slides › 24.Using-Statement-Prog… · Statementand Program • The Statementand Program component families](https://reader036.fdocuments.in/reader036/viewer/2022062302/5f0391387e708231d409b0b5/html5/thumbnails/22.jpg)
Draw AST from Code
• What is the value of instr at the end?
Statement instr = new Statement1();
Statement eblk = instr.newInstance();
instr.assembleCall("move");
eblk.addToBlock(0, instr);
Statement tblk = instr.newInstance();
instr.assembleCall("infect");
tblk.addToBlock(0, instr);
instr.assembleCall("turnleft");
tblk.addToBlock(1, instr);
instr.assembleIfElse(Condition.NEXT_IS_ENEMY, tblk, eblk);
19 March 2019 OSU CSE 22