From 67eb11ae3e1e2f3a703ab354a54421fa4ff383ae Mon Sep 17 00:00:00 2001 From: Johan Maasing Date: Tue, 8 Apr 2025 19:21:13 +0200 Subject: [PATCH] Transformer that gives anonymous datatype the name of the last path segment --- .../antlr4/nu/zoom/dsl/parser/Endpoints.g4 | 2 +- .../dsl/ast/EndpointsVisitorTransformer.java | 22 ++++++++++++++++--- .../java/nu/zoom/dsl/ast/ParseException.java | 7 ++++++ .../main/java/nu/zoom/dsl/ast/TypeNode.java | 2 +- test01.endpoints | 7 ++++-- 5 files changed, 33 insertions(+), 7 deletions(-) create mode 100644 parser/src/main/java/nu/zoom/dsl/ast/ParseException.java diff --git a/parser/src/main/antlr4/nu/zoom/dsl/parser/Endpoints.g4 b/parser/src/main/antlr4/nu/zoom/dsl/parser/Endpoints.g4 index 52edd2e..c1bd90b 100644 --- a/parser/src/main/antlr4/nu/zoom/dsl/parser/Endpoints.g4 +++ b/parser/src/main/antlr4/nu/zoom/dsl/parser/Endpoints.g4 @@ -6,7 +6,7 @@ configkey : IDENTIFIER ; configvalue : (IDENTIFIER|VALUE) ; namedTypeDeclaration : typeName typeDeclaration ; typeName : IDENTIFIER ; -typeDeclaration : typeName? '(' typeField (',' typeField)* ')' ; +typeDeclaration : '(' typeField (',' typeField)* ')' ; typeField : fieldName ':' fieldType ; fieldName : IDENTIFIER ; fieldType : IDENTIFIER ; diff --git a/parser/src/main/java/nu/zoom/dsl/ast/EndpointsVisitorTransformer.java b/parser/src/main/java/nu/zoom/dsl/ast/EndpointsVisitorTransformer.java index 556a23c..51b0854 100644 --- a/parser/src/main/java/nu/zoom/dsl/ast/EndpointsVisitorTransformer.java +++ b/parser/src/main/java/nu/zoom/dsl/ast/EndpointsVisitorTransformer.java @@ -56,8 +56,24 @@ public class EndpointsVisitorTransformer extends EndpointsBaseVisitor fields = extractTypeFields(ctx.typeDeclaration().typeField()); - return new TypeNode(Optional.of(typeName), fields); + return new TypeNode(typeName, fields); } private List extractTypeFields(List compoundFieldContexts) { diff --git a/parser/src/main/java/nu/zoom/dsl/ast/ParseException.java b/parser/src/main/java/nu/zoom/dsl/ast/ParseException.java new file mode 100644 index 0000000..d9dde07 --- /dev/null +++ b/parser/src/main/java/nu/zoom/dsl/ast/ParseException.java @@ -0,0 +1,7 @@ +package nu.zoom.dsl.ast; + +public class ParseException extends RuntimeException { + public ParseException(String message) { + super(message); + } +} diff --git a/parser/src/main/java/nu/zoom/dsl/ast/TypeNode.java b/parser/src/main/java/nu/zoom/dsl/ast/TypeNode.java index 1e76b1a..095da4f 100644 --- a/parser/src/main/java/nu/zoom/dsl/ast/TypeNode.java +++ b/parser/src/main/java/nu/zoom/dsl/ast/TypeNode.java @@ -3,5 +3,5 @@ package nu.zoom.dsl.ast; import java.util.List; import java.util.Optional; -public record TypeNode(Optional name, List fields) { +public record TypeNode(String name, List fields) { } diff --git a/test01.endpoints b/test01.endpoints index c60ce61..aa8ff9a 100644 --- a/test01.endpoints +++ b/test01.endpoints @@ -1,2 +1,5 @@ -/some/endpoint =< SomeType(foo:String) -/some/other/endpoint =< SomeOtherType(bar:Seq[Embedded]) \ No newline at end of file +AType(data: List[String]) + +/some/endpoint <- SomeType(foo:String) +/some/other/endpoint <- SomeOtherType(bar:Seq[Embedded]) +/yet/other/endpoint <- (bar:Seq[Embedded]) \ No newline at end of file