aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2025-02-02 18:43:06 +0000
committerMichael Williamson <mike@zwobble.org>2025-02-02 18:43:06 +0000
commit1d41ef64406e575caf012f8a50febc15805bafca (patch)
treed3148a0695957c4fa980995b9c2e34dd93926436 /src
parent48fbc3fa3f98e6fae36b7543ef5ceb9d398cf6fa (diff)
Parse greater than or equal expressions
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/shedlang/compiler/ast/untyped/UntypedBinaryOperator.java1
-rw-r--r--src/main/java/org/shedlang/compiler/parser/Parser.java1
-rw-r--r--src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java3
-rw-r--r--src/test/java/org/shedlang/compiler/ast/untyped/UntypedNodeMatchers.java7
-rw-r--r--src/test/java/org/shedlang/compiler/parser/ParserRelationalOperationTests.java12
5 files changed, 24 insertions, 0 deletions
diff --git a/src/main/java/org/shedlang/compiler/ast/untyped/UntypedBinaryOperator.java b/src/main/java/org/shedlang/compiler/ast/untyped/UntypedBinaryOperator.java
index c130323b..aa14bcba 100644
--- a/src/main/java/org/shedlang/compiler/ast/untyped/UntypedBinaryOperator.java
+++ b/src/main/java/org/shedlang/compiler/ast/untyped/UntypedBinaryOperator.java
@@ -4,6 +4,7 @@ public enum UntypedBinaryOperator {
ADD,
EQUALS,
GREATER_THAN,
+ GREATER_THAN_OR_EQUAL,
LESS_THAN,
LESS_THAN_OR_EQUAL,
NOT_EQUAL,
diff --git a/src/main/java/org/shedlang/compiler/parser/Parser.java b/src/main/java/org/shedlang/compiler/parser/Parser.java
index cc47c194..9f921e2e 100644
--- a/src/main/java/org/shedlang/compiler/parser/Parser.java
+++ b/src/main/java/org/shedlang/compiler/parser/Parser.java
@@ -348,6 +348,7 @@ public class Parser {
new BinaryOperationParser(TokenType.SYMBOL_LESS_THAN, OperatorPrecedence.RELATIONAL, UntypedBinaryOperator.LESS_THAN),
new BinaryOperationParser(TokenType.SYMBOL_LESS_THAN_OR_EQUAL, OperatorPrecedence.RELATIONAL, UntypedBinaryOperator.LESS_THAN_OR_EQUAL),
new BinaryOperationParser(TokenType.SYMBOL_GREATER_THAN, OperatorPrecedence.RELATIONAL, UntypedBinaryOperator.GREATER_THAN),
+ new BinaryOperationParser(TokenType.SYMBOL_GREATER_THAN_OR_EQUAL, OperatorPrecedence.RELATIONAL, UntypedBinaryOperator.GREATER_THAN_OR_EQUAL),
new BinaryOperationParser(TokenType.SYMBOL_PLUS, OperatorPrecedence.ADD, UntypedBinaryOperator.ADD),
new BinaryOperationParser(TokenType.SYMBOL_MINUS, OperatorPrecedence.ADD, UntypedBinaryOperator.SUB),
new CallParser()
diff --git a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java
index e0e9dc1c..db249c0d 100644
--- a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java
+++ b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java
@@ -241,6 +241,9 @@ public class TypeChecker {
case GREATER_THAN ->
throw new UnsupportedOperationException("TODO");
+ case GREATER_THAN_OR_EQUAL ->
+ throw new UnsupportedOperationException("TODO");
+
case LESS_THAN ->
throw new UnsupportedOperationException("TODO");
diff --git a/src/test/java/org/shedlang/compiler/ast/untyped/UntypedNodeMatchers.java b/src/test/java/org/shedlang/compiler/ast/untyped/UntypedNodeMatchers.java
index c6948d19..bf46b533 100644
--- a/src/test/java/org/shedlang/compiler/ast/untyped/UntypedNodeMatchers.java
+++ b/src/test/java/org/shedlang/compiler/ast/untyped/UntypedNodeMatchers.java
@@ -193,6 +193,13 @@ public class UntypedNodeMatchers {
return isUntypedBinaryOperationNode(UntypedBinaryOperator.GREATER_THAN, left, right);
}
+ public static Matcher<UntypedExpressionNode> isUntypedGreaterThanOrEqualNode(
+ Matcher<UntypedExpressionNode> left,
+ Matcher<UntypedExpressionNode> right
+ ) {
+ return isUntypedBinaryOperationNode(UntypedBinaryOperator.GREATER_THAN_OR_EQUAL, left, right);
+ }
+
public static Matcher<UntypedExpressionNode> isUntypedIfNode(
Matcher<Iterable<? extends UntypedConditionalBranchNode>> conditionalBranches,
Matcher<UntypedBlockNode> elseBody
diff --git a/src/test/java/org/shedlang/compiler/parser/ParserRelationalOperationTests.java b/src/test/java/org/shedlang/compiler/parser/ParserRelationalOperationTests.java
index 8d4a85ec..90acf490 100644
--- a/src/test/java/org/shedlang/compiler/parser/ParserRelationalOperationTests.java
+++ b/src/test/java/org/shedlang/compiler/parser/ParserRelationalOperationTests.java
@@ -42,4 +42,16 @@ public class ParserRelationalOperationTests {
isUntypedIntLiteralNode(2)
));
}
+
+ @Test
+ public void canParseGreaterThanOrEqualExpression() {
+ var source = "1 >= 2";
+
+ var node = parseString(source, Parser::parseTopLevelExpression);
+
+ assertThat(node, isUntypedGreaterThanOrEqualNode(
+ isUntypedIntLiteralNode(1),
+ isUntypedIntLiteralNode(2)
+ ));
+ }
}