From d45c17dcafefaa9baba8aee1cd06600d759d4191 Mon Sep 17 00:00:00 2001 From: Rob Greene Date: Sat, 9 Jun 2018 11:24:29 -0500 Subject: [PATCH] A bit of documentation and making constructors uniform. --- .../applecommander/bastokenizer/api/Optimization.java | 8 ++++---- .../bastokenizer/api/optimizations/BaseVisitor.java | 6 +++++- .../api/optimizations/RemoveEmptyStatements.java | 6 ++++++ .../api/optimizations/RemoveRemStatements.java | 6 ++++++ .../bastokenizer/api/optimizations/Renumber.java | 10 ++++++++++ 5 files changed, 31 insertions(+), 5 deletions(-) diff --git a/api/src/main/java/io/github/applecommander/bastokenizer/api/Optimization.java b/api/src/main/java/io/github/applecommander/bastokenizer/api/Optimization.java index d9dd14c..90a6c72 100644 --- a/api/src/main/java/io/github/applecommander/bastokenizer/api/Optimization.java +++ b/api/src/main/java/io/github/applecommander/bastokenizer/api/Optimization.java @@ -8,10 +8,10 @@ import io.github.applecommander.bastokenizer.api.optimizations.RemoveRemStatemen import io.github.applecommander.bastokenizer.api.optimizations.Renumber; public enum Optimization { - REMOVE_EMPTY_STATEMENTS(config -> new RemoveEmptyStatements()), - REMOVE_REM_STATEMENTS(config -> new RemoveRemStatements()), - MERGE_LINES(config -> new MergeLines(config)), - RENUMBER(config -> new Renumber()); + REMOVE_EMPTY_STATEMENTS(RemoveEmptyStatements::new), + REMOVE_REM_STATEMENTS(RemoveRemStatements::new), + MERGE_LINES(MergeLines::new), + RENUMBER(Renumber::new); private Function factory; diff --git a/api/src/main/java/io/github/applecommander/bastokenizer/api/optimizations/BaseVisitor.java b/api/src/main/java/io/github/applecommander/bastokenizer/api/optimizations/BaseVisitor.java index abd7d7c..b3e9ec3 100644 --- a/api/src/main/java/io/github/applecommander/bastokenizer/api/optimizations/BaseVisitor.java +++ b/api/src/main/java/io/github/applecommander/bastokenizer/api/optimizations/BaseVisitor.java @@ -10,7 +10,11 @@ import io.github.applecommander.bastokenizer.api.model.Program; import io.github.applecommander.bastokenizer.api.model.Statement; import io.github.applecommander.bastokenizer.api.model.Token; -/** Common base class for optimization visitors that allow the program tree to be rewritten. */ +/** + * Common base class for optimization visitors that allow the program tree to be rewritten. + * Note that {@code #reassignments} is used to track line number movement and is automatically + * applied at the end of the program visit. + */ public class BaseVisitor implements Visitor { protected Map reassignments = new HashMap<>(); protected Program newProgram; diff --git a/api/src/main/java/io/github/applecommander/bastokenizer/api/optimizations/RemoveEmptyStatements.java b/api/src/main/java/io/github/applecommander/bastokenizer/api/optimizations/RemoveEmptyStatements.java index 3833af3..c09e7d9 100644 --- a/api/src/main/java/io/github/applecommander/bastokenizer/api/optimizations/RemoveEmptyStatements.java +++ b/api/src/main/java/io/github/applecommander/bastokenizer/api/optimizations/RemoveEmptyStatements.java @@ -1,8 +1,14 @@ package io.github.applecommander.bastokenizer.api.optimizations; +import io.github.applecommander.bastokenizer.api.Configuration; import io.github.applecommander.bastokenizer.api.model.Statement; +/** Remove any empty statements during the tree walk. Effective removes double "::"'s. */ public class RemoveEmptyStatements extends BaseVisitor { + public RemoveEmptyStatements(Configuration config) { + // ignored + } + @Override public Statement visit(Statement statement) { return statement.tokens.isEmpty() ? null : statement; diff --git a/api/src/main/java/io/github/applecommander/bastokenizer/api/optimizations/RemoveRemStatements.java b/api/src/main/java/io/github/applecommander/bastokenizer/api/optimizations/RemoveRemStatements.java index 2160691..b665106 100644 --- a/api/src/main/java/io/github/applecommander/bastokenizer/api/optimizations/RemoveRemStatements.java +++ b/api/src/main/java/io/github/applecommander/bastokenizer/api/optimizations/RemoveRemStatements.java @@ -1,9 +1,15 @@ package io.github.applecommander.bastokenizer.api.optimizations; +import io.github.applecommander.bastokenizer.api.Configuration; import io.github.applecommander.bastokenizer.api.model.Statement; import io.github.applecommander.bastokenizer.api.model.Token.Type; +/** Drop all REM statements as they are encountered in the tree walk. */ public class RemoveRemStatements extends BaseVisitor { + public RemoveRemStatements(Configuration config) { + // ignored + } + @Override public Statement visit(Statement statement) { return statement.tokens.get(0).type == Type.COMMENT ? null : statement; diff --git a/api/src/main/java/io/github/applecommander/bastokenizer/api/optimizations/Renumber.java b/api/src/main/java/io/github/applecommander/bastokenizer/api/optimizations/Renumber.java index 95f6910..305a903 100644 --- a/api/src/main/java/io/github/applecommander/bastokenizer/api/optimizations/Renumber.java +++ b/api/src/main/java/io/github/applecommander/bastokenizer/api/optimizations/Renumber.java @@ -1,9 +1,19 @@ package io.github.applecommander.bastokenizer.api.optimizations; +import io.github.applecommander.bastokenizer.api.Configuration; import io.github.applecommander.bastokenizer.api.model.Line; +/** + * A simple renumbering algorithm that maps the reassignments and lets {@code BaseVisitor} + * perform the actual renumbering! + */ public class Renumber extends BaseVisitor { protected int lineNumber = 0; + + public Renumber(Configuration config) { + // ignored + } + @Override public Line visit(Line line) { Line newLine = new Line(lineNumber++, this.newProgram);