aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-07-05 21:12:54 +0100
committerMichael Williamson <mike@zwobble.org>2023-07-05 21:12:54 +0100
commite35d7b64dc82864b88e7fe8041e1efd69aed144a (patch)
tree7d51fb2f86339ef33128f735876b27a281318ba0 /src/main/java
parent19a2a6297b08b3ed25adfe715bc8f9b11b534af4 (diff)
Parse positive ints
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/parser/Parser.java15
-rw-r--r--src/main/java/org/shedlang/compiler/parser/TokenType.java1
-rw-r--r--src/main/java/org/shedlang/compiler/parser/Tokeniser.java1
3 files changed, 17 insertions, 0 deletions
diff --git a/src/main/java/org/shedlang/compiler/parser/Parser.java b/src/main/java/org/shedlang/compiler/parser/Parser.java
index 7dd47250..69d02075 100644
--- a/src/main/java/org/shedlang/compiler/parser/Parser.java
+++ b/src/main/java/org/shedlang/compiler/parser/Parser.java
@@ -6,6 +6,7 @@ import org.shedlang.compiler.tokeniser.TokenIterator;
import org.shedlang.compiler.tokeniser.UnexpectedTokenException;
import org.shedlang.compiler.types.NamespaceName;
+import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
@@ -133,6 +134,18 @@ public class Parser {
};
}
+ private static UntypedExpressionNode parseInt(TokenIterator<TokenType> tokens) {
+ var start = tokens.position();
+
+ var string = tokens.nextValue(TokenType.INT);
+ var value = new BigInteger(string);
+
+ var end = tokens.position();
+ var source = start.to(end);
+
+ return new UntypedIntLiteralNode(value, source);
+ }
+
private static <T> List<T> parseMany(
BooleanSupplier stop,
Supplier<T> parseOne,
@@ -177,6 +190,8 @@ public class Parser {
return switch (tokens.peek().tokenType()) {
case IDENTIFIER -> parseReference(tokens);
+
+ case INT -> parseInt(tokens);
case STRING -> parseStringLiteral(tokens);
diff --git a/src/main/java/org/shedlang/compiler/parser/TokenType.java b/src/main/java/org/shedlang/compiler/parser/TokenType.java
index 734fbf8e..744bf2aa 100644
--- a/src/main/java/org/shedlang/compiler/parser/TokenType.java
+++ b/src/main/java/org/shedlang/compiler/parser/TokenType.java
@@ -3,6 +3,7 @@ package org.shedlang.compiler.parser;
public enum TokenType {
END,
IDENTIFIER,
+ INT,
STRING,
UNKNOWN,
WHITESPACE,
diff --git a/src/main/java/org/shedlang/compiler/parser/Tokeniser.java b/src/main/java/org/shedlang/compiler/parser/Tokeniser.java
index 31b30ef8..6e5b3f2f 100644
--- a/src/main/java/org/shedlang/compiler/parser/Tokeniser.java
+++ b/src/main/java/org/shedlang/compiler/parser/Tokeniser.java
@@ -33,6 +33,7 @@ public class Tokeniser {
RegexTokeniser.rule(TokenType.SYMBOL_SEMICOLON, ";"),
RegexTokeniser.rule(TokenType.IDENTIFIER, "[A-Za-z][A-Za-z0-9]*"),
+ RegexTokeniser.rule(TokenType.INT, "[0-9]+"),
RegexTokeniser.rule(TokenType.STRING, "\"(?:[^\\\\\"\n\r]|\\\\.)*\""),
RegexTokeniser.rule(TokenType.WHITESPACE, "[\r\n\t ]+")
)