aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2025-02-02 18:38:38 +0000
committerMichael Williamson <mike@zwobble.org>2025-02-02 18:38:38 +0000
commit5b08c1351eb2347424e5e722deaf6d30b7ce283c (patch)
tree8edd5d416ff1080dd2b9b8dae781798aa09a8f66 /src/main/java
parent3bf6e64d35e15c573a69edc810c51f8240c445bd (diff)
Parse less than expressions
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/ast/untyped/UntypedBinaryOperator.java1
-rw-r--r--src/main/java/org/shedlang/compiler/parser/OperatorPrecedence.java5
-rw-r--r--src/main/java/org/shedlang/compiler/parser/Parser.java1
-rw-r--r--src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java15
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) {