From 9dfc2fdb5ca448717b6a58b2b838be0e4f3653ad Mon Sep 17 00:00:00 2001
From: Johannes Mey <johannes.mey@tu-dresden.de>
Date: Thu, 7 May 2020 22:00:55 +0200
Subject: [PATCH] fix parsing of token without explicit type

---
 src/main/jastadd/RelAst.relast                | 2 +-
 src/main/jastadd/backend/AbstractGrammar.jadd | 9 +++++++--
 src/main/jastadd/parser/RelAst.parser         | 5 ++---
 3 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/src/main/jastadd/RelAst.relast b/src/main/jastadd/RelAst.relast
index 2168413..b92cb92 100644
--- a/src/main/jastadd/RelAst.relast
+++ b/src/main/jastadd/RelAst.relast
@@ -20,7 +20,7 @@ NormalComponent : TypeComponent;
 ListComponent : TypeComponent;
 OptComponent : TypeComponent;
 
-TokenComponent : Component ::= JavaTypeUse;
+TokenComponent : Component ::= [JavaTypeUse];
 
 abstract JavaTypeUse ::= <Name>;
 SimpleJavaTypeUse : JavaTypeUse;
diff --git a/src/main/jastadd/backend/AbstractGrammar.jadd b/src/main/jastadd/backend/AbstractGrammar.jadd
index 870132c..713efee 100644
--- a/src/main/jastadd/backend/AbstractGrammar.jadd
+++ b/src/main/jastadd/backend/AbstractGrammar.jadd
@@ -101,9 +101,14 @@ aspect BackendAbstractGrammar {
     }
     b.append("<");
     if (!getName().equals("")) {
-      b.append(getName()).append(":");
+      b.append(getName());
+      if (hasJavaTypeUse()) {
+        b.append(":");
+      }
+    }
+    if (hasJavaTypeUse()) {
+      getJavaTypeUse().generateAbstractGrammar(b);
     }
-    getJavaTypeUse().generateAbstractGrammar(b);
     b.append(">");
     if (getNTA()) {
       b.append("/");
diff --git a/src/main/jastadd/parser/RelAst.parser b/src/main/jastadd/parser/RelAst.parser
index f94fbef..c05c959 100644
--- a/src/main/jastadd/parser/RelAst.parser
+++ b/src/main/jastadd/parser/RelAst.parser
@@ -118,11 +118,10 @@ Component actual_component
       result.setJavaTypeUse(type);
       return result;
     :}
-  | LT ID.type GT
+  | LT ID.name GT
     {:
       TokenComponent result = new TokenComponent();
-      result.setName(type);
-      result.setJavaTypeUse(new SimpleJavaTypeUse(type));
+      result.setName(name);
       return result;
     :}
 ;
-- 
GitLab