diff options
| author | Michael Williamson <mike@zwobble.org> | 2025-02-02 18:38:38 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2025-02-02 18:38:38 +0000 |
| commit | 5b08c1351eb2347424e5e722deaf6d30b7ce283c (patch) | |
| tree | 8edd5d416ff1080dd2b9b8dae781798aa09a8f66 /src/main/java | |
| parent | 3bf6e64d35e15c573a69edc810c51f8240c445bd (diff) | |
Parse less than expressions
Diffstat (limited to 'src/main/java')
4 files changed, 16 insertions, 6 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 53e3cbd1..17fcd6ac 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, + LESS_THAN, NOT_EQUAL, SUB } diff --git a/src/main/java/org/shedlang/compiler/parser/OperatorPrecedence.java b/src/main/java/org/shedlang/compiler/parser/OperatorPrecedence.java index 6bd5319a..f34fa552 100644 --- a/src/main/java/org/shedlang/compiler/parser/OperatorPrecedence.java +++ b/src/main/java/org/shedlang/compiler/parser/OperatorPrecedence.java @@ -2,8 +2,9 @@ package org.shedlang.compiler.parser; public enum OperatorPrecedence { EQUALS(1), - ADD(2), - CALL(3); + RELATIONAL(2), + ADD(3), + CALL(4); private final int precedence; diff --git a/src/main/java/org/shedlang/compiler/parser/Parser.java b/src/main/java/org/shedlang/compiler/parser/Parser.java index a6b2e1ff..b09ff4db 100644 --- a/src/main/java/org/shedlang/compiler/parser/Parser.java +++ b/src/main/java/org/shedlang/compiler/parser/Parser.java @@ -345,6 +345,7 @@ public class Parser { new MemberAccessParser(), new BinaryOperationParser(TokenType.SYMBOL_EQUALS_EQUALS, OperatorPrecedence.EQUALS, UntypedBinaryOperator.EQUALS), 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_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 dd85cd98..489ba1f7 100644 --- a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java +++ b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java @@ -232,13 +232,20 @@ public class TypeChecker { ) { if (left.equals(Types.INT) && right.equals(Types.INT)) { return switch (operator) { - case ADD -> TypedBinaryOperator.INT_ADD; + case ADD -> + TypedBinaryOperator.INT_ADD; - case EQUALS -> TypedBinaryOperator.INT_EQUALS; + case EQUALS -> + TypedBinaryOperator.INT_EQUALS; - case NOT_EQUAL -> TypedBinaryOperator.INT_NOT_EQUAL; + case LESS_THAN -> + throw new UnsupportedOperationException("TODO"); - case SUB -> TypedBinaryOperator.INT_SUB; + case NOT_EQUAL -> + TypedBinaryOperator.INT_NOT_EQUAL; + + case SUB -> + TypedBinaryOperator.INT_SUB; }; } else if (left.equals(Types.STRING) && right.equals(Types.STRING)) { if (operator == UntypedBinaryOperator.ADD) { |
