From b1e43a46df923913bee74e71882cc094e6b488df Mon Sep 17 00:00:00 2001 From: Johannes Mey <johannes.mey@tu-dresden.de> Date: Sun, 15 Dec 2019 22:08:39 +0100 Subject: [PATCH] fix bug with terminal nonterminal attributes, allow shadowing --- src/main/jastadd/Analysis.jrag | 5 +++++ src/main/jastadd/Backend.jadd | 3 +++ src/main/jastadd/RelAst.ast | 1 + src/main/jastadd/RelAst.parser | 4 ++-- 4 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/main/jastadd/Analysis.jrag b/src/main/jastadd/Analysis.jrag index 27f3a7d..d03a679 100644 --- a/src/main/jastadd/Analysis.jrag +++ b/src/main/jastadd/Analysis.jrag @@ -105,6 +105,11 @@ aspect ComponentAnalysis { //--- isEqual --- syn boolean Component.isEqual(Component c) = this.getClass() == c.getClass() && getTypeUse().isEqual(c.getTypeUse()); + /** + * TokenComponents may be specialized by NTATokenComponents and vice versa + */ + eq TokenComponent.isEqual(Component c) = (c instanceof TokenComponent) && getTypeUse().isEqual(c.getTypeUse()); + syn boolean TypeUse.isEqual(TypeUse u); eq SimpleTypeUse.isEqual(TypeUse u) = u instanceof SimpleTypeUse && getID().equals(u.getID()); eq ParameterizedTypeUse.isEqual(TypeUse u) { diff --git a/src/main/jastadd/Backend.jadd b/src/main/jastadd/Backend.jadd index 26591c0..cab17e1 100644 --- a/src/main/jastadd/Backend.jadd +++ b/src/main/jastadd/Backend.jadd @@ -111,6 +111,9 @@ aspect BackendAbstractGrammar { public String TokenComponent.generateAbstractGrammar() { return "<" + getID() + ":" + getTypeUse() + ">"; } + public String NTATokenComponent.generateAbstractGrammar() { + return "/<" + getID() + ":" + getTypeUse() + ">/"; + } public String RelationComponent.generateAbstractGrammar() { return "<" + getImplAttributeName() + ":" + ofTypeDecl() + ">"; diff --git a/src/main/jastadd/RelAst.ast b/src/main/jastadd/RelAst.ast index f0132fc..31083b9 100644 --- a/src/main/jastadd/RelAst.ast +++ b/src/main/jastadd/RelAst.ast @@ -11,6 +11,7 @@ NTAComponent : SimpleTypeComponent; NTAOptComponent : SimpleTypeComponent; NTAListComponent : SimpleTypeComponent; TokenComponent : Component ::= TypeUse; +NTATokenComponent : TokenComponent ::= TypeUse; abstract TypeUse ::= <ID>; SimpleTypeUse : TypeUse; diff --git a/src/main/jastadd/RelAst.parser b/src/main/jastadd/RelAst.parser index 6b138b9..f043efd 100644 --- a/src/main/jastadd/RelAst.parser +++ b/src/main/jastadd/RelAst.parser @@ -75,8 +75,8 @@ Component component = | SLASH ID COL s_type_use.u SLASH {: return new NTAComponent(ID, u); :} | SLASH s_type_use.u SLASH {: return new NTAComponent(u.getID(), u); :} // NTA Token (same as NTA) - | SLASH LT ID COL s_type_use.u GT SLASH {: return new NTAComponent(ID, u); :} - | SLASH LT s_type_use.u GT SLASH {: return new NTAComponent(u.getID(), u); :} + | SLASH LT ID COL s_type_use.u GT SLASH {: return new NTATokenComponent(ID, u); :} + | SLASH LT s_type_use.u GT SLASH {: return new NTATokenComponent(u.getID(), u); :} // Token | LT ID COL type_use.u GT {: return new TokenComponent(ID, u); :} | LT ID GT {: return new TokenComponent(ID, new SimpleTypeUse("String")); :} -- GitLab