aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2025-02-02 20:05:15 +0000
committerMichael Williamson <mike@zwobble.org>2025-02-02 20:13:20 +0000
commit67f010c93b11744b1f2f1c9403fd1e8d2b888acb (patch)
treee0642d7c0106297416e05ce9bd1fba0f84b14773 /src/main/java
parent1814bc450fa6806c3bbc9468dbe56865c7f3c3a4 (diff)
Parser multiplication
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/parser/OperatorPrecedence.java3
-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, 5 insertions, 1 deletions
diff --git a/src/main/java/org/shedlang/compiler/parser/OperatorPrecedence.java b/src/main/java/org/shedlang/compiler/parser/OperatorPrecedence.java
index f34fa552..bf6b81c6 100644
--- a/src/main/java/org/shedlang/compiler/parser/OperatorPrecedence.java
+++ b/src/main/java/org/shedlang/compiler/parser/OperatorPrecedence.java
@@ -4,7 +4,8 @@ public enum OperatorPrecedence {
EQUALS(1),
RELATIONAL(2),
ADD(3),
- CALL(4);
+ MULTIPLY(4),
+ CALL(5);
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 9f921e2e..b6391e2f 100644
--- a/src/main/java/org/shedlang/compiler/parser/Parser.java
+++ b/src/main/java/org/shedlang/compiler/parser/Parser.java
@@ -351,6 +351,7 @@ public class Parser {
new BinaryOperationParser(TokenType.SYMBOL_GREATER_THAN_OR_EQUAL, OperatorPrecedence.RELATIONAL, UntypedBinaryOperator.GREATER_THAN_OR_EQUAL),
new BinaryOperationParser(TokenType.SYMBOL_PLUS, OperatorPrecedence.ADD, UntypedBinaryOperator.ADD),
new BinaryOperationParser(TokenType.SYMBOL_MINUS, OperatorPrecedence.ADD, UntypedBinaryOperator.SUB),
+ new BinaryOperationParser(TokenType.SYMBOL_ASTERISK, OperatorPrecedence.MULTIPLY, UntypedBinaryOperator.MULTIPLY),
new CallParser()
)
.flatMap(parser ->
diff --git a/src/main/java/org/shedlang/compiler/parser/TokenType.java b/src/main/java/org/shedlang/compiler/parser/TokenType.java
index db6c229f..945fb0b5 100644
--- a/src/main/java/org/shedlang/compiler/parser/TokenType.java
+++ b/src/main/java/org/shedlang/compiler/parser/TokenType.java
@@ -36,6 +36,7 @@ public enum TokenType {
KEYWORD_WHEN,
KEYWORD_WHILE,
+ SYMBOL_ASTERISK,
SYMBOL_BANG,
SYMBOL_BANG_EQUALS,
SYMBOL_BAR,
diff --git a/src/main/java/org/shedlang/compiler/parser/Tokeniser.java b/src/main/java/org/shedlang/compiler/parser/Tokeniser.java
index d94df416..7912ae3b 100644
--- a/src/main/java/org/shedlang/compiler/parser/Tokeniser.java
+++ b/src/main/java/org/shedlang/compiler/parser/Tokeniser.java
@@ -60,6 +60,7 @@ public class Tokeniser {
RegexTokeniser.rule(TokenType.SYMBOL_THIN_ARROW, "->"),
RegexTokeniser.rule(TokenType.SYMBOL_HASH_PAREN_OPEN, "#\\("),
+ RegexTokeniser.rule(TokenType.SYMBOL_ASTERISK, "\\*"),
RegexTokeniser.rule(TokenType.SYMBOL_BANG, "!"),
RegexTokeniser.rule(TokenType.SYMBOL_BAR, "\\|"),
RegexTokeniser.rule(TokenType.SYMBOL_BRACE_OPEN, "\\{"),