From 375a1bfb7fbc08a55bde8866a3f67fc6e460c808 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Tue, 31 Oct 2023 18:49:10 +0000 Subject: Parse empty effect definitions --- .../java/org/shedlang/compiler/parser/Parser.java | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'src/main/java/org/shedlang/compiler/parser') 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 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 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 tokens) { return switch (tokens.peek().tokenType()) { + case KEYWORD_EFFECT -> + parseEffectDefinition(tokens); + case KEYWORD_FUN -> parseFunctionDefinition(tokens); -- cgit v1.2.3