Skip to content

Commit

Permalink
Cleaned up Optimizer visitor more.
Browse files Browse the repository at this point in the history
  • Loading branch information
Zach Abbott committed May 3, 2012
1 parent 6c35985 commit 6b68924
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 59 deletions.
3 changes: 2 additions & 1 deletion sampleFlairPrograms/Optimize/deadCode.fl
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ function func1 (first : integer, second : integer) : integer
begin
first := 3;
return first;
first := 2;
first := 2 + 3;
print(first)
end;

begin
Expand Down
15 changes: 6 additions & 9 deletions src/ThreadedDriver.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,16 +42,13 @@ public void run() {
// SymbolTable.getInstance().printTable();
final TypeCheckingVisitor typeChecker = new TypeCheckingVisitor();
typeChecker.visit(program);
final OptimizingVisitor optimizer = new OptimizingVisitor();
optimizer.visit(program);
// final CodeGeneratingVisitor code = new CodeGeneratingVisitor();
//final OptimizingVisitor optimizer = new OptimizingVisitor();
//optimizer.visit(program);

//ThreeAddressCodeGenerator code = new ThreeAddressCodeGenerator();
//code.visit(program);
//TerribleImplementationToGetTempUsageVisitor terribleUsageVisitor = new TerribleImplementationToGetTempUsageVisitor();
//terribleUsageVisitor.visit(program);
//ThreeAddressCodeGenerator code = new ThreeAddressCodeGenerator(terribleUsageVisitor);
//code.visit(program);
TerribleImplementationToGetTempUsageVisitor terribleUsageVisitor = new TerribleImplementationToGetTempUsageVisitor();
terribleUsageVisitor.visit(program);
ThreeAddressCodeGenerator code = new ThreeAddressCodeGenerator(terribleUsageVisitor);
code.visit(program);
driver.endTime();
if(!warningList.isEmpty()) {
warningList.printWarnings();
Expand Down
61 changes: 12 additions & 49 deletions src/org/zza/optimizer/optimizingVisitor.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,8 @@ public String visit(VariableDeclarationNode node) {

@Override
public String visit(FunctionNode node) {
String oldScope = scope;
String id = node.getHeader().accept(this);
node.getHeader().accept(this);
node.getBody().accept(this);
scope = oldScope;
return EMPTY;
}

Expand All @@ -50,29 +48,17 @@ public String visit(ParameterNode node) {
@Override
public String visit(AssignmentExpressionNode node) {
String toReturn = "";
String oldScope = scope;
String leftHand = node.acceptVisitorLeftHand(this);
String rightHand = node.acceptVisitorRightHand(this);
if (leftHand.equals(rightHand)) {
toReturn = leftHand;
} else {
if (leftHand.equals("real")) {
toReturn = "real";
} else if (leftHand.equals("integer")) {

SemanticWarningList.addWarning(SemanticWarning.makeNewWarning(
"Attempt to save a "+rightHand+" into an "+leftHand+": "
+ ((IdentifierNode)node.getLeftHand()).getValue()));
}
if (leftHand.equals("real"))
toReturn = "real";
}

scope = oldScope;
return toReturn;
return toReturn;
}

private boolean isWithinProgramScope() {
return scope.substring(0,7).equals("program");
}

@Override
public String visit(CompoundStatementNode node) {
Expand All @@ -84,7 +70,7 @@ public String visit(CompoundStatementNode node) {
if (sNode instanceof ReturnStatementNode) {
returnFound = true;
indexOfReturn = i;
System.out.println("Index of return is : " + indexOfReturn);
//System.out.println("Index of return is : " + indexOfReturn);
}
i++;
sNode.accept(this);
Expand All @@ -96,24 +82,19 @@ public String visit(CompoundStatementNode node) {
myStatements = node.getStatements();
int stateSize = node.getStatements().size();

System.out.println("This is old: " + myStatements);
System.out.println("The size of it is" + myStatements.size());
//System.out.println("This is old: " + myStatements);
//System.out.println("The size of it is" + myStatements.size());
int indexOfStartDelete = indexOfReturn+1;

for(int x = 0; x < stateSize-indexOfStartDelete; x++){
System.out.println(myStatements.remove(indexOfStartDelete));
myStatements.remove(indexOfStartDelete);
}

node.setStatements(myStatements);
System.out.println("This is new: " + node.getStatements());
//System.out.println("This is new: " + node.getStatements());
}
return EMPTY;
}

private String getFunctionName(String string) {
String[] parts = string.split("_");
return parts[parts.length-1];
}

@Override
public String visit(DivisionExpressionNode node) {
Expand Down Expand Up @@ -197,7 +178,7 @@ public String visit(ComparisonNode node) {

@Override
public String visit(WhileExpressionNode node) {
String comparison = node.acceptVisitorLeftHand(this);
node.acceptVisitorLeftHand(this);
node.acceptVisitorRightHand(this);
return EMPTY;
}
Expand Down Expand Up @@ -233,8 +214,6 @@ public String visit(FunctionCallNode node) {
if (functionType.equals(parameters)) {
return functionType;
} else {
SemanticWarningList.addWarning(SemanticWarning.makeNewWarning("Function '"+id
+"' requires parameters '"+functionType +"'. Got: '"+ parameters+"'"));
return EMPTY;
}
}
Expand Down Expand Up @@ -289,35 +268,19 @@ private String handleTwoFieldNode(TwoFieldNode node) {
}

private String compare(String leftHandSide, String rightHandSide) {
// if (leftHandSide != null && rightHandSide != null) {
if (leftHandSide.equals("integer")) {
if (rightHandSide.equals("integer")) {
return "integer";
} else if (rightHandSide.equals("real")){
//TODO: CONVERT LEFT HAND TO REAL?
return "real";
} else {
SemanticWarningList.addWarning(SemanticWarning.makeNewWarning("Unknown type for variable '" + rightHandSide + "'. Undeclared variable."));
}
} else if (leftHandSide.equals("real")) {
if (rightHandSide.equals("integer") || rightHandSide.equals("real")) {
//TODO: CONVERT RIGHT HAND TO REAL IF INT?
return "real";
} else {
SemanticWarningList.addWarning(SemanticWarning.makeNewWarning("Unknown type for variable '" + rightHandSide + "'. Undeclared variable."));
}
} else {
SemanticWarningList.addWarning(SemanticWarning.makeNewWarning("Unknown type for variable '" + leftHandSide + "'. Undeclared variable."));
}
//if left==right
//return left
//else if left = real
//return real




// }
}
}
return EMPTY;
}
}
Expand Down

0 comments on commit 6b68924

Please sign in to comment.