aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/shedlang/compiler/parser
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-09-27 20:22:34 +0100
committerMichael Williamson <mike@zwobble.org>2023-09-27 20:22:34 +0100
commita0074f328bfabc0c28d7e5b1202761daaa265fc8 (patch)
tree28336e56dbf2341e6630d5ea27f7a9348b46ccde /src/main/java/org/shedlang/compiler/parser
parent71e8f7645a022dbe913cb0e5ea3a1ab5e9b33a0f (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.java22
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));
}