task5 complete

main
simonkellet 1 year ago
parent a607f09f6b
commit a59e60d2bc
  1. 33
      Triangle.Compiler/src/main/java/triangle/Compiler.java
  2. 2
      Triangle.Compiler/src/main/java/triangle/optimiser/SummaryStats.java
  3. BIN
      build/libs/Triangle-Tools.jar
  4. BIN
      checkstats.tri
  5. 18
      programs/checkstats.tri
  6. BIN
      simple.tri

@ -28,6 +28,9 @@ import triangle.syntacticAnalyzer.Scanner;
import triangle.syntacticAnalyzer.SourceFile; import triangle.syntacticAnalyzer.SourceFile;
import triangle.treeDrawer.Drawer; import triangle.treeDrawer.Drawer;
// Task 5b
import triangle.optimiser.SummaryStats;
// Task 2 // Task 2
import com.sampullara.cli.Args; import com.sampullara.cli.Args;
import com.sampullara.cli.Argument; import com.sampullara.cli.Argument;
@ -56,6 +59,9 @@ public class Compiler {
/** The AST representing the source program. */ /** The AST representing the source program. */
private static Program theAST; private static Program theAST;
//Task5b
private static SummaryStats stats;
//Task 2 //Task 2
@Argument(alias = "file", description="Name of file you want to compile", required = true) @Argument(alias = "file", description="Name of file you want to compile", required = true)
@ -112,9 +118,6 @@ public class Compiler {
encoder = new Encoder(emitter, reporter); encoder = new Encoder(emitter, reporter);
drawer = new Drawer(); drawer = new Drawer();
//Task 5b
stats = new SummaryStats();
theAST = parser.parseProgram(); // 1st pass theAST = parser.parseProgram(); // 1st pass
if (reporter.getNumErrors() == 0) { if (reporter.getNumErrors() == 0) {
System.out.println("Contextual Analysis ..."); System.out.println("Contextual Analysis ...");
@ -141,9 +144,13 @@ public class Compiler {
if (successful) { if (successful) {
emitter.saveObjectProgram(objectName); emitter.saveObjectProgram(objectName);
System.out.println("Compilation was successful."); System.out.println("Compilation was successful.");
//Task 5b //Task 5b
System.out.println("[STATS] CharExpr: " + stats.getCharExprCount() + "!"); if (showStats) {
System.out.println("[STATS] IntExpr: " + stats.getIntExprCount() + "!"); theAST.visit(stats = new SummaryStats());
System.out.println("[STATS] CharExpr: " + stats.getCharExprCount() + "!");
System.out.println("[STATS] IntExpr: " + stats.getIntExprCount() + "!");
}
} else { } else {
System.out.println("Compilation was unsuccessful."); System.out.println("Compilation was unsuccessful.");
} }
@ -160,24 +167,10 @@ public class Compiler {
//Task 2 //Task 2
Args.parseOrExit(Compiler.class, args); Args.parseOrExit(Compiler.class, args);
var compiledOK = compileProgram(Compiler.sourceName, Compiler.objectName, Compiler.showTree, false, Compiler.showTreeAfterFolding); var compiledOK = compileProgram(Compiler.sourceName, Compiler.objectName, Compiler.showTree, false, Compiler.showTreeAfterFolding, Compiler.showStats);
if (!showTree) { if (!showTree) {
System.exit(compiledOK ? 0 : 1); System.exit(compiledOK ? 0 : 1);
} }
} }
/* No longer needed */
private static void parseArgs(String[] args) {
for (String s : args) {
var sl = s.toLowerCase();
if (sl.equals("tree")) {
showTree = true;
} else if (sl.startsWith("-o=")) {
objectName = s.substring(3);
} else if (sl.equals("folding")) {
folding = true;
}
}
}
} }

@ -321,8 +321,8 @@ public class SummaryStats implements ActualParameterVisitor<Void, AbstractSyntax
@Override @Override
public AbstractSyntaxTree visitCharacterExpression(CharacterExpression ast, Void arg) { public AbstractSyntaxTree visitCharacterExpression(CharacterExpression ast, Void arg) {
countCharExpr++; //Increment the count for stats
ast.CL.visit(this); ast.CL.visit(this);
countCharExpr++; //Increment the count for stats after visiting
return null; return null;
} }

Binary file not shown.

Binary file not shown.

@ -0,0 +1,18 @@
let
var a : Integer;
var b : Integer;
var c : Integer;
var x : Char;
var y : Char
in
{
a := 1;
b := 2;
a**;
b := 100;
x := 'A';
y := 'Z';
}

Binary file not shown.
Loading…
Cancel
Save