1digraph { 2 fontname="Inconsolata, Consolas" 3 fontsize=10 4 margin="0,0" 5 penwidth=0.0 6 7 node [fontname="Inconsolata, Consolas", fontsize=10, penwidth=0.5] 8 edge [fontname="Inconsolata, Consolas", fontsize=10, penwidth=0.5] 9 10 node [shape = doublecircle]; Start; Finish; 11 node [shape = box; style = "rounded, filled"; fillcolor=white ]; 12 13 Start -> ArrayInitial [label=" ["]; 14 Start -> ObjectInitial [label=" {"]; 15 16 subgraph clusterArray { 17 margin="10,10" 18 style=filled 19 fillcolor=gray95 20 label = "Array" 21 22 ArrayInitial; Element; ElementDelimiter; ArrayFinish; 23 } 24 25 subgraph clusterObject { 26 margin="10,10" 27 style=filled 28 fillcolor=gray95 29 label = "Object" 30 31 ObjectInitial; MemberKey; KeyValueDelimiter; MemberValue; MemberDelimiter; ObjectFinish; 32 } 33 34 ArrayInitial -> ArrayInitial [label="["]; 35 ArrayInitial -> ArrayFinish [label=" ]"]; 36 ArrayInitial -> ObjectInitial [label="{", constraint=false]; 37 ArrayInitial -> Element [label="string\nfalse\ntrue\nnull\nnumber"]; 38 39 Element -> ArrayFinish [label="]"]; 40 Element -> ElementDelimiter [label=","]; 41 42 ElementDelimiter -> ArrayInitial [label=" ["]; 43 ElementDelimiter -> ObjectInitial [label="{"]; 44 ElementDelimiter -> Element [label="string\nfalse\ntrue\nnull\nnumber"]; 45 46 ObjectInitial -> ObjectFinish [label=" }"]; 47 ObjectInitial -> MemberKey [label=" string "]; 48 49 MemberKey -> KeyValueDelimiter [label=":"]; 50 51 KeyValueDelimiter -> ArrayInitial [label="["]; 52 KeyValueDelimiter -> ObjectInitial [label=" {"]; 53 KeyValueDelimiter -> MemberValue [label=" string\n false\n true\n null\n number"]; 54 55 MemberValue -> ObjectFinish [label="}"]; 56 MemberValue -> MemberDelimiter [label=","]; 57 58 MemberDelimiter -> MemberKey [label=" string "]; 59 60 ArrayFinish -> Finish; 61 ObjectFinish -> Finish; 62} 63