Aufgrund einer Störung des s3 Storage, könnten in nächster Zeit folgende GitLab Funktionen nicht zur Verfügung stehen: LFS, Container Registry, Job Artifacs, Uploads (Wiki, Bilder, Projekt-Exporte). Wir bitten um Verständnis. Es wird mit Hochdruck an der Behebung des Problems gearbeitet. Weitere Informationen zur Störung des Object Storage finden Sie hier: https://maintenance.itc.rwth-aachen.de/ticket/status/messages/59-object-storage-pilot

Tagging.mc4 2.32 KB
Newer Older
vonWenckstern's avatar
vonWenckstern committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
package de.monticore.lang;

/**
 * Basic grammar to tag non-functional properties
 *
 * @author Michael von Wenckstern
 */
grammar Tagging extends de.monticore.common.Common {

  TaggingUnit@! =
    ("package" package:(Name& || ".")+ ";")? 
    (ImportStatement)*
    "conforms" "to" (QualifiedName || ",")+ ";"
	TagBody;
	
	// name should be optional, but than we need an transformation step in the parser
	// b/c the symbol table needs a name
	// and we need the symbol table for coco checks
	// maybe later for convience we make the optional
	TagBody = "tags" Name? ("for" targetModel: Scope)? "{"
	   Tag+ "}";
	   
//	interface TagElement;
	
  Tag = "tag" (Scope || ",")+ "with" TagElement+;
  TagElement = Name (TagValue | ";");

 fragment token WSS = (' ' | '\t' | '\r' | '\n');

 token TagValue = '=' WSS* BasicTagValue (WSS* ';');
 fragment token BasicTagValue = (Recursion | TagToken | String);
 fragment token Recursion = '{' (~('{' | '}' | '"') | String | Recursion)+ '}';
 fragment token TagToken = (~('"' | '{' | '}' | ';'))+;

	interface Scope;
	ast Scope =
	  method public String getQualifiedNameString() {
     return "";
    }
	  method public String getScopeKind() {
	    return "undefined";
	  };

	// this one is only defined here, to get Parser Tags
	NameScope implements Scope = QualifiedName;
	ast NameScope =
	  method public String getQualifiedNameString() {
       return getQualifiedName().toString();
     }
	  method public String getScopeKind() {
  	  return "NameScope";
  	};

	ConnectorScope extends NameScope = source:QualifiedName "->" QualifiedName;
  ast ConnectorScope =
    method public String getQualifiedNameString() {
       return getQualifiedName().toString();
     }
    method public String getScopeKind() {
      return "ConnectorScope";
    };

/* ast Scope =
  method public de.monticore.types.types._ast.ASTQualifiedName getQualifiedName() {
   return null;
  }
  method public String getQualifiedNameAsString() {
     return de.se_rwth.commons.Joiners.DOT.join(getQualifiedName().getParts());
  };
  ast NameScope =
  method public String getQualifiedNameAsString() {
     return de.se_rwth.commons.Joiners.DOT.join(getQualifiedName().getParts());
  };
  ast ConnectorScope =
    method public String getQualifiedNameAsString() {
       return de.se_rwth.commons.Joiners.DOT.join(getQualifiedName().getParts());
    }; */
}