diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-09-27 20:22:34 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-09-27 20:22:34 +0100 |
| commit | a0074f328bfabc0c28d7e5b1202761daaa265fc8 (patch) | |
| tree | 28336e56dbf2341e6630d5ea27f7a9348b46ccde /src/main/java/org/shedlang/compiler/parser | |
| parent | 71e8f7645a022dbe913cb0e5ea3a1ab5e9b33a0f (diff) | |
Parse struct without fields
Diffstat (limited to 'src/main/java/org/shedlang/compiler/parser')
| -rw-r--r-- | src/main/java/org/shedlang/compiler/parser/Parser.java | 22 |
1 files changed, 22 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 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<TokenType> 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<TokenType> tokens, OperatorPrecedence parentPrecedence) { return parseExpression(tokens, Optional.of(parentPrecedence)); } |
