diff options
| author | Michael Williamson <mike@zwobble.org> | 2025-02-02 18:42:06 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2025-02-02 18:42:06 +0000 |
| commit | 48fbc3fa3f98e6fae36b7543ef5ceb9d398cf6fa (patch) | |
| tree | d6123b877af960b88fadd92e0c480f3b34137432 /src | |
| parent | d90948d4959d7895af5f8955cac8c1bb39ceb859 (diff) | |
Parse greater than expressions
Diffstat (limited to 'src')
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 04144f0f..c130323b 100644 --- a/src/main/java/org/shedlang/compiler/ast/untyped/UntypedBinaryOperator.java +++ b/src/main/java/org/shedlang/compiler/ast/untyped/UntypedBinaryOperator.java @@ -3,6 +3,7 @@ package org.shedlang.compiler.ast.untyped; public enum UntypedBinaryOperator { ADD, EQUALS, + GREATER_THAN, 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 510a912f..cc47c194 100644 --- a/src/main/java/org/shedlang/compiler/parser/Parser.java +++ b/src/main/java/org/shedlang/compiler/parser/Parser.java @@ -347,6 +347,7 @@ public class Parser { new BinaryOperationParser(TokenType.SYMBOL_BANG_EQUALS, OperatorPrecedence.EQUALS, UntypedBinaryOperator.NOT_EQUAL), 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_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 209b4326..e0e9dc1c 100644 --- a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java +++ b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java @@ -238,6 +238,9 @@ public class TypeChecker { case EQUALS -> TypedBinaryOperator.INT_EQUALS; + case GREATER_THAN -> + 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 77e25dff..c6948d19 100644 --- a/src/test/java/org/shedlang/compiler/ast/untyped/UntypedNodeMatchers.java +++ b/src/test/java/org/shedlang/compiler/ast/untyped/UntypedNodeMatchers.java @@ -186,6 +186,13 @@ public class UntypedNodeMatchers { ); } + public static Matcher<UntypedExpressionNode> isUntypedGreaterThanNode( + Matcher<UntypedExpressionNode> left, + Matcher<UntypedExpressionNode> right + ) { + return isUntypedBinaryOperationNode(UntypedBinaryOperator.GREATER_THAN, 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 70d81280..8d4a85ec 100644 --- a/src/test/java/org/shedlang/compiler/parser/ParserRelationalOperationTests.java +++ b/src/test/java/org/shedlang/compiler/parser/ParserRelationalOperationTests.java @@ -30,4 +30,16 @@ public class ParserRelationalOperationTests { isUntypedIntLiteralNode(2) )); } + + @Test + public void canParseGreaterThanExpression() { + var source = "1 > 2"; + + var node = parseString(source, Parser::parseTopLevelExpression); + + assertThat(node, isUntypedGreaterThanNode( + isUntypedIntLiteralNode(1), + isUntypedIntLiteralNode(2) + )); + } } |
