From ea029c89aff87d3d4b352a495d06b1fe67ec4432 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Wed, 7 Jun 2023 19:27:16 +0100 Subject: Add parser for type level references --- .../shedlang/compiler/ast/UntypedTypeLevelExpressionNode.java | 4 ++++ .../shedlang/compiler/ast/UntypedTypeLevelReferenceNode.java | 9 +++++++++ src/main/java/org/shedlang/compiler/parser/Parser.java | 11 +++++++++++ 3 files changed, 24 insertions(+) create mode 100644 src/main/java/org/shedlang/compiler/ast/UntypedTypeLevelExpressionNode.java create mode 100644 src/main/java/org/shedlang/compiler/ast/UntypedTypeLevelReferenceNode.java (limited to 'src/main/java') diff --git a/src/main/java/org/shedlang/compiler/ast/UntypedTypeLevelExpressionNode.java b/src/main/java/org/shedlang/compiler/ast/UntypedTypeLevelExpressionNode.java new file mode 100644 index 00000000..2d9ed626 --- /dev/null +++ b/src/main/java/org/shedlang/compiler/ast/UntypedTypeLevelExpressionNode.java @@ -0,0 +1,4 @@ +package org.shedlang.compiler.ast; + +public sealed interface UntypedTypeLevelExpressionNode extends UntypedNode permits UntypedTypeLevelReferenceNode { +} diff --git a/src/main/java/org/shedlang/compiler/ast/UntypedTypeLevelReferenceNode.java b/src/main/java/org/shedlang/compiler/ast/UntypedTypeLevelReferenceNode.java new file mode 100644 index 00000000..261b6e8f --- /dev/null +++ b/src/main/java/org/shedlang/compiler/ast/UntypedTypeLevelReferenceNode.java @@ -0,0 +1,9 @@ +package org.shedlang.compiler.ast; + +import org.shedlang.compiler.sources.Source; + +public record UntypedTypeLevelReferenceNode( + String name, + Source source +) implements UntypedTypeLevelExpressionNode { +} diff --git a/src/main/java/org/shedlang/compiler/parser/Parser.java b/src/main/java/org/shedlang/compiler/parser/Parser.java index 74f9a79b..68def52d 100644 --- a/src/main/java/org/shedlang/compiler/parser/Parser.java +++ b/src/main/java/org/shedlang/compiler/parser/Parser.java @@ -153,6 +153,17 @@ public class Parser { } } + static UntypedTypeLevelExpressionNode parseTopLevelTypeLevelExpression(TokenIterator tokens) { + var start = tokens.position(); + + var name = tokens.nextValue(TokenType.IDENTIFIER); + + var end = tokens.position(); + var source = start.to(end); + + return new UntypedTypeLevelReferenceNode(name, source); + } + static UntypedNamespaceNode parseNamespace(TokenIterator tokens) { var start = tokens.position(); var end = tokens.position(); -- cgit v1.2.3