From a0074f328bfabc0c28d7e5b1202761daaa265fc8 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Wed, 27 Sep 2023 20:22:34 +0100 Subject: Parse struct without fields --- .../java/org/shedlang/compiler/parser/Parser.java | 22 ++++++++++++++++++++++ 1 file changed, 22 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 831f5732..2bda39ed 100644 --- a/src/main/java/org/shedlang/compiler/parser/Parser.java +++ b/src/main/java/org/shedlang/compiler/parser/Parser.java @@ -452,6 +452,9 @@ public class Parser { case KEYWORD_FUN -> parseFunctionDefinition(tokens); + case KEYWORD_STRUCT -> + parseStructDefinition(tokens); + case KEYWORD_VAL -> parseAssign(tokens); @@ -556,6 +559,25 @@ public class Parser { }; } + private static UntypedNamespaceStatementNode parseStructDefinition(TokenIterator tokens) { + var start = tokens.position(); + + tokens.skip(TokenType.KEYWORD_STRUCT); + + var name = tokens.nextValue(TokenType.IDENTIFIER); + + tokens.skip(TokenType.SYMBOL_PAREN_OPEN); + tokens.skip(TokenType.SYMBOL_PAREN_CLOSE); + + tokens.skip(TokenType.SYMBOL_BRACE_OPEN); + tokens.skip(TokenType.SYMBOL_BRACE_CLOSE); + + var end = tokens.position(); + var source = start.to(end); + + return new UntypedStructDefinitionNode(name, List.of(), source); + } + static UntypedExpressionNode parseSubExpression(TokenIterator tokens, OperatorPrecedence parentPrecedence) { return parseExpression(tokens, Optional.of(parentPrecedence)); } -- cgit v1.2.3