dot`
digraph G {
graph [rankdir=TB]
node [shape="ellipse" fontname="verdana" fontsize=10]
node [style=filled fillcolor=white]
compound="true";
src [label="Source\nFiles" shape=folder]
subgraph cluster0 {
fontname="verdana" fontsize="10" style="filled" fillcolor="lightgrey" margin=20
label = "Parser\n(ANTLR)";
lex [label="Lexer"]
par [label="Parser"]
ast [label="Abstract\nSyntax\nTree"]
lex -> par -> ast
}
src -> lex [constraint=false]
subgraph cluster1 {
fontname="verdana" fontsize="10" style="filled" fillcolor="lightgrey" margin=20
label = "Transform\n(TypeScript)";
cst [label="Concrete\nSyntax\nTree" shape="ellipse"]
}
ast -> cst [constraint=false]
subgraph cluster4 {
fontname="verdana" fontsize="10" style="filled" fillcolor="lightgrey" margin=20
label = "Code Generator\n(TypeScript)";
js [label="JavaScript"]
}
cst -> js [lhead=cluster4 arrowhead=crow]
subgraph cluster2 {
fontname="verdana" fontsize="10" style="filled" fillcolor="lightgrey" margin=20
label = "VSCode Extension\n(TypeScript)";
node [shape="rectangle"]
scol [label="Syntax\nColouring"]
sc [label=" Syntax Checking \nError Reporting"]
ol [label="Outline"]
tt [label="Tooltips"]
scol -> sc [style=invis]
ol -> tt [style=invis]
}
cst -> sc [constraint=false lhead=cluster2 arrowhead=crow]
}`