Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1# Generated from \DOT.g4 by ANTLR 4.9
2from antlr4 import *
3from io import StringIO
4from typing.io import TextIO
5import sys
8def serializedATN():
9 with StringIO() as buf:
10 buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\35")
11 buf.write("\u00f5\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7")
12 buf.write("\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r")
13 buf.write("\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\4\23")
14 buf.write("\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30")
15 buf.write("\4\31\t\31\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36")
16 buf.write("\t\36\3\2\3\2\3\3\3\3\3\4\3\4\3\5\3\5\3\6\3\6\3\7\3\7")
17 buf.write("\3\b\3\b\3\t\3\t\3\t\3\n\3\n\3\n\3\13\3\13\3\f\3\f\3\r")
18 buf.write("\3\r\3\r\3\r\3\r\3\r\3\r\3\16\3\16\3\16\3\16\3\16\3\16")
19 buf.write("\3\17\3\17\3\17\3\17\3\17\3\17\3\17\3\17\3\20\3\20\3\20")
20 buf.write("\3\20\3\20\3\21\3\21\3\21\3\21\3\21\3\22\3\22\3\22\3\22")
21 buf.write("\3\22\3\22\3\22\3\22\3\22\3\23\5\23\177\n\23\3\23\3\23")
22 buf.write("\6\23\u0083\n\23\r\23\16\23\u0084\3\23\6\23\u0088\n\23")
23 buf.write("\r\23\16\23\u0089\3\23\3\23\7\23\u008e\n\23\f\23\16\23")
24 buf.write("\u0091\13\23\5\23\u0093\n\23\5\23\u0095\n\23\3\24\3\24")
25 buf.write("\3\25\3\25\3\25\3\25\7\25\u009d\n\25\f\25\16\25\u00a0")
26 buf.write("\13\25\3\25\3\25\3\26\3\26\3\26\3\26\7\26\u00a8\n\26\f")
27 buf.write("\26\16\26\u00ab\13\26\3\26\3\26\3\27\3\27\7\27\u00b1\n")
28 buf.write("\27\f\27\16\27\u00b4\13\27\3\27\3\27\3\30\3\30\6\30\u00ba")
29 buf.write("\n\30\r\30\16\30\u00bb\3\30\3\30\3\31\3\31\3\31\7\31\u00c3")
30 buf.write("\n\31\f\31\16\31\u00c6\13\31\3\32\3\32\3\33\3\33\3\33")
31 buf.write("\3\33\7\33\u00ce\n\33\f\33\16\33\u00d1\13\33\3\33\3\33")
32 buf.write("\3\33\3\33\3\33\3\34\3\34\3\34\3\34\7\34\u00dc\n\34\f")
33 buf.write("\34\16\34\u00df\13\34\3\34\5\34\u00e2\n\34\3\34\3\34\3")
34 buf.write("\34\3\35\3\35\7\35\u00e9\n\35\f\35\16\35\u00ec\13\35\3")
35 buf.write("\35\3\35\3\35\3\35\3\36\3\36\3\36\3\36\b\u009e\u00a9\u00b2")
36 buf.write("\u00cf\u00dd\u00ea\2\37\3\3\5\4\7\5\t\6\13\7\r\b\17\t")
37 buf.write("\21\n\23\13\25\f\27\r\31\16\33\17\35\20\37\21!\22#\23")
38 buf.write("%\24\'\2)\25+\26-\27/\30\61\31\63\2\65\32\67\339\34;\35")
39 buf.write("\3\2\23\4\2UUuu\4\2VVvv\4\2TTtt\4\2KKkk\4\2EEee\4\2II")
40 buf.write("ii\4\2CCcc\4\2RRrr\4\2JJjj\4\2FFff\4\2PPpp\4\2QQqq\4\2")
41 buf.write("GGgg\4\2WWww\4\2DDdd\6\2C\\aac|\u0082\u0101\5\2\13\f\17")
42 buf.write("\17\"\"\2\u0105\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2")
43 buf.write("\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21")
44 buf.write("\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3")
45 buf.write("\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2")
46 buf.write("\2\2#\3\2\2\2\2%\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2")
47 buf.write("\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2")
48 buf.write("\29\3\2\2\2\2;\3\2\2\2\3=\3\2\2\2\5?\3\2\2\2\7A\3\2\2")
49 buf.write("\2\tC\3\2\2\2\13E\3\2\2\2\rG\3\2\2\2\17I\3\2\2\2\21K\3")
50 buf.write("\2\2\2\23N\3\2\2\2\25Q\3\2\2\2\27S\3\2\2\2\31U\3\2\2\2")
51 buf.write("\33\\\3\2\2\2\35b\3\2\2\2\37j\3\2\2\2!o\3\2\2\2#t\3\2")
52 buf.write("\2\2%~\3\2\2\2\'\u0096\3\2\2\2)\u0098\3\2\2\2+\u00a3\3")
53 buf.write("\2\2\2-\u00ae\3\2\2\2/\u00b7\3\2\2\2\61\u00bf\3\2\2\2")
54 buf.write("\63\u00c7\3\2\2\2\65\u00c9\3\2\2\2\67\u00d7\3\2\2\29\u00e6")
55 buf.write("\3\2\2\2;\u00f1\3\2\2\2=>\7}\2\2>\4\3\2\2\2?@\7\177\2")
56 buf.write("\2@\6\3\2\2\2AB\7=\2\2B\b\3\2\2\2CD\7?\2\2D\n\3\2\2\2")
57 buf.write("EF\7]\2\2F\f\3\2\2\2GH\7_\2\2H\16\3\2\2\2IJ\7.\2\2J\20")
58 buf.write("\3\2\2\2KL\7/\2\2LM\7@\2\2M\22\3\2\2\2NO\7/\2\2OP\7/\2")
59 buf.write("\2P\24\3\2\2\2QR\7<\2\2R\26\3\2\2\2ST\7a\2\2T\30\3\2\2")
60 buf.write("\2UV\t\2\2\2VW\t\3\2\2WX\t\4\2\2XY\t\5\2\2YZ\t\6\2\2Z")
61 buf.write("[\t\3\2\2[\32\3\2\2\2\\]\t\7\2\2]^\t\4\2\2^_\t\b\2\2_")
62 buf.write("`\t\t\2\2`a\t\n\2\2a\34\3\2\2\2bc\t\13\2\2cd\t\5\2\2d")
63 buf.write("e\t\7\2\2ef\t\4\2\2fg\t\b\2\2gh\t\t\2\2hi\t\n\2\2i\36")
64 buf.write("\3\2\2\2jk\t\f\2\2kl\t\r\2\2lm\t\13\2\2mn\t\16\2\2n \3")
65 buf.write("\2\2\2op\t\16\2\2pq\t\13\2\2qr\t\7\2\2rs\t\16\2\2s\"\3")
66 buf.write("\2\2\2tu\t\2\2\2uv\t\17\2\2vw\t\20\2\2wx\t\7\2\2xy\t\4")
67 buf.write("\2\2yz\t\b\2\2z{\t\t\2\2{|\t\n\2\2|$\3\2\2\2}\177\7/\2")
68 buf.write("\2~}\3\2\2\2~\177\3\2\2\2\177\u0094\3\2\2\2\u0080\u0082")
69 buf.write("\7\60\2\2\u0081\u0083\5\'\24\2\u0082\u0081\3\2\2\2\u0083")
70 buf.write("\u0084\3\2\2\2\u0084\u0082\3\2\2\2\u0084\u0085\3\2\2\2")
71 buf.write("\u0085\u0095\3\2\2\2\u0086\u0088\5\'\24\2\u0087\u0086")
72 buf.write("\3\2\2\2\u0088\u0089\3\2\2\2\u0089\u0087\3\2\2\2\u0089")
73 buf.write("\u008a\3\2\2\2\u008a\u0092\3\2\2\2\u008b\u008f\7\60\2")
74 buf.write("\2\u008c\u008e\5\'\24\2\u008d\u008c\3\2\2\2\u008e\u0091")
75 buf.write("\3\2\2\2\u008f\u008d\3\2\2\2\u008f\u0090\3\2\2\2\u0090")
76 buf.write("\u0093\3\2\2\2\u0091\u008f\3\2\2\2\u0092\u008b\3\2\2\2")
77 buf.write("\u0092\u0093\3\2\2\2\u0093\u0095\3\2\2\2\u0094\u0080\3")
78 buf.write("\2\2\2\u0094\u0087\3\2\2\2\u0095&\3\2\2\2\u0096\u0097")
79 buf.write("\4\62;\2\u0097(\3\2\2\2\u0098\u009e\7$\2\2\u0099\u009a")
80 buf.write("\7^\2\2\u009a\u009d\7$\2\2\u009b\u009d\13\2\2\2\u009c")
81 buf.write("\u0099\3\2\2\2\u009c\u009b\3\2\2\2\u009d\u00a0\3\2\2\2")
82 buf.write("\u009e\u009f\3\2\2\2\u009e\u009c\3\2\2\2\u009f\u00a1\3")
83 buf.write("\2\2\2\u00a0\u009e\3\2\2\2\u00a1\u00a2\7$\2\2\u00a2*\3")
84 buf.write("\2\2\2\u00a3\u00a9\7>\2\2\u00a4\u00a8\5-\27\2\u00a5\u00a8")
85 buf.write("\5/\30\2\u00a6\u00a8\13\2\2\2\u00a7\u00a4\3\2\2\2\u00a7")
86 buf.write("\u00a5\3\2\2\2\u00a7\u00a6\3\2\2\2\u00a8\u00ab\3\2\2\2")
87 buf.write("\u00a9\u00aa\3\2\2\2\u00a9\u00a7\3\2\2\2\u00aa\u00ac\3")
88 buf.write("\2\2\2\u00ab\u00a9\3\2\2\2\u00ac\u00ad\7@\2\2\u00ad,\3")
89 buf.write("\2\2\2\u00ae\u00b2\7>\2\2\u00af\u00b1\13\2\2\2\u00b0\u00af")
90 buf.write("\3\2\2\2\u00b1\u00b4\3\2\2\2\u00b2\u00b3\3\2\2\2\u00b2")
91 buf.write("\u00b0\3\2\2\2\u00b3\u00b5\3\2\2\2\u00b4\u00b2\3\2\2\2")
92 buf.write("\u00b5\u00b6\7@\2\2\u00b6.\3\2\2\2\u00b7\u00b9\7(\2\2")
93 buf.write("\u00b8\u00ba\5\63\32\2\u00b9\u00b8\3\2\2\2\u00ba\u00bb")
94 buf.write("\3\2\2\2\u00bb\u00b9\3\2\2\2\u00bb\u00bc\3\2\2\2\u00bc")
95 buf.write("\u00bd\3\2\2\2\u00bd\u00be\7=\2\2\u00be\60\3\2\2\2\u00bf")
96 buf.write("\u00c4\5\63\32\2\u00c0\u00c3\5\63\32\2\u00c1\u00c3\5\'")
97 buf.write("\24\2\u00c2\u00c0\3\2\2\2\u00c2\u00c1\3\2\2\2\u00c3\u00c6")
98 buf.write("\3\2\2\2\u00c4\u00c2\3\2\2\2\u00c4\u00c5\3\2\2\2\u00c5")
99 buf.write("\62\3\2\2\2\u00c6\u00c4\3\2\2\2\u00c7\u00c8\t\21\2\2\u00c8")
100 buf.write("\64\3\2\2\2\u00c9\u00ca\7\61\2\2\u00ca\u00cb\7,\2\2\u00cb")
101 buf.write("\u00cf\3\2\2\2\u00cc\u00ce\13\2\2\2\u00cd\u00cc\3\2\2")
102 buf.write("\2\u00ce\u00d1\3\2\2\2\u00cf\u00d0\3\2\2\2\u00cf\u00cd")
103 buf.write("\3\2\2\2\u00d0\u00d2\3\2\2\2\u00d1\u00cf\3\2\2\2\u00d2")
104 buf.write("\u00d3\7,\2\2\u00d3\u00d4\7\61\2\2\u00d4\u00d5\3\2\2\2")
105 buf.write("\u00d5\u00d6\b\33\2\2\u00d6\66\3\2\2\2\u00d7\u00d8\7\61")
106 buf.write("\2\2\u00d8\u00d9\7\61\2\2\u00d9\u00dd\3\2\2\2\u00da\u00dc")
107 buf.write("\13\2\2\2\u00db\u00da\3\2\2\2\u00dc\u00df\3\2\2\2\u00dd")
108 buf.write("\u00de\3\2\2\2\u00dd\u00db\3\2\2\2\u00de\u00e1\3\2\2\2")
109 buf.write("\u00df\u00dd\3\2\2\2\u00e0\u00e2\7\17\2\2\u00e1\u00e0")
110 buf.write("\3\2\2\2\u00e1\u00e2\3\2\2\2\u00e2\u00e3\3\2\2\2\u00e3")
111 buf.write("\u00e4\7\f\2\2\u00e4\u00e5\b\34\3\2\u00e58\3\2\2\2\u00e6")
112 buf.write("\u00ea\7%\2\2\u00e7\u00e9\13\2\2\2\u00e8\u00e7\3\2\2\2")
113 buf.write("\u00e9\u00ec\3\2\2\2\u00ea\u00eb\3\2\2\2\u00ea\u00e8\3")
114 buf.write("\2\2\2\u00eb\u00ed\3\2\2\2\u00ec\u00ea\3\2\2\2\u00ed\u00ee")
115 buf.write("\7\f\2\2\u00ee\u00ef\3\2\2\2\u00ef\u00f0\b\35\4\2\u00f0")
116 buf.write(":\3\2\2\2\u00f1\u00f2\t\22\2\2\u00f2\u00f3\3\2\2\2\u00f3")
117 buf.write("\u00f4\b\36\4\2\u00f4<\3\2\2\2\25\2~\u0084\u0089\u008f")
118 buf.write("\u0092\u0094\u009c\u009e\u00a7\u00a9\u00b2\u00bb\u00c2")
119 buf.write("\u00c4\u00cf\u00dd\u00e1\u00ea\5\3\33\2\3\34\3\b\2\2")
120 return buf.getvalue()
123class DOTLexer(Lexer):
125 atn = ATNDeserializer().deserialize(serializedATN())
127 decisionsToDFA = [DFA(ds, i) for i, ds in enumerate(atn.decisionToState)]
129 T__0 = 1
130 T__1 = 2
131 T__2 = 3
132 T__3 = 4
133 T__4 = 5
134 T__5 = 6
135 T__6 = 7
136 T__7 = 8
137 T__8 = 9
138 T__9 = 10
139 T__10 = 11
140 STRICT = 12
141 GRAPH = 13
142 DIGRAPH = 14
143 NODE = 15
144 EDGE = 16
145 SUBGRAPH = 17
146 NUMBER = 18
147 STRING = 19
148 HTML_STRING = 20
149 TAG = 21
150 EntityRef = 22
151 ID = 23
152 COMMENT = 24
153 LINE_COMMENT = 25
154 PREPROC = 26
155 WS = 27
157 channelNames = [u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN"]
159 modeNames = ["DEFAULT_MODE"]
161 literalNames = ["<INVALID>",
162 "'{'", "'}'", "';'", "'='", "'['", "']'", "','", "'->'", "'--'",
163 "':'", "'_'"]
165 symbolicNames = ["<INVALID>",
166 "STRICT", "GRAPH", "DIGRAPH", "NODE", "EDGE", "SUBGRAPH", "NUMBER",
167 "STRING", "HTML_STRING", "TAG", "EntityRef", "ID", "COMMENT",
168 "LINE_COMMENT", "PREPROC", "WS"]
170 ruleNames = ["T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "T__6",
171 "T__7", "T__8", "T__9", "T__10", "STRICT", "GRAPH", "DIGRAPH",
172 "NODE", "EDGE", "SUBGRAPH", "NUMBER", "DIGIT", "STRING",
173 "HTML_STRING", "TAG", "EntityRef", "ID", "LETTER", "COMMENT",
174 "LINE_COMMENT", "PREPROC", "WS"]
176 grammarFileName = "DOT.g4"
178 def __init__(self, input=None, output: TextIO = sys.stdout):
179 super().__init__(input, output)
180 self.checkVersion("4.9")
181 self._interp = LexerATNSimulator(
182 self, self.atn, self.decisionsToDFA, PredictionContextCache())
183 self._actions = None
184 self._predicates = None
186 def action(self, localctx: RuleContext, ruleIndex: int, actionIndex: int):
187 if self._actions is None:
188 actions = dict()
189 actions[25] = self.COMMENT_action
190 actions[26] = self.LINE_COMMENT_action
191 self._actions = actions
192 action = self._actions.get(ruleIndex, None)
193 if action is not None:
194 action(localctx, actionIndex)
195 else:
196 raise Exception("No registered action for:" + str(ruleIndex))
198 def COMMENT_action(self, localctx: RuleContext, actionIndex: int):
199 if actionIndex == 0:
200 skip()
202 def LINE_COMMENT_action(self, localctx: RuleContext, actionIndex: int):
203 if actionIndex == 1:
204 skip()