mirror of
https://github.com/aNNiMON/Own-Programming-Language-Tutorial.git
synced 2024-09-20 08:44:20 +03:00
Добавлен ResultVisitor
This commit is contained in:
parent
138100bfe0
commit
b29986a4b5
@ -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();
|
||||||
|
@ -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();
|
||||||
|
@ -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);
|
||||||
|
@ -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();
|
||||||
|
@ -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";
|
||||||
|
@ -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);
|
||||||
|
@ -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;
|
||||||
|
@ -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";
|
||||||
|
@ -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();
|
||||||
|
@ -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;
|
||||||
|
@ -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();
|
||||||
|
@ -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;
|
||||||
|
@ -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);
|
||||||
|
@ -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);
|
||||||
|
@ -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);
|
||||||
|
@ -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;
|
||||||
|
@ -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() + ")";
|
||||||
|
@ -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();
|
||||||
|
@ -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;
|
||||||
|
@ -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();
|
||||||
|
@ -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();
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
41
src/com/annimon/ownlang/parser/ast/ResultVisitor.java
Normal file
41
src/com/annimon/ownlang/parser/ast/ResultVisitor.java
Normal 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);
|
||||||
|
}
|
@ -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;
|
||||||
|
@ -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);
|
||||||
|
@ -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) {
|
||||||
|
@ -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;
|
||||||
|
@ -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();
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user