From b29986a4b536898158d73740133faf33e8f4cb9d Mon Sep 17 00:00:00 2001 From: Victor Date: Thu, 23 Jun 2016 18:38:50 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20ResultVisitor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ownlang/parser/ast/ArrayExpression.java | 5 +++ .../parser/ast/AssignmentExpression.java | 5 +++ .../ownlang/parser/ast/BinaryExpression.java | 5 +++ .../ownlang/parser/ast/BlockStatement.java | 5 +++ .../ownlang/parser/ast/BreakStatement.java | 5 +++ .../parser/ast/ConditionalExpression.java | 5 +++ .../parser/ast/ContainerAccessExpression.java | 5 +++ .../ownlang/parser/ast/ContinueStatement.java | 5 +++ .../ast/DestructuringAssignmentStatement.java | 5 +++ .../ownlang/parser/ast/DoWhileStatement.java | 5 +++ .../ownlang/parser/ast/ExprStatement.java | 5 +++ .../ownlang/parser/ast/ForStatement.java | 5 +++ .../parser/ast/ForeachArrayStatement.java | 5 +++ .../parser/ast/ForeachMapStatement.java | 5 +++ .../parser/ast/FunctionDefineStatement.java | 5 +++ .../ast/FunctionReferenceExpression.java | 5 +++ .../parser/ast/FunctionalExpression.java | 5 +++ .../ownlang/parser/ast/IfStatement.java | 5 +++ .../ownlang/parser/ast/IncludeStatement.java | 5 +++ .../ownlang/parser/ast/MapExpression.java | 5 +++ .../ownlang/parser/ast/MatchExpression.java | 5 +++ src/com/annimon/ownlang/parser/ast/Node.java | 2 + .../ownlang/parser/ast/PrintStatement.java | 5 +++ .../ownlang/parser/ast/PrintlnStatement.java | 5 +++ .../ownlang/parser/ast/ResultVisitor.java | 41 +++++++++++++++++++ .../ownlang/parser/ast/ReturnStatement.java | 5 +++ .../ownlang/parser/ast/TernaryExpression.java | 5 +++ .../ownlang/parser/ast/UnaryExpression.java | 5 +++ .../ownlang/parser/ast/UseStatement.java | 5 +++ .../ownlang/parser/ast/ValueExpression.java | 5 +++ .../parser/ast/VariableExpression.java | 5 +++ .../ownlang/parser/ast/WhileStatement.java | 5 +++ 32 files changed, 193 insertions(+) create mode 100644 src/com/annimon/ownlang/parser/ast/ResultVisitor.java diff --git a/src/com/annimon/ownlang/parser/ast/ArrayExpression.java b/src/com/annimon/ownlang/parser/ast/ArrayExpression.java index 8ea8af2..7feed69 100644 --- a/src/com/annimon/ownlang/parser/ast/ArrayExpression.java +++ b/src/com/annimon/ownlang/parser/ast/ArrayExpression.java @@ -31,6 +31,11 @@ public final class ArrayExpression implements Expression { visitor.visit(this); } + @Override + public R accept(ResultVisitor visitor, T t) { + return visitor.visit(this, t); + } + @Override public String toString() { return elements.toString(); diff --git a/src/com/annimon/ownlang/parser/ast/AssignmentExpression.java b/src/com/annimon/ownlang/parser/ast/AssignmentExpression.java index 140a714..e10cef4 100644 --- a/src/com/annimon/ownlang/parser/ast/AssignmentExpression.java +++ b/src/com/annimon/ownlang/parser/ast/AssignmentExpression.java @@ -39,6 +39,11 @@ public final class AssignmentExpression implements Expression, Statement { visitor.visit(this); } + @Override + public R accept(ResultVisitor visitor, T t) { + return visitor.visit(this, t); + } + @Override public String toString() { final String op = (operation == null) ? "" : operation.toString(); diff --git a/src/com/annimon/ownlang/parser/ast/BinaryExpression.java b/src/com/annimon/ownlang/parser/ast/BinaryExpression.java index 1266f02..4259d11 100644 --- a/src/com/annimon/ownlang/parser/ast/BinaryExpression.java +++ b/src/com/annimon/ownlang/parser/ast/BinaryExpression.java @@ -455,6 +455,11 @@ public final class BinaryExpression implements Expression { visitor.visit(this); } + @Override + public R accept(ResultVisitor visitor, T t) { + return visitor.visit(this, t); + } + @Override public String toString() { return String.format("%s %s %s", expr1, operation, expr2); diff --git a/src/com/annimon/ownlang/parser/ast/BlockStatement.java b/src/com/annimon/ownlang/parser/ast/BlockStatement.java index 0e4fce8..234c5aa 100644 --- a/src/com/annimon/ownlang/parser/ast/BlockStatement.java +++ b/src/com/annimon/ownlang/parser/ast/BlockStatement.java @@ -31,6 +31,11 @@ public final class BlockStatement implements Statement { visitor.visit(this); } + @Override + public R accept(ResultVisitor visitor, T t) { + return visitor.visit(this, t); + } + @Override public String toString() { final StringBuilder result = new StringBuilder(); diff --git a/src/com/annimon/ownlang/parser/ast/BreakStatement.java b/src/com/annimon/ownlang/parser/ast/BreakStatement.java index 8d65b57..e27d350 100644 --- a/src/com/annimon/ownlang/parser/ast/BreakStatement.java +++ b/src/com/annimon/ownlang/parser/ast/BreakStatement.java @@ -16,6 +16,11 @@ public final class BreakStatement extends RuntimeException implements Statement visitor.visit(this); } + @Override + public R accept(ResultVisitor visitor, T t) { + return visitor.visit(this, t); + } + @Override public String toString() { return "break"; diff --git a/src/com/annimon/ownlang/parser/ast/ConditionalExpression.java b/src/com/annimon/ownlang/parser/ast/ConditionalExpression.java index 658596b..1ee8925 100644 --- a/src/com/annimon/ownlang/parser/ast/ConditionalExpression.java +++ b/src/com/annimon/ownlang/parser/ast/ConditionalExpression.java @@ -86,6 +86,11 @@ public final class ConditionalExpression implements Expression { visitor.visit(this); } + @Override + public R accept(ResultVisitor visitor, T t) { + return visitor.visit(this, t); + } + @Override public String toString() { return String.format("%s %s %s", expr1, operation.getName(), expr2); diff --git a/src/com/annimon/ownlang/parser/ast/ContainerAccessExpression.java b/src/com/annimon/ownlang/parser/ast/ContainerAccessExpression.java index 5b13cb1..3e9d541 100644 --- a/src/com/annimon/ownlang/parser/ast/ContainerAccessExpression.java +++ b/src/com/annimon/ownlang/parser/ast/ContainerAccessExpression.java @@ -101,6 +101,11 @@ public final class ContainerAccessExpression implements Expression, Accessible { visitor.visit(this); } + @Override + public R accept(ResultVisitor visitor, T t) { + return visitor.visit(this, t); + } + @Override public String toString() { return variable + indices; diff --git a/src/com/annimon/ownlang/parser/ast/ContinueStatement.java b/src/com/annimon/ownlang/parser/ast/ContinueStatement.java index 6280a6d..442ff09 100644 --- a/src/com/annimon/ownlang/parser/ast/ContinueStatement.java +++ b/src/com/annimon/ownlang/parser/ast/ContinueStatement.java @@ -16,6 +16,11 @@ public final class ContinueStatement extends RuntimeException implements Stateme visitor.visit(this); } + @Override + public R accept(ResultVisitor visitor, T t) { + return visitor.visit(this, t); + } + @Override public String toString() { return "continue"; diff --git a/src/com/annimon/ownlang/parser/ast/DestructuringAssignmentStatement.java b/src/com/annimon/ownlang/parser/ast/DestructuringAssignmentStatement.java index 2b1d24f..5397105 100644 --- a/src/com/annimon/ownlang/parser/ast/DestructuringAssignmentStatement.java +++ b/src/com/annimon/ownlang/parser/ast/DestructuringAssignmentStatement.java @@ -63,6 +63,11 @@ public final class DestructuringAssignmentStatement implements Statement { visitor.visit(this); } + @Override + public R accept(ResultVisitor visitor, T t) { + return visitor.visit(this, t); + } + @Override public String toString() { return variables.toString(); diff --git a/src/com/annimon/ownlang/parser/ast/DoWhileStatement.java b/src/com/annimon/ownlang/parser/ast/DoWhileStatement.java index d3ee971..24a0bc8 100644 --- a/src/com/annimon/ownlang/parser/ast/DoWhileStatement.java +++ b/src/com/annimon/ownlang/parser/ast/DoWhileStatement.java @@ -33,6 +33,11 @@ public final class DoWhileStatement implements Statement { visitor.visit(this); } + @Override + public R accept(ResultVisitor visitor, T t) { + return visitor.visit(this, t); + } + @Override public String toString() { return "do " + statement + " while " + condition; diff --git a/src/com/annimon/ownlang/parser/ast/ExprStatement.java b/src/com/annimon/ownlang/parser/ast/ExprStatement.java index e7d8e8c..f70ace4 100644 --- a/src/com/annimon/ownlang/parser/ast/ExprStatement.java +++ b/src/com/annimon/ownlang/parser/ast/ExprStatement.java @@ -23,6 +23,11 @@ public final class ExprStatement implements Statement { visitor.visit(this); } + @Override + public R accept(ResultVisitor visitor, T t) { + return visitor.visit(this, t); + } + @Override public String toString() { return expr.toString(); diff --git a/src/com/annimon/ownlang/parser/ast/ForStatement.java b/src/com/annimon/ownlang/parser/ast/ForStatement.java index eaf7df6..a2ce069 100644 --- a/src/com/annimon/ownlang/parser/ast/ForStatement.java +++ b/src/com/annimon/ownlang/parser/ast/ForStatement.java @@ -36,6 +36,11 @@ public final class ForStatement implements Statement { visitor.visit(this); } + @Override + public R accept(ResultVisitor visitor, T t) { + return visitor.visit(this, t); + } + @Override public String toString() { return "for " + initialization + ", " + termination + ", " + increment + " " + statement; diff --git a/src/com/annimon/ownlang/parser/ast/ForeachArrayStatement.java b/src/com/annimon/ownlang/parser/ast/ForeachArrayStatement.java index c80e009..e73e179 100644 --- a/src/com/annimon/ownlang/parser/ast/ForeachArrayStatement.java +++ b/src/com/annimon/ownlang/parser/ast/ForeachArrayStatement.java @@ -44,6 +44,11 @@ public final class ForeachArrayStatement implements Statement { visitor.visit(this); } + @Override + public R accept(ResultVisitor visitor, T t) { + return visitor.visit(this, t); + } + @Override public String toString() { return String.format("for %s : %s %s", variable, container, body); diff --git a/src/com/annimon/ownlang/parser/ast/ForeachMapStatement.java b/src/com/annimon/ownlang/parser/ast/ForeachMapStatement.java index ee9bc4b..d12d413 100644 --- a/src/com/annimon/ownlang/parser/ast/ForeachMapStatement.java +++ b/src/com/annimon/ownlang/parser/ast/ForeachMapStatement.java @@ -51,6 +51,11 @@ public final class ForeachMapStatement implements Statement { visitor.visit(this); } + @Override + public R accept(ResultVisitor visitor, T t) { + return visitor.visit(this, t); + } + @Override public String toString() { return String.format("for %s, %s : %s %s", key, value, container, body); diff --git a/src/com/annimon/ownlang/parser/ast/FunctionDefineStatement.java b/src/com/annimon/ownlang/parser/ast/FunctionDefineStatement.java index 6f7ffaf..02de945 100644 --- a/src/com/annimon/ownlang/parser/ast/FunctionDefineStatement.java +++ b/src/com/annimon/ownlang/parser/ast/FunctionDefineStatement.java @@ -29,6 +29,11 @@ public final class FunctionDefineStatement implements Statement { visitor.visit(this); } + @Override + public R accept(ResultVisitor visitor, T t) { + return visitor.visit(this, t); + } + @Override public String toString() { return String.format("def %s%s %s", name, arguments, body); diff --git a/src/com/annimon/ownlang/parser/ast/FunctionReferenceExpression.java b/src/com/annimon/ownlang/parser/ast/FunctionReferenceExpression.java index c60ea09..90ddc27 100644 --- a/src/com/annimon/ownlang/parser/ast/FunctionReferenceExpression.java +++ b/src/com/annimon/ownlang/parser/ast/FunctionReferenceExpression.java @@ -24,6 +24,11 @@ public final class FunctionReferenceExpression implements Expression { visitor.visit(this); } + @Override + public R accept(ResultVisitor visitor, T t) { + return visitor.visit(this, t); + } + @Override public String toString() { return "::" + name; diff --git a/src/com/annimon/ownlang/parser/ast/FunctionalExpression.java b/src/com/annimon/ownlang/parser/ast/FunctionalExpression.java index 0770fd5..2c4642b 100644 --- a/src/com/annimon/ownlang/parser/ast/FunctionalExpression.java +++ b/src/com/annimon/ownlang/parser/ast/FunctionalExpression.java @@ -71,6 +71,11 @@ public final class FunctionalExpression implements Expression, Statement { visitor.visit(this); } + @Override + public R accept(ResultVisitor visitor, T t) { + return visitor.visit(this, t); + } + @Override public String toString() { return functionExpr + "(" + arguments.toString() + ")"; diff --git a/src/com/annimon/ownlang/parser/ast/IfStatement.java b/src/com/annimon/ownlang/parser/ast/IfStatement.java index 64c8700..4435443 100644 --- a/src/com/annimon/ownlang/parser/ast/IfStatement.java +++ b/src/com/annimon/ownlang/parser/ast/IfStatement.java @@ -30,6 +30,11 @@ public final class IfStatement implements Statement { visitor.visit(this); } + @Override + public R accept(ResultVisitor visitor, T t) { + return visitor.visit(this, t); + } + @Override public String toString() { final StringBuilder result = new StringBuilder(); diff --git a/src/com/annimon/ownlang/parser/ast/IncludeStatement.java b/src/com/annimon/ownlang/parser/ast/IncludeStatement.java index 05b84cd..4e3cd14 100644 --- a/src/com/annimon/ownlang/parser/ast/IncludeStatement.java +++ b/src/com/annimon/ownlang/parser/ast/IncludeStatement.java @@ -49,6 +49,11 @@ public final class IncludeStatement implements Statement { visitor.visit(this); } + @Override + public R accept(ResultVisitor visitor, T t) { + return visitor.visit(this, t); + } + @Override public String toString() { return "include " + expression; diff --git a/src/com/annimon/ownlang/parser/ast/MapExpression.java b/src/com/annimon/ownlang/parser/ast/MapExpression.java index 0442866..3f7e561 100644 --- a/src/com/annimon/ownlang/parser/ast/MapExpression.java +++ b/src/com/annimon/ownlang/parser/ast/MapExpression.java @@ -31,6 +31,11 @@ public final class MapExpression implements Expression { visitor.visit(this); } + @Override + public R accept(ResultVisitor visitor, T t) { + return visitor.visit(this, t); + } + @Override public String toString() { return elements.toString(); diff --git a/src/com/annimon/ownlang/parser/ast/MatchExpression.java b/src/com/annimon/ownlang/parser/ast/MatchExpression.java index 1f1faa5..e21a8aa 100644 --- a/src/com/annimon/ownlang/parser/ast/MatchExpression.java +++ b/src/com/annimon/ownlang/parser/ast/MatchExpression.java @@ -168,6 +168,11 @@ public final class MatchExpression implements Expression, Statement { visitor.visit(this); } + @Override + public R accept(ResultVisitor visitor, T t) { + return visitor.visit(this, t); + } + @Override public String toString() { final StringBuilder sb = new StringBuilder(); diff --git a/src/com/annimon/ownlang/parser/ast/Node.java b/src/com/annimon/ownlang/parser/ast/Node.java index dd74f9f..c9d2d83 100644 --- a/src/com/annimon/ownlang/parser/ast/Node.java +++ b/src/com/annimon/ownlang/parser/ast/Node.java @@ -7,4 +7,6 @@ package com.annimon.ownlang.parser.ast; public interface Node { void accept(Visitor visitor); + + R accept(ResultVisitor visitor, T input); } diff --git a/src/com/annimon/ownlang/parser/ast/PrintStatement.java b/src/com/annimon/ownlang/parser/ast/PrintStatement.java index 8b175d6..a57d60a 100644 --- a/src/com/annimon/ownlang/parser/ast/PrintStatement.java +++ b/src/com/annimon/ownlang/parser/ast/PrintStatement.java @@ -24,6 +24,11 @@ public final class PrintStatement implements Statement { visitor.visit(this); } + @Override + public R accept(ResultVisitor visitor, T t) { + return visitor.visit(this, t); + } + @Override public String toString() { return "print " + expression; diff --git a/src/com/annimon/ownlang/parser/ast/PrintlnStatement.java b/src/com/annimon/ownlang/parser/ast/PrintlnStatement.java index 6f7823e..61ca92f 100644 --- a/src/com/annimon/ownlang/parser/ast/PrintlnStatement.java +++ b/src/com/annimon/ownlang/parser/ast/PrintlnStatement.java @@ -24,6 +24,11 @@ public final class PrintlnStatement implements Statement { visitor.visit(this); } + @Override + public R accept(ResultVisitor visitor, T t) { + return visitor.visit(this, t); + } + @Override public String toString() { return "println " + expression; diff --git a/src/com/annimon/ownlang/parser/ast/ResultVisitor.java b/src/com/annimon/ownlang/parser/ast/ResultVisitor.java new file mode 100644 index 0000000..a98e7ab --- /dev/null +++ b/src/com/annimon/ownlang/parser/ast/ResultVisitor.java @@ -0,0 +1,41 @@ +package com.annimon.ownlang.parser.ast; + +/** + * + * @author aNNiMON + * @param the result type + * @param the type if the input + */ +public interface ResultVisitor { + + R visit(ArrayExpression s, T t); + R visit(AssignmentExpression s, T t); + R visit(BinaryExpression s, T t); + R visit(BlockStatement s, T t); + R visit(BreakStatement s, T t); + R visit(ConditionalExpression s, T t); + R visit(ContainerAccessExpression s, T t); + R visit(ContinueStatement s, T t); + R visit(DoWhileStatement s, T t); + R visit(DestructuringAssignmentStatement s, T t); + R visit(ForStatement s, T t); + R visit(ForeachArrayStatement s, T t); + R visit(ForeachMapStatement s, T t); + R visit(FunctionDefineStatement s, T t); + R visit(FunctionReferenceExpression s, T t); + R visit(ExprStatement s, T t); + R visit(FunctionalExpression s, T t); + R visit(IfStatement s, T t); + R visit(IncludeStatement s, T t); + R visit(MapExpression s, T t); + R visit(MatchExpression s, T t); + R visit(PrintStatement s, T t); + R visit(PrintlnStatement s, T t); + R visit(ReturnStatement s, T t); + R visit(TernaryExpression s, T t); + R visit(UnaryExpression s, T t); + R visit(ValueExpression s, T t); + R visit(VariableExpression s, T t); + R visit(WhileStatement s, T t); + R visit(UseStatement s, T t); +} diff --git a/src/com/annimon/ownlang/parser/ast/ReturnStatement.java b/src/com/annimon/ownlang/parser/ast/ReturnStatement.java index 5d5ee98..8e6aaaa 100644 --- a/src/com/annimon/ownlang/parser/ast/ReturnStatement.java +++ b/src/com/annimon/ownlang/parser/ast/ReturnStatement.java @@ -30,6 +30,11 @@ public final class ReturnStatement extends RuntimeException implements Statement visitor.visit(this); } + @Override + public R accept(ResultVisitor visitor, T t) { + return visitor.visit(this, t); + } + @Override public String toString() { return "return " + expression; diff --git a/src/com/annimon/ownlang/parser/ast/TernaryExpression.java b/src/com/annimon/ownlang/parser/ast/TernaryExpression.java index 5fec52b..255f2b3 100644 --- a/src/com/annimon/ownlang/parser/ast/TernaryExpression.java +++ b/src/com/annimon/ownlang/parser/ast/TernaryExpression.java @@ -31,6 +31,11 @@ public final class TernaryExpression implements Expression { visitor.visit(this); } + @Override + public R accept(ResultVisitor visitor, T t) { + return visitor.visit(this, t); + } + @Override public String toString() { return String.format("%s ? %s : %s", condition, trueExpr, falseExpr); diff --git a/src/com/annimon/ownlang/parser/ast/UnaryExpression.java b/src/com/annimon/ownlang/parser/ast/UnaryExpression.java index e561d92..f7d4839 100644 --- a/src/com/annimon/ownlang/parser/ast/UnaryExpression.java +++ b/src/com/annimon/ownlang/parser/ast/UnaryExpression.java @@ -157,6 +157,11 @@ public final class UnaryExpression implements Expression, Statement { visitor.visit(this); } + @Override + public R accept(ResultVisitor visitor, T t) { + return visitor.visit(this, t); + } + @Override public String toString() { switch (operation) { diff --git a/src/com/annimon/ownlang/parser/ast/UseStatement.java b/src/com/annimon/ownlang/parser/ast/UseStatement.java index cd46154..1dd7163 100644 --- a/src/com/annimon/ownlang/parser/ast/UseStatement.java +++ b/src/com/annimon/ownlang/parser/ast/UseStatement.java @@ -32,6 +32,11 @@ public final class UseStatement implements Statement { visitor.visit(this); } + @Override + public R accept(ResultVisitor visitor, T t) { + return visitor.visit(this, t); + } + @Override public String toString() { return "use " + expression; diff --git a/src/com/annimon/ownlang/parser/ast/ValueExpression.java b/src/com/annimon/ownlang/parser/ast/ValueExpression.java index 83ba50b..1098ff9 100644 --- a/src/com/annimon/ownlang/parser/ast/ValueExpression.java +++ b/src/com/annimon/ownlang/parser/ast/ValueExpression.java @@ -40,6 +40,11 @@ public final class ValueExpression implements Expression { visitor.visit(this); } + @Override + public R accept(ResultVisitor visitor, T t) { + return visitor.visit(this, t); + } + @Override public String toString() { return value.asString(); diff --git a/src/com/annimon/ownlang/parser/ast/VariableExpression.java b/src/com/annimon/ownlang/parser/ast/VariableExpression.java index d4f100e..02daac8 100644 --- a/src/com/annimon/ownlang/parser/ast/VariableExpression.java +++ b/src/com/annimon/ownlang/parser/ast/VariableExpression.java @@ -38,6 +38,11 @@ public final class VariableExpression implements Expression, Accessible { visitor.visit(this); } + @Override + public R accept(ResultVisitor visitor, T t) { + return visitor.visit(this, t); + } + @Override public String toString() { return name; diff --git a/src/com/annimon/ownlang/parser/ast/WhileStatement.java b/src/com/annimon/ownlang/parser/ast/WhileStatement.java index 4ae348c..d42cf4f 100644 --- a/src/com/annimon/ownlang/parser/ast/WhileStatement.java +++ b/src/com/annimon/ownlang/parser/ast/WhileStatement.java @@ -32,6 +32,11 @@ public final class WhileStatement implements Statement { visitor.visit(this); } + @Override + public R accept(ResultVisitor visitor, T t) { + return visitor.visit(this, t); + } + @Override public String toString() { return "while " + condition + " " + statement;