diff options
Diffstat (limited to 'ast/src')
5 files changed, 43 insertions, 2 deletions
diff --git a/ast/src/main/java/lv/enes/orang/ast/ArgSpec.java b/ast/src/main/java/lv/enes/orang/ast/ArgSpec.java new file mode 100644 index 0000000..e167e8f --- /dev/null +++ b/ast/src/main/java/lv/enes/orang/ast/ArgSpec.java | |||
| @@ -0,0 +1,26 @@ | |||
| 1 | package lv.enes.orang.ast; | ||
| 2 | |||
| 3 | public class ArgSpec { | ||
| 4 | public final Type type; | ||
| 5 | public final String name; | ||
| 6 | |||
| 7 | private static final ArgSpec NOTHING = new ArgSpec(Type.NOTHING, null); | ||
| 8 | |||
| 9 | public static ArgSpec nothing() { | ||
| 10 | return NOTHING; | ||
| 11 | } | ||
| 12 | |||
| 13 | public static ArgSpec named(String name) { | ||
| 14 | return new ArgSpec(Type.NAMED, name); | ||
| 15 | } | ||
| 16 | |||
| 17 | private ArgSpec(Type type, String name) { | ||
| 18 | this.type = type; | ||
| 19 | this.name = name; | ||
| 20 | } | ||
| 21 | |||
| 22 | public enum Type { | ||
| 23 | NOTHING, | ||
| 24 | NAMED, | ||
| 25 | } | ||
| 26 | } | ||
diff --git a/ast/src/main/java/lv/enes/orang/ast/DefSpec.java b/ast/src/main/java/lv/enes/orang/ast/DefSpec.java index 2233d3f..5e6cc68 100644 --- a/ast/src/main/java/lv/enes/orang/ast/DefSpec.java +++ b/ast/src/main/java/lv/enes/orang/ast/DefSpec.java | |||
| @@ -2,5 +2,5 @@ package lv.enes.orang.ast; | |||
| 2 | 2 | ||
| 3 | import java.util.List; | 3 | import java.util.List; |
| 4 | 4 | ||
| 5 | public record DefSpec(String name, List<String> args) { | 5 | public record DefSpec(String name, List<ArgSpec> args) { |
| 6 | } | 6 | } |
diff --git a/ast/src/main/java/lv/enes/orang/ast/ExpressionVisitor.java b/ast/src/main/java/lv/enes/orang/ast/ExpressionVisitor.java index ddb1157..70f8a5e 100644 --- a/ast/src/main/java/lv/enes/orang/ast/ExpressionVisitor.java +++ b/ast/src/main/java/lv/enes/orang/ast/ExpressionVisitor.java | |||
| @@ -19,4 +19,5 @@ public interface ExpressionVisitor<R, E extends OrangException> { | |||
| 19 | R visitStringLiteral(StringLiteral expr) throws E; | 19 | R visitStringLiteral(StringLiteral expr) throws E; |
| 20 | R visitUnaryExpression(UnaryExpression expr) throws E; | 20 | R visitUnaryExpression(UnaryExpression expr) throws E; |
| 21 | R visitVariable(VariableExpression expr) throws E; | 21 | R visitVariable(VariableExpression expr) throws E; |
| 22 | R visitVoidExpression() throws E; | ||
| 22 | } | 23 | } |
diff --git a/ast/src/main/java/lv/enes/orang/ast/FnExpression.java b/ast/src/main/java/lv/enes/orang/ast/FnExpression.java index 68f43af..0bf322c 100644 --- a/ast/src/main/java/lv/enes/orang/ast/FnExpression.java +++ b/ast/src/main/java/lv/enes/orang/ast/FnExpression.java | |||
| @@ -3,7 +3,7 @@ package lv.enes.orang.ast; | |||
| 3 | import lv.enes.orang.utils.NonEmptyList; | 3 | import lv.enes.orang.utils.NonEmptyList; |
| 4 | import lv.enes.orang.core.OrangException; | 4 | import lv.enes.orang.core.OrangException; |
| 5 | 5 | ||
| 6 | public record FnExpression(NonEmptyList<String> args, Expression body) implements Expression { | 6 | public record FnExpression(NonEmptyList<ArgSpec> args, Expression body) implements Expression { |
| 7 | @Override | 7 | @Override |
| 8 | public <R, E extends OrangException> R accept(ExpressionVisitor<R, E> visitor) throws E { | 8 | public <R, E extends OrangException> R accept(ExpressionVisitor<R, E> visitor) throws E { |
| 9 | return visitor.visitFnExpression(this); | 9 | return visitor.visitFnExpression(this); |
diff --git a/ast/src/main/java/lv/enes/orang/ast/VoidExpression.java b/ast/src/main/java/lv/enes/orang/ast/VoidExpression.java new file mode 100644 index 0000000..39d164d --- /dev/null +++ b/ast/src/main/java/lv/enes/orang/ast/VoidExpression.java | |||
| @@ -0,0 +1,14 @@ | |||
| 1 | package lv.enes.orang.ast; | ||
| 2 | |||
| 3 | import lv.enes.orang.core.OrangException; | ||
| 4 | |||
| 5 | public final class VoidExpression implements Expression { | ||
| 6 | public static final VoidExpression INSTANCE = new VoidExpression(); | ||
| 7 | |||
| 8 | private VoidExpression() {} | ||
| 9 | |||
| 10 | @Override | ||
| 11 | public <R, E extends OrangException> R accept(ExpressionVisitor<R, E> visitor) throws E { | ||
| 12 | return visitor.visitVoidExpression(); | ||
| 13 | } | ||
| 14 | } | ||