aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-07-08 21:22:43 +0100
committerMichael Williamson <mike@zwobble.org>2023-07-08 21:22:43 +0100
commitf8bcf996119e07114b191b54bc01444bd602804a (patch)
tree978c6ecba429d5c9e445210d54a1ac83d1c57396 /src/main/java
parentf48c702780581edb1022fab7f938260089432d06 (diff)
Parse equality
Diffstat (limited to 'src/main/java')
-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/parser/TokenType.java1
-rw-r--r--src/main/java/org/shedlang/compiler/parser/Tokeniser.java1
4 files changed, 6 insertions, 2 deletions
diff --git a/src/main/java/org/shedlang/compiler/parser/OperatorPrecedence.java b/src/main/java/org/shedlang/compiler/parser/OperatorPrecedence.java
index 109499de..6bd5319a 100644
--- a/src/main/java/org/shedlang/compiler/parser/OperatorPrecedence.java
+++ b/src/main/java/org/shedlang/compiler/parser/OperatorPrecedence.java
@@ -1,8 +1,9 @@
package org.shedlang.compiler.parser;
public enum OperatorPrecedence {
- ADD(1),
- CALL(2);
+ EQUALS(1),
+ ADD(2),
+ CALL(3);
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 0915f1bd..f163236b 100644
--- a/src/main/java/org/shedlang/compiler/parser/Parser.java
+++ b/src/main/java/org/shedlang/compiler/parser/Parser.java
@@ -154,6 +154,7 @@ public class Parser {
}
private static final Map<TokenType, OperationParser> OPERATION_PARSERS = Stream.of(
+ new BinaryOperationParser(TokenType.SYMBOL_EQUALS_EQUALS, OperatorPrecedence.EQUALS, UntypedBinaryOperator.EQUALS),
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/parser/TokenType.java b/src/main/java/org/shedlang/compiler/parser/TokenType.java
index 9f439e03..2b810988 100644
--- a/src/main/java/org/shedlang/compiler/parser/TokenType.java
+++ b/src/main/java/org/shedlang/compiler/parser/TokenType.java
@@ -20,6 +20,7 @@ public enum TokenType {
SYMBOL_COMMA,
SYMBOL_DOT,
SYMBOL_EQUALS,
+ SYMBOL_EQUALS_EQUALS,
SYMBOL_MINUS,
SYMBOL_PAREN_OPEN,
SYMBOL_PAREN_CLOSE,
diff --git a/src/main/java/org/shedlang/compiler/parser/Tokeniser.java b/src/main/java/org/shedlang/compiler/parser/Tokeniser.java
index 2f967452..e06109b1 100644
--- a/src/main/java/org/shedlang/compiler/parser/Tokeniser.java
+++ b/src/main/java/org/shedlang/compiler/parser/Tokeniser.java
@@ -27,6 +27,7 @@ public class Tokeniser {
RegexTokeniser.rule(TokenType.STRING, "\"(?:[^\\\\\"\n\r]|\\\\.)*\""),
RegexTokeniser.rule(TokenType.WHITESPACE, "[\r\n\t ]+"),
+ RegexTokeniser.rule(TokenType.SYMBOL_EQUALS_EQUALS, "=="),
RegexTokeniser.rule(TokenType.SYMBOL_THIN_ARROW, "->"),
RegexTokeniser.rule(TokenType.SYMBOL_BANG, "!"),