aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-11-02 23:22:05 +0000
committerMichael Williamson <mike@zwobble.org>2023-11-02 23:22:05 +0000
commit72779bc8003f07742a94f34853f2be94004a61ee (patch)
treef951c9af6b6a3f237e070a8cfa9e5b5c053b8f67 /src/main/java
parenta3fc3f4b0c552443f85766fe3e057a9fcbca8cec (diff)
Parse unit literals
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/parser/Parser.java13
-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, 15 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 272c66c0..a1318300 100644
--- a/src/main/java/org/shedlang/compiler/parser/Parser.java
+++ b/src/main/java/org/shedlang/compiler/parser/Parser.java
@@ -817,6 +817,8 @@ public class Parser {
case KEYWORD_WHEN -> parseWhen(tokens);
+ case KEYWORD_UNIT -> parseUnitLiteral(tokens);
+
case STRING -> parseStringLiteral(tokens);
case SYMBOL_HASH_PAREN_OPEN -> parseTuple(tokens);
@@ -1160,6 +1162,17 @@ public class Parser {
return new UntypedTypeLevelReferenceNode(name, source);
}
+ private static UntypedExpressionNode parseUnitLiteral(TokenIterator<TokenType> tokens) {
+ var start = tokens.position();
+
+ tokens.skip(TokenType.KEYWORD_UNIT);
+
+ var end = tokens.position();
+ var source = start.to(end);
+
+ return new UntypedUnitLiteralNode(source);
+ }
+
private static Visibility parseVisibility(TokenIterator<TokenType> tokens) {
var isPublic = tokens.trySkip(TokenType.KEYWORD_PUB);
return isPublic ? Visibility.PUBLIC : Visibility.PRIVATE;
diff --git a/src/main/java/org/shedlang/compiler/parser/TokenType.java b/src/main/java/org/shedlang/compiler/parser/TokenType.java
index fd9ae5e8..5365c7de 100644
--- a/src/main/java/org/shedlang/compiler/parser/TokenType.java
+++ b/src/main/java/org/shedlang/compiler/parser/TokenType.java
@@ -26,6 +26,7 @@ public enum TokenType {
KEYWORD_SUMTYPE,
KEYWORD_TRUE,
KEYWORD_TRY,
+ KEYWORD_UNIT,
KEYWORD_VAL,
KEYWORD_VAR,
KEYWORD_WHEN,
diff --git a/src/main/java/org/shedlang/compiler/parser/Tokeniser.java b/src/main/java/org/shedlang/compiler/parser/Tokeniser.java
index 574f7c7f..202f852e 100644
--- a/src/main/java/org/shedlang/compiler/parser/Tokeniser.java
+++ b/src/main/java/org/shedlang/compiler/parser/Tokeniser.java
@@ -30,6 +30,7 @@ public class Tokeniser {
Map.entry("sumtype", TokenType.KEYWORD_SUMTYPE),
Map.entry("true", TokenType.KEYWORD_TRUE),
Map.entry("try", TokenType.KEYWORD_TRY),
+ Map.entry("unit", TokenType.KEYWORD_UNIT),
Map.entry("val", TokenType.KEYWORD_VAL),
Map.entry("var", TokenType.KEYWORD_VAR),
Map.entry("when", TokenType.KEYWORD_WHEN),