1
0
mirror of https://github.com/alecthomas/chroma.git synced 2025-02-03 13:01:47 +02:00

Add Eclipse ATL language (https://eclipse.dev/atl/) (#1024)

Would like to use ATL syntax highlighting on the ATL website, which is
generated using hugo.
This commit is contained in:
Dennis Wagelaar 2024-12-02 01:34:48 +01:00 committed by GitHub
parent df769f9366
commit b07ff27bb0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 639 additions and 0 deletions

165
lexers/embedded/atl.xml Normal file
View File

@ -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>

61
lexers/testdata/atl.actual vendored Normal file
View File

@ -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);
}
}
}

413
lexers/testdata/atl.expected vendored Normal file
View File

@ -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"}
]