aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/shedlang/compiler/parser
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-10-31 18:49:10 +0000
committerMichael Williamson <mike@zwobble.org>2023-10-31 18:49:10 +0000
commit375a1bfb7fbc08a55bde8866a3f67fc6e460c808 (patch)
treedd89540f93fbc26fc844e4ad17092d8b1a8985ce /src/main/java/org/shedlang/compiler/parser
parent341a88406bd0b1d83dcfb922ecdc877e30bb1eca (diff)
Parse empty effect definitions
Diffstat (limited to 'src/main/java/org/shedlang/compiler/parser')
-rw-r--r--src/main/java/org/shedlang/compiler/parser/Parser.java21
1 files changed, 21 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 cf01705d..6be82270 100644
--- a/src/main/java/org/shedlang/compiler/parser/Parser.java
+++ b/src/main/java/org/shedlang/compiler/parser/Parser.java
@@ -201,6 +201,24 @@ public class Parser {
}
}
+ private static UntypedEffectDefinitionNode parseEffectDefinition(
+ TokenIterator<TokenType> tokens
+ ) {
+ var start = tokens.position();
+
+ tokens.skip(TokenType.KEYWORD_EFFECT);
+
+ var name = tokens.nextValue(TokenType.IDENTIFIER);
+
+ tokens.skip(TokenType.SYMBOL_BRACE_OPEN);
+ tokens.skip(TokenType.SYMBOL_BRACE_CLOSE);
+
+ var end = tokens.position();
+ var source = start.to(end);
+
+ return new UntypedEffectDefinitionNode(name, source);
+ }
+
private static final Map<TokenType, OperationParser> OPERATION_PARSERS = Stream.of(
new FieldAccessParser(),
new BinaryOperationParser(TokenType.SYMBOL_EQUALS_EQUALS, OperatorPrecedence.EQUALS, UntypedBinaryOperator.EQUALS),
@@ -591,6 +609,9 @@ public class Parser {
static UntypedNamespaceStatementNode parseNamespaceStatement(TokenIterator<TokenType> tokens) {
return switch (tokens.peek().tokenType()) {
+ case KEYWORD_EFFECT ->
+ parseEffectDefinition(tokens);
+
case KEYWORD_FUN ->
parseFunctionDefinition(tokens);