From f8bcf996119e07114b191b54bc01444bd602804a Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 8 Jul 2023 21:22:43 +0100 Subject: Parse equality --- src/main/java/org/shedlang/compiler/parser/OperatorPrecedence.java | 5 +++-- src/main/java/org/shedlang/compiler/parser/Parser.java | 1 + src/main/java/org/shedlang/compiler/parser/TokenType.java | 1 + src/main/java/org/shedlang/compiler/parser/Tokeniser.java | 1 + 4 files changed, 6 insertions(+), 2 deletions(-) (limited to 'src/main/java') 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 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, "!"), -- cgit v1.2.3