Добавлен ResultVisitor

This commit is contained in:
Victor 2016-06-23 18:38:50 +03:00
parent 138100bfe0
commit b29986a4b5
32 changed files with 193 additions and 0 deletions

View File

@ -31,6 +31,11 @@ public final class ArrayExpression implements Expression {
visitor.visit(this); visitor.visit(this);
} }
@Override
public <R, T> R accept(ResultVisitor<R, T> visitor, T t) {
return visitor.visit(this, t);
}
@Override @Override
public String toString() { public String toString() {
return elements.toString(); return elements.toString();

View File

@ -39,6 +39,11 @@ public final class AssignmentExpression implements Expression, Statement {
visitor.visit(this); visitor.visit(this);
} }
@Override
public <R, T> R accept(ResultVisitor<R, T> visitor, T t) {
return visitor.visit(this, t);
}
@Override @Override
public String toString() { public String toString() {
final String op = (operation == null) ? "" : operation.toString(); final String op = (operation == null) ? "" : operation.toString();

View File

@ -455,6 +455,11 @@ public final class BinaryExpression implements Expression {
visitor.visit(this); visitor.visit(this);
} }
@Override
public <R, T> R accept(ResultVisitor<R, T> visitor, T t) {
return visitor.visit(this, t);
}
@Override @Override
public String toString() { public String toString() {
return String.format("%s %s %s", expr1, operation, expr2); return String.format("%s %s %s", expr1, operation, expr2);

View File

@ -31,6 +31,11 @@ public final class BlockStatement implements Statement {
visitor.visit(this); visitor.visit(this);
} }
@Override
public <R, T> R accept(ResultVisitor<R, T> visitor, T t) {
return visitor.visit(this, t);
}
@Override @Override
public String toString() { public String toString() {
final StringBuilder result = new StringBuilder(); final StringBuilder result = new StringBuilder();

View File

@ -16,6 +16,11 @@ public final class BreakStatement extends RuntimeException implements Statement
visitor.visit(this); visitor.visit(this);
} }
@Override
public <R, T> R accept(ResultVisitor<R, T> visitor, T t) {
return visitor.visit(this, t);
}
@Override @Override
public String toString() { public String toString() {
return "break"; return "break";

View File

@ -86,6 +86,11 @@ public final class ConditionalExpression implements Expression {
visitor.visit(this); visitor.visit(this);
} }
@Override
public <R, T> R accept(ResultVisitor<R, T> visitor, T t) {
return visitor.visit(this, t);
}
@Override @Override
public String toString() { public String toString() {
return String.format("%s %s %s", expr1, operation.getName(), expr2); return String.format("%s %s %s", expr1, operation.getName(), expr2);

View File

@ -101,6 +101,11 @@ public final class ContainerAccessExpression implements Expression, Accessible {
visitor.visit(this); visitor.visit(this);
} }
@Override
public <R, T> R accept(ResultVisitor<R, T> visitor, T t) {
return visitor.visit(this, t);
}
@Override @Override
public String toString() { public String toString() {
return variable + indices; return variable + indices;

View File

@ -16,6 +16,11 @@ public final class ContinueStatement extends RuntimeException implements Stateme
visitor.visit(this); visitor.visit(this);
} }
@Override
public <R, T> R accept(ResultVisitor<R, T> visitor, T t) {
return visitor.visit(this, t);
}
@Override @Override
public String toString() { public String toString() {
return "continue"; return "continue";

View File

@ -63,6 +63,11 @@ public final class DestructuringAssignmentStatement implements Statement {
visitor.visit(this); visitor.visit(this);
} }
@Override
public <R, T> R accept(ResultVisitor<R, T> visitor, T t) {
return visitor.visit(this, t);
}
@Override @Override
public String toString() { public String toString() {
return variables.toString(); return variables.toString();

View File

@ -33,6 +33,11 @@ public final class DoWhileStatement implements Statement {
visitor.visit(this); visitor.visit(this);
} }
@Override
public <R, T> R accept(ResultVisitor<R, T> visitor, T t) {
return visitor.visit(this, t);
}
@Override @Override
public String toString() { public String toString() {
return "do " + statement + " while " + condition; return "do " + statement + " while " + condition;

View File

@ -23,6 +23,11 @@ public final class ExprStatement implements Statement {
visitor.visit(this); visitor.visit(this);
} }
@Override
public <R, T> R accept(ResultVisitor<R, T> visitor, T t) {
return visitor.visit(this, t);
}
@Override @Override
public String toString() { public String toString() {
return expr.toString(); return expr.toString();

View File

@ -36,6 +36,11 @@ public final class ForStatement implements Statement {
visitor.visit(this); visitor.visit(this);
} }
@Override
public <R, T> R accept(ResultVisitor<R, T> visitor, T t) {
return visitor.visit(this, t);
}
@Override @Override
public String toString() { public String toString() {
return "for " + initialization + ", " + termination + ", " + increment + " " + statement; return "for " + initialization + ", " + termination + ", " + increment + " " + statement;

View File

@ -44,6 +44,11 @@ public final class ForeachArrayStatement implements Statement {
visitor.visit(this); visitor.visit(this);
} }
@Override
public <R, T> R accept(ResultVisitor<R, T> visitor, T t) {
return visitor.visit(this, t);
}
@Override @Override
public String toString() { public String toString() {
return String.format("for %s : %s %s", variable, container, body); return String.format("for %s : %s %s", variable, container, body);

View File

@ -51,6 +51,11 @@ public final class ForeachMapStatement implements Statement {
visitor.visit(this); visitor.visit(this);
} }
@Override
public <R, T> R accept(ResultVisitor<R, T> visitor, T t) {
return visitor.visit(this, t);
}
@Override @Override
public String toString() { public String toString() {
return String.format("for %s, %s : %s %s", key, value, container, body); return String.format("for %s, %s : %s %s", key, value, container, body);

View File

@ -29,6 +29,11 @@ public final class FunctionDefineStatement implements Statement {
visitor.visit(this); visitor.visit(this);
} }
@Override
public <R, T> R accept(ResultVisitor<R, T> visitor, T t) {
return visitor.visit(this, t);
}
@Override @Override
public String toString() { public String toString() {
return String.format("def %s%s %s", name, arguments, body); return String.format("def %s%s %s", name, arguments, body);

View File

@ -24,6 +24,11 @@ public final class FunctionReferenceExpression implements Expression {
visitor.visit(this); visitor.visit(this);
} }
@Override
public <R, T> R accept(ResultVisitor<R, T> visitor, T t) {
return visitor.visit(this, t);
}
@Override @Override
public String toString() { public String toString() {
return "::" + name; return "::" + name;

View File

@ -71,6 +71,11 @@ public final class FunctionalExpression implements Expression, Statement {
visitor.visit(this); visitor.visit(this);
} }
@Override
public <R, T> R accept(ResultVisitor<R, T> visitor, T t) {
return visitor.visit(this, t);
}
@Override @Override
public String toString() { public String toString() {
return functionExpr + "(" + arguments.toString() + ")"; return functionExpr + "(" + arguments.toString() + ")";

View File

@ -30,6 +30,11 @@ public final class IfStatement implements Statement {
visitor.visit(this); visitor.visit(this);
} }
@Override
public <R, T> R accept(ResultVisitor<R, T> visitor, T t) {
return visitor.visit(this, t);
}
@Override @Override
public String toString() { public String toString() {
final StringBuilder result = new StringBuilder(); final StringBuilder result = new StringBuilder();

View File

@ -49,6 +49,11 @@ public final class IncludeStatement implements Statement {
visitor.visit(this); visitor.visit(this);
} }
@Override
public <R, T> R accept(ResultVisitor<R, T> visitor, T t) {
return visitor.visit(this, t);
}
@Override @Override
public String toString() { public String toString() {
return "include " + expression; return "include " + expression;

View File

@ -31,6 +31,11 @@ public final class MapExpression implements Expression {
visitor.visit(this); visitor.visit(this);
} }
@Override
public <R, T> R accept(ResultVisitor<R, T> visitor, T t) {
return visitor.visit(this, t);
}
@Override @Override
public String toString() { public String toString() {
return elements.toString(); return elements.toString();

View File

@ -168,6 +168,11 @@ public final class MatchExpression implements Expression, Statement {
visitor.visit(this); visitor.visit(this);
} }
@Override
public <R, T> R accept(ResultVisitor<R, T> visitor, T t) {
return visitor.visit(this, t);
}
@Override @Override
public String toString() { public String toString() {
final StringBuilder sb = new StringBuilder(); final StringBuilder sb = new StringBuilder();

View File

@ -7,4 +7,6 @@ package com.annimon.ownlang.parser.ast;
public interface Node { public interface Node {
void accept(Visitor visitor); void accept(Visitor visitor);
<R, T> R accept(ResultVisitor<R, T> visitor, T input);
} }

View File

@ -24,6 +24,11 @@ public final class PrintStatement implements Statement {
visitor.visit(this); visitor.visit(this);
} }
@Override
public <R, T> R accept(ResultVisitor<R, T> visitor, T t) {
return visitor.visit(this, t);
}
@Override @Override
public String toString() { public String toString() {
return "print " + expression; return "print " + expression;

View File

@ -24,6 +24,11 @@ public final class PrintlnStatement implements Statement {
visitor.visit(this); visitor.visit(this);
} }
@Override
public <R, T> R accept(ResultVisitor<R, T> visitor, T t) {
return visitor.visit(this, t);
}
@Override @Override
public String toString() { public String toString() {
return "println " + expression; return "println " + expression;

View File

@ -0,0 +1,41 @@
package com.annimon.ownlang.parser.ast;
/**
*
* @author aNNiMON
* @param <R> the result type
* @param <T> the type if the input
*/
public interface ResultVisitor<R, T> {
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);
}

View File

@ -30,6 +30,11 @@ public final class ReturnStatement extends RuntimeException implements Statement
visitor.visit(this); visitor.visit(this);
} }
@Override
public <R, T> R accept(ResultVisitor<R, T> visitor, T t) {
return visitor.visit(this, t);
}
@Override @Override
public String toString() { public String toString() {
return "return " + expression; return "return " + expression;

View File

@ -31,6 +31,11 @@ public final class TernaryExpression implements Expression {
visitor.visit(this); visitor.visit(this);
} }
@Override
public <R, T> R accept(ResultVisitor<R, T> visitor, T t) {
return visitor.visit(this, t);
}
@Override @Override
public String toString() { public String toString() {
return String.format("%s ? %s : %s", condition, trueExpr, falseExpr); return String.format("%s ? %s : %s", condition, trueExpr, falseExpr);

View File

@ -157,6 +157,11 @@ public final class UnaryExpression implements Expression, Statement {
visitor.visit(this); visitor.visit(this);
} }
@Override
public <R, T> R accept(ResultVisitor<R, T> visitor, T t) {
return visitor.visit(this, t);
}
@Override @Override
public String toString() { public String toString() {
switch (operation) { switch (operation) {

View File

@ -32,6 +32,11 @@ public final class UseStatement implements Statement {
visitor.visit(this); visitor.visit(this);
} }
@Override
public <R, T> R accept(ResultVisitor<R, T> visitor, T t) {
return visitor.visit(this, t);
}
@Override @Override
public String toString() { public String toString() {
return "use " + expression; return "use " + expression;

View File

@ -40,6 +40,11 @@ public final class ValueExpression implements Expression {
visitor.visit(this); visitor.visit(this);
} }
@Override
public <R, T> R accept(ResultVisitor<R, T> visitor, T t) {
return visitor.visit(this, t);
}
@Override @Override
public String toString() { public String toString() {
return value.asString(); return value.asString();

View File

@ -38,6 +38,11 @@ public final class VariableExpression implements Expression, Accessible {
visitor.visit(this); visitor.visit(this);
} }
@Override
public <R, T> R accept(ResultVisitor<R, T> visitor, T t) {
return visitor.visit(this, t);
}
@Override @Override
public String toString() { public String toString() {
return name; return name;

View File

@ -32,6 +32,11 @@ public final class WhileStatement implements Statement {
visitor.visit(this); visitor.visit(this);
} }
@Override
public <R, T> R accept(ResultVisitor<R, T> visitor, T t) {
return visitor.visit(this, t);
}
@Override @Override
public String toString() { public String toString() {
return "while " + condition + " " + statement; return "while " + condition + " " + statement;