From e25666869229ae2f586ad12ceb0f9257ec6bbd91 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Tue, 29 Sep 2015 20:42:41 +0100 Subject: Add ternary conditionals --- src/main/java/org/zwobble/couscous/ast/LiteralNode.java | 7 ++++++- .../zwobble/couscous/ast/TernaryConditionalNode.java | 17 +++++++++++++++++ .../couscous/ast/visitors/ExpressionNodeVisitor.java | 2 ++ 3 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/zwobble/couscous/ast/TernaryConditionalNode.java (limited to 'src/main/java/org/zwobble/couscous/ast') diff --git a/src/main/java/org/zwobble/couscous/ast/LiteralNode.java b/src/main/java/org/zwobble/couscous/ast/LiteralNode.java index 594187d..cc57aef 100644 --- a/src/main/java/org/zwobble/couscous/ast/LiteralNode.java +++ b/src/main/java/org/zwobble/couscous/ast/LiteralNode.java @@ -1,6 +1,7 @@ package org.zwobble.couscous.ast; import org.zwobble.couscous.ast.visitors.ExpressionNodeVisitor; +import org.zwobble.couscous.values.BooleanValue; import org.zwobble.couscous.values.IntegerValue; import org.zwobble.couscous.values.InterpreterValue; import org.zwobble.couscous.values.StringValue; @@ -13,10 +14,14 @@ public class LiteralNode implements ExpressionNode { return new LiteralNode(new StringValue(value)); } - public static LiteralNode of(int value) { + public static LiteralNode literal(int value) { return new LiteralNode(new IntegerValue(value)); } + public static LiteralNode literal(boolean value) { + return new LiteralNode(new BooleanValue(value)); + } + InterpreterValue value; @Override diff --git a/src/main/java/org/zwobble/couscous/ast/TernaryConditionalNode.java b/src/main/java/org/zwobble/couscous/ast/TernaryConditionalNode.java new file mode 100644 index 0000000..0386a32 --- /dev/null +++ b/src/main/java/org/zwobble/couscous/ast/TernaryConditionalNode.java @@ -0,0 +1,17 @@ +package org.zwobble.couscous.ast; + +import org.zwobble.couscous.ast.visitors.ExpressionNodeVisitor; + +import lombok.Value; + +@Value +public class TernaryConditionalNode implements ExpressionNode { + ExpressionNode condition; + ExpressionNode ifTrue; + ExpressionNode ifFalse; + + @Override + public T accept(ExpressionNodeVisitor visitor) { + return visitor.visit(this); + } +} diff --git a/src/main/java/org/zwobble/couscous/ast/visitors/ExpressionNodeVisitor.java b/src/main/java/org/zwobble/couscous/ast/visitors/ExpressionNodeVisitor.java index 0167abc..27692e3 100644 --- a/src/main/java/org/zwobble/couscous/ast/visitors/ExpressionNodeVisitor.java +++ b/src/main/java/org/zwobble/couscous/ast/visitors/ExpressionNodeVisitor.java @@ -2,10 +2,12 @@ package org.zwobble.couscous.ast.visitors; import org.zwobble.couscous.ast.Assignment; import org.zwobble.couscous.ast.LiteralNode; +import org.zwobble.couscous.ast.TernaryConditionalNode; import org.zwobble.couscous.ast.VariableReferenceNode; public interface ExpressionNodeVisitor { T visit(LiteralNode literal); T visit(VariableReferenceNode variableReference); T visit(Assignment assignment); + T visit(TernaryConditionalNode ternaryConditional); } -- cgit v1.2.3