Repository: alecthomas/chroma
Pull request #1024 (2024-11-30 23:27:26)

Add Eclipse ATL language (https://eclipse.dev/atl/)
Would like to use ATL syntax highlighting on the ATL website, which is generated using hugo.


Patch:
diff --git a/lexers/embedded/atl.xml b/lexers/embedded/atl.xml
new file mode 100644
index 0000000..623dc20
--- /dev/null
+++ b/lexers/embedded/atl.xml
@@ -0,0 +1,165 @@
+<lexer>
+  <config>
+    <name>ATL</name>
+    <alias>atl</alias>
+    <filename>*.atl</filename>
+    <mime_type>text/x-atl</mime_type>
+    <dot_all>true</dot_all>
+  </config>
+  <rules>
+    <state name="root">
+      <rule pattern="(--.*?)(\n)">
+        <bygroups>
+          <token type="CommentSingle" />
+          <token type="TextWhitespace" />
+        </bygroups>
+      </rule>
+      <rule pattern="(and|distinct|endif|else|for|foreach|if|implies|in|let|not|or|self|super|then|thisModule|xor)\b">
+        <token type="Keyword" />
+      </rule>
+      <rule pattern="(OclUndefined|true|false|#\w+)\b">
+        <token type="KeywordConstant" />
+      </rule>
+      <rule pattern="(module|query|library|create|from|to|uses)\b">
+         <token type="KeywordNamespace" />
+      </rule>
+      <rule pattern="(do)(\s*)({)">
+        <bygroups>
+          <token type="KeywordNamespace" />
+          <token type="TextWhitespace" />
+          <token type="Punctuation" />
+        </bygroups>
+      </rule>
+      <rule pattern="(abstract|endpoint|entrypoint|lazy|unique)(\s+)">
+        <bygroups>
+          <token type="KeywordDeclaration" />
+          <token type="TextWhitespace" />
+        </bygroups>
+      </rule>
+      <rule pattern="(rule)(\s+)">
+        <bygroups>
+          <token type="KeywordNamespace" />
+          <token type="TextWhitespace" />
+        </bygroups>
+      </rule>
+      <rule pattern="(helper)(\s+)">
+        <bygroups>
+          <token type="KeywordNamespace" />
+          <token type="TextWhitespace" />
+        </bygroups>
+      </rule>
+      <rule pattern="(context)(\s+)">
+        <bygroups>
+          <token type="KeywordNamespace" />
+          <token type="TextWhitespace" />
+        </bygroups>
+      </rule>
+      <rule pattern="(def)(\s*)(:)(\s*)">
+        <bygroups>
+          <token type="KeywordNamespace" />
+          <token type="TextWhitespace" />
+          <token type="Punctuation" />
+          <token type="TextWhitespace" />
+        </bygroups>
+      </rule>
+      <rule pattern="(Bag|Boolean|Integer|OrderedSet|Real|Sequence|Set|String|Tuple)">
+        <token type="KeywordType" />
+      </rule>
+      <rule pattern="(\w+)(\s*)(&lt;-|&lt;:=)">
+        <bygroups>
+          <token type="NameNamespace" />
+          <token type="TextWhitespace" />
+          <token type="Punctuation" />
+        </bygroups>
+      </rule>
+      <rule pattern="#&quot;">
+        <token type="KeywordConstant" />
+        <push state="quotedenumliteral" />
+      </rule>
+      <rule pattern="&quot;">
+        <token type="NameNamespace" />
+        <push state="quotedname" />
+      </rule>
+      <rule pattern="[^\S\n]+">
+        <token type="TextWhitespace" />
+      </rule>
+      <rule pattern="&#x27;">
+        <token type="LiteralString" />
+        <push state="string" />
+      </rule>
+      <rule
+        pattern="[0-9]*\.[0-9]+">
+        <token type="LiteralNumberFloat" />
+      </rule>
+      <rule pattern="0|[1-9][0-9]*">
+        <token type="LiteralNumberInteger" />
+      </rule>
+      <rule pattern="[*&lt;&gt;+=/-]">
+        <token type="Operator" />
+      </rule>
+      <rule pattern="([{}();:.,!|]|-&gt;)">
+        <token type="Punctuation" />
+      </rule>
+      <rule pattern="\n">
+        <token type="TextWhitespace" />
+      </rule>
+      <rule pattern="\w+">
+        <token type="NameNamespace" />
+      </rule>
+    </state>
+    <state name="string">
+      <rule pattern="[^\\&#x27;]+">
+        <token type="LiteralString" />
+      </rule>
+      <rule pattern="\\\\">
+        <token type="LiteralString" />
+      </rule>
+      <rule pattern="\\&#x27;">
+        <token type="LiteralString" />
+      </rule>
+      <rule pattern="\\">
+        <token type="LiteralString" />
+      </rule>
+      <rule pattern="&#x27;">
+        <token type="LiteralString" />
+        <pop depth="1" />
+      </rule>
+    </state>
+    <state name="quotedname">
+      <rule pattern="[^\\&quot;]+">
+        <token type="NameNamespace" />
+      </rule>
+      <rule pattern="\\\\">
+        <token type="NameNamespace" />
+      </rule>
+      <rule pattern="\\&quot;">
+        <token type="NameNamespace" />
+      </rule>
+      <rule pattern="\\">
+        <token type="NameNamespace" />
+      </rule>
+      <rule pattern="&quot;">
+        <token type="NameNamespace" />
+        <pop depth="1" />
+      </rule>
+    </state>
+    <state name="quotedenumliteral">
+      <rule pattern="[^\\&quot;]+">
+        <token type="KeywordConstant" />
+      </rule>
+      <rule pattern="\\\\">
+        <token type="KeywordConstant" />
+      </rule>
+      <rule pattern="\\&quot;">
+        <token type="KeywordConstant" />
+      </rule>
+      <rule pattern="\\">
+        <token type="KeywordConstant" />
+      </rule>
+      <rule pattern="&quot;">
+        <token type="KeywordConstant" />
+        <pop depth="1" />
+      </rule>
+    </state>
+  </rules>
+</lexer>


Test patch:
diff --git a/lexers/testdata/atl.actual b/lexers/testdata/atl.actual
new file mode 100644
index 0000000..677340c
--- /dev/null
+++ b/lexers/testdata/atl.actual
@@ -0,0 +1,61 @@
+module TypeA2TypeB;
+create b : TypeB from a : TypeA;
+
+rule RootA2RootB {
+	from
+		rtA : TypeA!RootA
+	to
+		rtB : TypeB!RootB (
+			defs <- rtA.elms->iterate(e; res : Set(TypeA!ElementA) = Set {} |
+				if (res->collect(f | f.name)->includes(e.name)) then
+					res
+				else
+					res->including(e)
+				endif
+				)-- here we keep only one element of each name value
+				->collect(e | thisModule.Definition(e)),
+				-- then we create a DefinitionB from each selected element
+			elms <- rtA.elms
+		)
+}
+
+lazy rule Definition {
+	from
+		s : TypeA!ElementA
+	to
+		t : TypeB!DefinitionB(
+			name <- s.name
+		)
+}
+
+helper def: nameToAssignHistory : Sequence(TupleType(e : TypeB!ElementB, s : String)) =
+	Sequence {};
+
+rule NameToAssign (e : TypeB!ElementB, s : String) {
+	do {
+		thisModule.nameToAssignHistory <- thisModule.nameToAssignHistory->append(Tuple {e = e, s = s});
+	}
+}
+
+rule Element {
+	from
+		s : TypeA!ElementA
+	to
+		t : TypeB!ElementB(
+		)
+	do {
+		-- The corresponding name for the current ElementB is added in the map.
+		-- This map will be used at the end of the transformation to create a link between ElementB and DefinitionB
+		thisModule.NameToAssign(t, s.name);
+	}
+}
+
+-- execute delayed actions
+endpoint rule EndRule() {
+	do {
+		for(dta in thisModule.nameToAssignHistory) {
+			-- We create a link between an ElementB and the corresponding DefinitionB
+			dta.e.definition <- TypeB!DefinitionB.allInstancesFrom('b')->any(e | e.name = dta.s);
+		}
+	}
+}
diff --git a/lexers/testdata/atl.expected b/lexers/testdata/atl.expected
new file mode 100644
index 0000000..2257e68
--- /dev/null
+++ b/lexers/testdata/atl.expected
@@ -0,0 +1,413 @@
+[
+  {"type":"KeywordNamespace","value":"module"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"NameNamespace","value":"TypeA2TypeB"},
+  {"type":"Punctuation","value":";"},
+  {"type":"TextWhitespace","value":"\n"},
+  {"type":"KeywordNamespace","value":"create"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"NameNamespace","value":"b"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"Punctuation","value":":"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"NameNamespace","value":"TypeB"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"KeywordNamespace","value":"from"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"NameNamespace","value":"a"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"Punctuation","value":":"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"NameNamespace","value":"TypeA"},
+  {"type":"Punctuation","value":";"},
+  {"type":"TextWhitespace","value":"\n\n"},
+  {"type":"KeywordNamespace","value":"rule"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"NameNamespace","value":"RootA2RootB"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"Punctuation","value":"{"},
+  {"type":"TextWhitespace","value":"\n\t"},
+  {"type":"KeywordNamespace","value":"from"},
+  {"type":"TextWhitespace","value":"\n\t\t"},
+  {"type":"NameNamespace","value":"rtA"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"Punctuation","value":":"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"NameNamespace","value":"TypeA"},
+  {"type":"Punctuation","value":"!"},
+  {"type":"NameNamespace","value":"RootA"},
+  {"type":"TextWhitespace","value":"\n\t"},
+  {"type":"KeywordNamespace","value":"to"},
+  {"type":"TextWhitespace","value":"\n\t\t"},
+  {"type":"NameNamespace","value":"rtB"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"Punctuation","value":":"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"NameNamespace","value":"TypeB"},
+  {"type":"Punctuation","value":"!"},
+  {"type":"NameNamespace","value":"RootB"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"Punctuation","value":"("},
+  {"type":"TextWhitespace","value":"\n\t\t\t"},
+  {"type":"NameNamespace","value":"defs"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"Punctuation","value":"\u003c-"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"NameNamespace","value":"rtA"},
+  {"type":"Punctuation","value":"."},
+  {"type":"NameNamespace","value":"elms"},
+  {"type":"Operator","value":"-\u003e"},
+  {"type":"NameNamespace","value":"iterate"},
+  {"type":"Punctuation","value":"("},
+  {"type":"NameNamespace","value":"e"},
+  {"type":"Punctuation","value":";"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"NameNamespace","value":"res"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"Punctuation","value":":"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"KeywordType","value":"Set"},
+  {"type":"Punctuation","value":"("},
+  {"type":"NameNamespace","value":"TypeA"},
+  {"type":"Punctuation","value":"!"},
+  {"type":"NameNamespace","value":"ElementA"},
+  {"type":"Punctuation","value":")"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"Operator","value":"="},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"KeywordType","value":"Set"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"Punctuation","value":"{}"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"Punctuation","value":"|"},
+  {"type":"TextWhitespace","value":"\n\t\t\t\t"},
+  {"type":"Keyword","value":"if"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"Punctuation","value":"("},
+  {"type":"NameNamespace","value":"res"},
+  {"type":"Operator","value":"-\u003e"},
+  {"type":"NameNamespace","value":"collect"},
+  {"type":"Punctuation","value":"("},
+  {"type":"NameNamespace","value":"f"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"Punctuation","value":"|"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"NameNamespace","value":"f"},
+  {"type":"Punctuation","value":"."},
+  {"type":"NameNamespace","value":"name"},
+  {"type":"Punctuation","value":")"},
+  {"type":"Operator","value":"-\u003e"},
+  {"type":"NameNamespace","value":"includes"},
+  {"type":"Punctuation","value":"("},
+  {"type":"NameNamespace","value":"e"},
+  {"type":"Punctuation","value":"."},
+  {"type":"NameNamespace","value":"name"},
+  {"type":"Punctuation","value":"))"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"Keyword","value":"then"},
+  {"type":"TextWhitespace","value":"\n\t\t\t\t\t"},
+  {"type":"NameNamespace","value":"res"},
+  {"type":"TextWhitespace","value":"\n\t\t\t\t"},
+  {"type":"Keyword","value":"else"},
+  {"type":"TextWhitespace","value":"\n\t\t\t\t\t"},
+  {"type":"NameNamespace","value":"res"},
+  {"type":"Operator","value":"-\u003e"},
+  {"type":"NameNamespace","value":"including"},
+  {"type":"Punctuation","value":"("},
+  {"type":"NameNamespace","value":"e"},
+  {"type":"Punctuation","value":")"},
+  {"type":"TextWhitespace","value":"\n\t\t\t\t"},
+  {"type":"Keyword","value":"endif"},
+  {"type":"TextWhitespace","value":"\n\t\t\t\t"},
+  {"type":"Punctuation","value":")"},
+  {"type":"CommentSingle","value":"-- here we keep only one element of each name value"},
+  {"type":"TextWhitespace","value":"\n\t\t\t\t"},
+  {"type":"Operator","value":"-\u003e"},
+  {"type":"NameNamespace","value":"collect"},
+  {"type":"Punctuation","value":"("},
+  {"type":"NameNamespace","value":"e"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"Punctuation","value":"|"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"Keyword","value":"thisModule"},
+  {"type":"Punctuation","value":"."},
+  {"type":"NameNamespace","value":"Definition"},
+  {"type":"Punctuation","value":"("},
+  {"type":"NameNamespace","value":"e"},
+  {"type":"Punctuation","value":")),"},
+  {"type":"TextWhitespace","value":"\n\t\t\t\t"},
+  {"type":"CommentSingle","value":"-- then we create a DefinitionB from each selected element"},
+  {"type":"TextWhitespace","value":"\n\t\t\t"},
+  {"type":"NameNamespace","value":"elms"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"Punctuation","value":"\u003c-"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"NameNamespace","value":"rtA"},
+  {"type":"Punctuation","value":"."},
+  {"type":"NameNamespace","value":"elms"},
+  {"type":"TextWhitespace","value":"\n\t\t"},
+  {"type":"Punctuation","value":")"},
+  {"type":"TextWhitespace","value":"\n"},
+  {"type":"Punctuation","value":"}"},
+  {"type":"TextWhitespace","value":"\n\n"},
+  {"type":"KeywordDeclaration","value":"lazy"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"KeywordNamespace","value":"rule"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"NameNamespace","value":"Definition"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"Punctuation","value":"{"},
+  {"type":"TextWhitespace","value":"\n\t"},
+  {"type":"KeywordNamespace","value":"from"},
+  {"type":"TextWhitespace","value":"\n\t\t"},
+  {"type":"NameNamespace","value":"s"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"Punctuation","value":":"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"NameNamespace","value":"TypeA"},
+  {"type":"Punctuation","value":"!"},
+  {"type":"NameNamespace","value":"ElementA"},
+  {"type":"TextWhitespace","value":"\n\t"},
+  {"type":"KeywordNamespace","value":"to"},
+  {"type":"TextWhitespace","value":"\n\t\t"},
+  {"type":"NameNamespace","value":"t"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"Punctuation","value":":"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"NameNamespace","value":"TypeB"},
+  {"type":"Punctuation","value":"!"},
+  {"type":"NameNamespace","value":"DefinitionB"},
+  {"type":"Punctuation","value":"("},
+  {"type":"TextWhitespace","value":"\n\t\t\t"},
+  {"type":"NameNamespace","value":"name"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"Punctuation","value":"\u003c-"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"NameNamespace","value":"s"},
+  {"type":"Punctuation","value":"."},
+  {"type":"NameNamespace","value":"name"},
+  {"type":"TextWhitespace","value":"\n\t\t"},
+  {"type":"Punctuation","value":")"},
+  {"type":"TextWhitespace","value":"\n"},
+  {"type":"Punctuation","value":"}"},
+  {"type":"TextWhitespace","value":"\n\n"},
+  {"type":"KeywordNamespace","value":"helper"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"KeywordNamespace","value":"def"},
+  {"type":"Punctuation","value":":"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"NameNamespace","value":"nameToAssignHistory"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"Punctuation","value":":"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"KeywordType","value":"Sequence"},
+  {"type":"Punctuation","value":"("},
+  {"type":"KeywordType","value":"Tuple"},
+  {"type":"NameNamespace","value":"Type"},
+  {"type":"Punctuation","value":"("},
+  {"type":"NameNamespace","value":"e"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"Punctuation","value":":"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"NameNamespace","value":"TypeB"},
+  {"type":"Punctuation","value":"!"},
+  {"type":"NameNamespace","value":"ElementB"},
+  {"type":"Punctuation","value":","},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"NameNamespace","value":"s"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"Punctuation","value":":"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"KeywordType","value":"String"},
+  {"type":"Punctuation","value":"))"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"Operator","value":"="},
+  {"type":"TextWhitespace","value":"\n\t"},
+  {"type":"KeywordType","value":"Sequence"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"Punctuation","value":"{};"},
+  {"type":"TextWhitespace","value":"\n\n"},
+  {"type":"KeywordNamespace","value":"rule"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"NameNamespace","value":"NameToAssign"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"Punctuation","value":"("},
+  {"type":"NameNamespace","value":"e"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"Punctuation","value":":"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"NameNamespace","value":"TypeB"},
+  {"type":"Punctuation","value":"!"},
+  {"type":"NameNamespace","value":"ElementB"},
+  {"type":"Punctuation","value":","},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"NameNamespace","value":"s"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"Punctuation","value":":"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"KeywordType","value":"String"},
+  {"type":"Punctuation","value":")"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"Punctuation","value":"{"},
+  {"type":"TextWhitespace","value":"\n\t"},
+  {"type":"KeywordNamespace","value":"do"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"Punctuation","value":"{"},
+  {"type":"TextWhitespace","value":"\n\t\t"},
+  {"type":"Keyword","value":"thisModule"},
+  {"type":"Punctuation","value":"."},
+  {"type":"NameNamespace","value":"nameToAssignHistory"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"Punctuation","value":"\u003c-"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"Keyword","value":"thisModule"},
+  {"type":"Punctuation","value":"."},
+  {"type":"NameNamespace","value":"nameToAssignHistory"},
+  {"type":"Operator","value":"-\u003e"},
+  {"type":"NameNamespace","value":"append"},
+  {"type":"Punctuation","value":"("},
+  {"type":"KeywordType","value":"Tuple"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"Punctuation","value":"{"},
+  {"type":"NameNamespace","value":"e"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"Operator","value":"="},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"NameNamespace","value":"e"},
+  {"type":"Punctuation","value":","},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"NameNamespace","value":"s"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"Operator","value":"="},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"NameNamespace","value":"s"},
+  {"type":"Punctuation","value":"});"},
+  {"type":"TextWhitespace","value":"\n\t"},
+  {"type":"Punctuation","value":"}"},
+  {"type":"TextWhitespace","value":"\n"},
+  {"type":"Punctuation","value":"}"},
+  {"type":"TextWhitespace","value":"\n\n"},
+  {"type":"KeywordNamespace","value":"rule"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"NameNamespace","value":"Element"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"Punctuation","value":"{"},
+  {"type":"TextWhitespace","value":"\n\t"},
+  {"type":"KeywordNamespace","value":"from"},
+  {"type":"TextWhitespace","value":"\n\t\t"},
+  {"type":"NameNamespace","value":"s"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"Punctuation","value":":"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"NameNamespace","value":"TypeA"},
+  {"type":"Punctuation","value":"!"},
+  {"type":"NameNamespace","value":"ElementA"},
+  {"type":"TextWhitespace","value":"\n\t"},
+  {"type":"KeywordNamespace","value":"to"},
+  {"type":"TextWhitespace","value":"\n\t\t"},
+  {"type":"NameNamespace","value":"t"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"Punctuation","value":":"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"NameNamespace","value":"TypeB"},
+  {"type":"Punctuation","value":"!"},
+  {"type":"NameNamespace","value":"ElementB"},
+  {"type":"Punctuation","value":"("},
+  {"type":"TextWhitespace","value":"\n\t\t"},
+  {"type":"Punctuation","value":")"},
+  {"type":"TextWhitespace","value":"\n\t"},
+  {"type":"KeywordNamespace","value":"do"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"Punctuation","value":"{"},
+  {"type":"TextWhitespace","value":"\n\t\t"},
+  {"type":"CommentSingle","value":"-- The corresponding name for the current ElementB is added in the map."},
+  {"type":"TextWhitespace","value":"\n\t\t"},
+  {"type":"CommentSingle","value":"-- This map will be used at the end of the transformation to create a link between ElementB and DefinitionB"},
+  {"type":"TextWhitespace","value":"\n\t\t"},
+  {"type":"Keyword","value":"thisModule"},
+  {"type":"Punctuation","value":"."},
+  {"type":"NameNamespace","value":"NameToAssign"},
+  {"type":"Punctuation","value":"("},
+  {"type":"NameNamespace","value":"t"},
+  {"type":"Punctuation","value":","},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"NameNamespace","value":"s"},
+  {"type":"Punctuation","value":"."},
+  {"type":"NameNamespace","value":"name"},
+  {"type":"Punctuation","value":");"},
+  {"type":"TextWhitespace","value":"\n\t"},
+  {"type":"Punctuation","value":"}"},
+  {"type":"TextWhitespace","value":"\n"},
+  {"type":"Punctuation","value":"}"},
+  {"type":"TextWhitespace","value":"\n\n"},
+  {"type":"CommentSingle","value":"-- execute delayed actions"},
+  {"type":"TextWhitespace","value":"\n"},
+  {"type":"KeywordDeclaration","value":"endpoint"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"KeywordNamespace","value":"rule"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"NameNamespace","value":"EndRule"},
+  {"type":"Punctuation","value":"()"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"Punctuation","value":"{"},
+  {"type":"TextWhitespace","value":"\n\t"},
+  {"type":"KeywordNamespace","value":"do"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"Punctuation","value":"{"},
+  {"type":"TextWhitespace","value":"\n\t\t"},
+  {"type":"Keyword","value":"for"},
+  {"type":"Punctuation","value":"("},
+  {"type":"NameNamespace","value":"dta"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"Keyword","value":"in"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"Keyword","value":"thisModule"},
+  {"type":"Punctuation","value":"."},
+  {"type":"NameNamespace","value":"nameToAssignHistory"},
+  {"type":"Punctuation","value":")"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"Punctuation","value":"{"},
+  {"type":"TextWhitespace","value":"\n\t\t\t"},
+  {"type":"CommentSingle","value":"-- We create a link between an ElementB and the corresponding DefinitionB"},
+  {"type":"TextWhitespace","value":"\n\t\t\t"},
+  {"type":"NameNamespace","value":"dta"},
+  {"type":"Punctuation","value":"."},
+  {"type":"NameNamespace","value":"e"},
+  {"type":"Punctuation","value":"."},
+  {"type":"NameNamespace","value":"definition"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"Punctuation","value":"\u003c-"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"NameNamespace","value":"TypeB"},
+  {"type":"Punctuation","value":"!"},
+  {"type":"NameNamespace","value":"DefinitionB"},
+  {"type":"Punctuation","value":"."},
+  {"type":"NameNamespace","value":"allInstancesFrom"},
+  {"type":"Punctuation","value":"("},
+  {"type":"LiteralString","value":"'b'"},
+  {"type":"Punctuation","value":")"},
+  {"type":"Operator","value":"-\u003e"},
+  {"type":"NameNamespace","value":"any"},
+  {"type":"Punctuation","value":"("},
+  {"type":"NameNamespace","value":"e"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"Punctuation","value":"|"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"NameNamespace","value":"e"},
+  {"type":"Punctuation","value":"."},
+  {"type":"NameNamespace","value":"name"},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"Operator","value":"="},
+  {"type":"TextWhitespace","value":" "},
+  {"type":"NameNamespace","value":"dta"},
+  {"type":"Punctuation","value":"."},
+  {"type":"NameNamespace","value":"s"},
+  {"type":"Punctuation","value":");"},
+  {"type":"TextWhitespace","value":"\n\t\t"},
+  {"type":"Punctuation","value":"}"},
+  {"type":"TextWhitespace","value":"\n\t"},
+  {"type":"Punctuation","value":"}"},
+  {"type":"TextWhitespace","value":"\n"},
+  {"type":"Punctuation","value":"}"},
+  {"type":"TextWhitespace","value":"\n"}
+]