Skip to content
Snippets Groups Projects
Commit b1e43a46 authored by Johannes Mey's avatar Johannes Mey
Browse files

fix bug with terminal nonterminal attributes, allow shadowing

parent dca69ff0
No related branches found
No related tags found
No related merge requests found
Pipeline #4900 passed
...@@ -105,6 +105,11 @@ aspect ComponentAnalysis { ...@@ -105,6 +105,11 @@ aspect ComponentAnalysis {
//--- isEqual --- //--- isEqual ---
syn boolean Component.isEqual(Component c) = this.getClass() == c.getClass() && getTypeUse().isEqual(c.getTypeUse()); 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); syn boolean TypeUse.isEqual(TypeUse u);
eq SimpleTypeUse.isEqual(TypeUse u) = u instanceof SimpleTypeUse && getID().equals(u.getID()); eq SimpleTypeUse.isEqual(TypeUse u) = u instanceof SimpleTypeUse && getID().equals(u.getID());
eq ParameterizedTypeUse.isEqual(TypeUse u) { eq ParameterizedTypeUse.isEqual(TypeUse u) {
......
...@@ -111,6 +111,9 @@ aspect BackendAbstractGrammar { ...@@ -111,6 +111,9 @@ aspect BackendAbstractGrammar {
public String TokenComponent.generateAbstractGrammar() { public String TokenComponent.generateAbstractGrammar() {
return "<" + getID() + ":" + getTypeUse() + ">"; return "<" + getID() + ":" + getTypeUse() + ">";
} }
public String NTATokenComponent.generateAbstractGrammar() {
return "/<" + getID() + ":" + getTypeUse() + ">/";
}
public String RelationComponent.generateAbstractGrammar() { public String RelationComponent.generateAbstractGrammar() {
return "<" + getImplAttributeName() + ":" + ofTypeDecl() + ">"; return "<" + getImplAttributeName() + ":" + ofTypeDecl() + ">";
......
...@@ -11,6 +11,7 @@ NTAComponent : SimpleTypeComponent; ...@@ -11,6 +11,7 @@ NTAComponent : SimpleTypeComponent;
NTAOptComponent : SimpleTypeComponent; NTAOptComponent : SimpleTypeComponent;
NTAListComponent : SimpleTypeComponent; NTAListComponent : SimpleTypeComponent;
TokenComponent : Component ::= TypeUse; TokenComponent : Component ::= TypeUse;
NTATokenComponent : TokenComponent ::= TypeUse;
abstract TypeUse ::= <ID>; abstract TypeUse ::= <ID>;
SimpleTypeUse : TypeUse; SimpleTypeUse : TypeUse;
......
...@@ -75,8 +75,8 @@ Component component = ...@@ -75,8 +75,8 @@ Component component =
| SLASH ID COL s_type_use.u SLASH {: return new NTAComponent(ID, u); :} | 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); :} | SLASH s_type_use.u SLASH {: return new NTAComponent(u.getID(), u); :}
// NTA Token (same as NTA) // NTA Token (same as NTA)
| SLASH LT ID COL s_type_use.u GT SLASH {: return new NTAComponent(ID, 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 NTAComponent(u.getID(), u); :} | SLASH LT s_type_use.u GT SLASH {: return new NTATokenComponent(u.getID(), u); :}
// Token // Token
| LT ID COL type_use.u GT {: return new TokenComponent(ID, u); :} | LT ID COL type_use.u GT {: return new TokenComponent(ID, u); :}
| LT ID GT {: return new TokenComponent(ID, new SimpleTypeUse("String")); :} | LT ID GT {: return new TokenComponent(ID, new SimpleTypeUse("String")); :}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment