diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-10-31 18:49:10 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-10-31 18:49:10 +0000 |
| commit | 375a1bfb7fbc08a55bde8866a3f67fc6e460c808 (patch) | |
| tree | dd89540f93fbc26fc844e4ad17092d8b1a8985ce /src/main/java/org/shedlang/compiler/parser | |
| parent | 341a88406bd0b1d83dcfb922ecdc877e30bb1eca (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.java | 21 |
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); |
