jaclang 0.0.1__py3-none-any.whl → 0.0.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of jaclang might be problematic. Click here for more details.

Files changed (73) hide show
  1. jaclang/__init__.py +4 -0
  2. jaclang/cli/__init__.py +7 -0
  3. jaclang/cli/cli.jac +46 -0
  4. jaclang/cli/cmds.jac +14 -0
  5. jaclang/cli/impl/__init__.py +1 -0
  6. jaclang/cli/impl/cli_impl.jac +93 -0
  7. jaclang/cli/impl/cmds_impl.jac +26 -0
  8. jaclang/core/__init__.py +12 -0
  9. jaclang/core/impl/__init__.py +1 -0
  10. jaclang/core/impl/arch_impl.jac +112 -0
  11. jaclang/core/impl/element_impl.jac +95 -0
  12. jaclang/core/impl/exec_ctx_impl.jac +17 -0
  13. jaclang/core/impl/memory_impl.jac +57 -0
  14. jaclang/core/primitives.jac +104 -0
  15. jaclang/jac/__init__.py +1 -0
  16. jaclang/jac/absyntree.py +1787 -0
  17. jaclang/jac/constant.py +46 -0
  18. jaclang/jac/importer.py +130 -0
  19. jaclang/jac/lexer.py +538 -0
  20. jaclang/jac/parser.py +1474 -0
  21. jaclang/jac/passes/__init__.py +5 -0
  22. jaclang/jac/passes/blue/__init__.py +25 -0
  23. jaclang/jac/passes/blue/ast_build_pass.py +3190 -0
  24. jaclang/jac/passes/blue/blue_pygen_pass.py +1335 -0
  25. jaclang/jac/passes/blue/decl_def_match_pass.py +278 -0
  26. jaclang/jac/passes/blue/import_pass.py +75 -0
  27. jaclang/jac/passes/blue/sub_node_tab_pass.py +30 -0
  28. jaclang/jac/passes/blue/tests/__init__.py +1 -0
  29. jaclang/jac/passes/blue/tests/test_ast_build_pass.py +61 -0
  30. jaclang/jac/passes/blue/tests/test_blue_pygen_pass.py +117 -0
  31. jaclang/jac/passes/blue/tests/test_decl_def_match_pass.py +43 -0
  32. jaclang/jac/passes/blue/tests/test_import_pass.py +18 -0
  33. jaclang/jac/passes/blue/tests/test_sub_node_pass.py +26 -0
  34. jaclang/jac/passes/blue/tests/test_type_analyze_pass.py +53 -0
  35. jaclang/jac/passes/blue/type_analyze_pass.py +731 -0
  36. jaclang/jac/passes/ir_pass.py +154 -0
  37. jaclang/jac/passes/purple/__init__.py +17 -0
  38. jaclang/jac/passes/purple/impl/__init__.py +1 -0
  39. jaclang/jac/passes/purple/impl/purple_pygen_pass_impl.jac +289 -0
  40. jaclang/jac/passes/purple/purple_pygen_pass.jac +35 -0
  41. jaclang/jac/sym_table.py +127 -0
  42. jaclang/jac/tests/__init__.py +1 -0
  43. jaclang/jac/tests/fixtures/__init__.py +1 -0
  44. jaclang/jac/tests/fixtures/activity.py +10 -0
  45. jaclang/jac/tests/fixtures/fam.jac +68 -0
  46. jaclang/jac/tests/fixtures/hello_world.jac +5 -0
  47. jaclang/jac/tests/fixtures/lexer_fam.jac +61 -0
  48. jaclang/jac/tests/fixtures/stuff.jac +6 -0
  49. jaclang/jac/tests/test_importer.py +24 -0
  50. jaclang/jac/tests/test_lexer.py +57 -0
  51. jaclang/jac/tests/test_parser.py +50 -0
  52. jaclang/jac/tests/test_utils.py +12 -0
  53. jaclang/jac/transform.py +63 -0
  54. jaclang/jac/transpiler.py +69 -0
  55. jaclang/jac/utils.py +120 -0
  56. jaclang/utils/__init__.py +1 -0
  57. jaclang/utils/fstring_parser.py +73 -0
  58. jaclang/utils/log.py +9 -0
  59. jaclang/utils/sly/__init__.py +6 -0
  60. jaclang/utils/sly/docparse.py +62 -0
  61. jaclang/utils/sly/lex.py +510 -0
  62. jaclang/utils/sly/yacc.py +2398 -0
  63. jaclang/utils/test.py +81 -0
  64. jaclang/utils/tests/__init__.py +1 -0
  65. jaclang/utils/tests/test_fstring_parser.py +55 -0
  66. jaclang-0.0.3.dist-info/METADATA +12 -0
  67. jaclang-0.0.3.dist-info/RECORD +70 -0
  68. {jaclang-0.0.1.dist-info → jaclang-0.0.3.dist-info}/WHEEL +1 -1
  69. jaclang-0.0.3.dist-info/entry_points.txt +3 -0
  70. jaclang-0.0.3.dist-info/top_level.txt +1 -0
  71. jaclang-0.0.1.dist-info/METADATA +0 -7
  72. jaclang-0.0.1.dist-info/RECORD +0 -4
  73. jaclang-0.0.1.dist-info/top_level.txt +0 -1
jaclang/jac/lexer.py ADDED
@@ -0,0 +1,538 @@
1
+ """Lexer for Jac language."""
2
+ from enum import Enum
3
+ from typing import Generator
4
+
5
+ from jaclang.jac.transform import ABCLexerMeta, Transform
6
+ from jaclang.utils.sly.lex import Lexer, Token
7
+
8
+
9
+ class JacLexer(Lexer, Transform, metaclass=ABCLexerMeta):
10
+ """Jac Lexer."""
11
+
12
+ def __init__(
13
+ self, mod_path: str, input_ir: str, base_path: str = "", prior: Transform = None
14
+ ) -> None:
15
+ """Initialize lexer."""
16
+ Transform.__init__(self, mod_path, input_ir, base_path, prior) # type: ignore
17
+ self.ir: Generator = self.ir
18
+
19
+ tokens = {
20
+ "FLOAT",
21
+ "STRING",
22
+ "DOC_STRING",
23
+ "FSTRING",
24
+ "BOOL",
25
+ "INT",
26
+ "HEX",
27
+ "BIN",
28
+ "OCT",
29
+ "NULL",
30
+ "NAME",
31
+ "TYP_STRING",
32
+ "TYP_INT",
33
+ "TYP_FLOAT",
34
+ "TYP_LIST",
35
+ "TYP_TUPLE",
36
+ "TYP_SET",
37
+ "TYP_DICT",
38
+ "TYP_BOOL",
39
+ "TYP_BYTES",
40
+ "TYP_ANY",
41
+ "TYP_TYPE",
42
+ "KW_FREEZE",
43
+ "KW_OBJECT",
44
+ "KW_ENUM",
45
+ "KW_NODE",
46
+ "KW_IGNORE",
47
+ "KW_VISIT",
48
+ "KW_REVISIT",
49
+ "KW_SPAWN",
50
+ "KW_WITH",
51
+ "KW_ENTRY",
52
+ "KW_EXIT",
53
+ "KW_IMPORT",
54
+ "KW_INCLUDE",
55
+ "KW_FROM",
56
+ "KW_AS",
57
+ "KW_EDGE",
58
+ "KW_WALKER",
59
+ "KW_ASYNC",
60
+ "KW_AWAIT",
61
+ "KW_TEST",
62
+ "KW_ASSERT",
63
+ "COLON",
64
+ "PIPE_FWD",
65
+ "PIPE_BKWD",
66
+ "DOT_FWD",
67
+ "DOT_BKWD",
68
+ "LBRACE",
69
+ "RBRACE",
70
+ "SEMI",
71
+ "EQ",
72
+ "ADD_EQ",
73
+ "SUB_EQ",
74
+ "MUL_EQ",
75
+ "FLOOR_DIV_EQ",
76
+ "DIV_EQ",
77
+ "MOD_EQ",
78
+ "BW_AND_EQ",
79
+ "BW_OR_EQ",
80
+ "BW_XOR_EQ",
81
+ "BW_NOT_EQ",
82
+ "LSHIFT_EQ",
83
+ "RSHIFT_EQ",
84
+ "WALRUS_EQ",
85
+ "KW_AND",
86
+ "KW_OR",
87
+ "KW_IF",
88
+ "KW_ELIF",
89
+ "KW_ELSE",
90
+ "KW_FOR",
91
+ "KW_TO",
92
+ "KW_BY",
93
+ "KW_WHILE",
94
+ "KW_CONTINUE",
95
+ "KW_BREAK",
96
+ "KW_DISENGAGE",
97
+ "KW_YIELD",
98
+ "KW_SKIP",
99
+ "KW_REPORT",
100
+ "KW_RETURN",
101
+ "KW_DELETE",
102
+ "KW_TRY",
103
+ "KW_EXCEPT",
104
+ "KW_FINALLY",
105
+ "KW_RAISE",
106
+ "DOT",
107
+ "NOT",
108
+ "EE",
109
+ "LT",
110
+ "GT",
111
+ "LTE",
112
+ "GTE",
113
+ "NE",
114
+ "KW_IN",
115
+ "KW_IS",
116
+ "KW_NIN",
117
+ "KW_ISN",
118
+ "KW_PRIV",
119
+ "KW_PUB",
120
+ "KW_PROT",
121
+ "KW_HAS",
122
+ "KW_GLOBAL",
123
+ "COMMA",
124
+ "KW_CAN",
125
+ "KW_STATIC",
126
+ "PLUS",
127
+ "MINUS",
128
+ "STAR_MUL",
129
+ "FLOOR_DIV",
130
+ "DIV",
131
+ "MOD",
132
+ "BW_AND",
133
+ "BW_OR",
134
+ "BW_XOR",
135
+ "BW_NOT",
136
+ "LSHIFT",
137
+ "RSHIFT",
138
+ "STAR_POW",
139
+ "LPAREN",
140
+ "RPAREN",
141
+ "LSQUARE",
142
+ "RSQUARE",
143
+ "ARROW_L",
144
+ "ARROW_R",
145
+ "ARROW_BI",
146
+ "ARROW_L_p1",
147
+ "ARROW_L_p2",
148
+ "ARROW_R_p1",
149
+ "ARROW_R_p2",
150
+ "CARROW_L",
151
+ "CARROW_R",
152
+ "CARROW_L_p1",
153
+ "CARROW_L_p2",
154
+ "CARROW_R_p1",
155
+ "CARROW_R_p2",
156
+ "GLOBAL_OP",
157
+ "HERE_OP",
158
+ "SELF_OP",
159
+ "SUPER_OP",
160
+ "ROOT_OP",
161
+ "WALKER_OP",
162
+ "NODE_OP",
163
+ "EDGE_OP",
164
+ "OBJECT_OP",
165
+ "ENUM_OP",
166
+ "ABILITY_OP",
167
+ "A_PIPE_FWD",
168
+ "A_PIPE_BKWD",
169
+ "ELVIS_OP",
170
+ "RETURN_HINT",
171
+ "NULL_OK",
172
+ "DECOR_OP",
173
+ }
174
+
175
+ # Ignored patterns
176
+ ignore_ws = r"[ \t]+"
177
+ ignore_newline = r"[\r\n]+" # type: ignore
178
+ ignore_comment = r"#\*(.|\n|\r)*?\*#" # type: ignore
179
+ ignore_py_comment = r"#.*"
180
+
181
+ # Regular expression rules for tokens
182
+ FLOAT = r"(\d+(\.\d*)?|\.\d+)([eE][+-]?\d+)?"
183
+ DOC_STRING = r'"""(.|\n|\r)*?"""|\'\'\'(.|\n|\r)*?\'\'\'' # type: ignore
184
+ FSTRING = r'f"[^"\r\n]*"|f\'[^\'\r\n]*\''
185
+ STRING = r'"[^"\r\n]*"|\'[^\'\r\n]*\''
186
+ BOOL = r"True|False"
187
+ KW_NIN = r"\bnot\s+in\b"
188
+ KW_ISN = r"\bis\s+not\b"
189
+ HEX = r"0[xX][0-9a-fA-F_]+"
190
+ BIN = r"0[bB][01_]+"
191
+ OCT = r"0[oO][0-7_]+"
192
+ INT = r"[0-9][0-9_]*"
193
+ NULL = r"None"
194
+ NAME = r"[a-zA-Z_][a-zA-Z0-9_]*"
195
+
196
+ # Keywords
197
+ NAME["str"] = "TYP_STRING" # type: ignore
198
+ NAME["int"] = "TYP_INT" # type: ignore
199
+ NAME["float"] = "TYP_FLOAT" # type: ignore
200
+ NAME["list"] = "TYP_LIST" # type: ignore
201
+ NAME["tuple"] = "TYP_TUPLE" # type: ignore
202
+ NAME["set"] = "TYP_SET" # type: ignore
203
+ NAME["dict"] = "TYP_DICT" # type: ignore
204
+ NAME["bool"] = "TYP_BOOL" # type: ignore
205
+ NAME["bytes"] = "TYP_BYTES" # type: ignore
206
+ NAME["any"] = "TYP_ANY" # type: ignore
207
+ NAME["type"] = "TYP_TYPE" # type: ignore
208
+ NAME["freeze"] = "KW_FREEZE" # type: ignore
209
+ NAME["object"] = "KW_OBJECT" # type: ignore
210
+ NAME["enum"] = "KW_ENUM" # type: ignore
211
+ NAME["node"] = "KW_NODE" # type: ignore
212
+ NAME["ignore"] = "KW_IGNORE" # type: ignore
213
+ NAME["visit"] = "KW_VISIT" # type: ignore
214
+ NAME["revisit"] = "KW_REVISIT" # type: ignore
215
+ NAME["spawn"] = "KW_SPAWN" # type: ignore
216
+ NAME["with"] = "KW_WITH" # type: ignore
217
+ NAME["entry"] = "KW_ENTRY" # type: ignore
218
+ NAME["exit"] = "KW_EXIT" # type: ignore
219
+ NAME["import"] = "KW_IMPORT" # type: ignore
220
+ NAME["include"] = "KW_INCLUDE" # type: ignore
221
+ NAME["from"] = "KW_FROM" # type: ignore
222
+ NAME["as"] = "KW_AS" # type: ignore
223
+ NAME["edge"] = "KW_EDGE" # type: ignore
224
+ NAME["walker"] = "KW_WALKER" # type: ignore
225
+ NAME["async"] = "KW_ASYNC" # type: ignore
226
+ NAME["await"] = "KW_AWAIT" # type: ignore
227
+ NAME["test"] = "KW_TEST" # type: ignore
228
+ NAME["assert"] = "KW_ASSERT" # type: ignore
229
+ NAME["and"] = "KW_AND" # type: ignore
230
+ NAME["or"] = "KW_OR" # type: ignore
231
+ NAME["if"] = "KW_IF" # type: ignore
232
+ NAME["elif"] = "KW_ELIF" # type: ignore
233
+ NAME["else"] = "KW_ELSE" # type: ignore
234
+ NAME["for"] = "KW_FOR" # type: ignore
235
+ NAME["to"] = "KW_TO" # type: ignore
236
+ NAME["by"] = "KW_BY" # type: ignore
237
+ NAME["while"] = "KW_WHILE" # type: ignore
238
+ NAME["continue"] = "KW_CONTINUE" # type: ignore
239
+ NAME["break"] = "KW_BREAK" # type: ignore
240
+ NAME["disengage"] = "KW_DISENGAGE" # type: ignore
241
+ NAME["yield"] = "KW_YIELD" # type: ignore
242
+ NAME["skip"] = "KW_SKIP" # type: ignore
243
+ NAME["report"] = "KW_REPORT" # type: ignore
244
+ NAME["return"] = "KW_RETURN" # type: ignore
245
+ NAME["del"] = "KW_DELETE" # type: ignore
246
+ NAME["try"] = "KW_TRY" # type: ignore
247
+ NAME["except"] = "KW_EXCEPT" # type: ignore
248
+ NAME["finally"] = "KW_FINALLY" # type: ignore
249
+ NAME["raise"] = "KW_RAISE" # type: ignore
250
+ NAME["in"] = "KW_IN" # type: ignore
251
+ NAME["is"] = "KW_IS" # type: ignore
252
+ NAME["not"] = "NOT" # type: ignore
253
+ NAME["private"] = "KW_PRIV" # type: ignore
254
+ NAME["public"] = "KW_PUB" # type: ignore
255
+ NAME["protected"] = "KW_PROT" # type: ignore
256
+ NAME["has"] = "KW_HAS" # type: ignore
257
+ NAME["global"] = "KW_GLOBAL" # type: ignore
258
+ NAME["can"] = "KW_CAN" # type: ignore
259
+ NAME["static"] = "KW_STATIC" # type: ignore
260
+
261
+ # Special Arrow Tokens
262
+ ARROW_L = r"<--"
263
+ ARROW_R = r"-->"
264
+ ARROW_BI = r"<-->"
265
+ ARROW_L_p1 = r"<-\["
266
+ ARROW_L_p2 = r"]-"
267
+ ARROW_R_p1 = r"-\["
268
+ ARROW_R_p2 = r"]->"
269
+ CARROW_L = r"<\+\+"
270
+ CARROW_R = r"\+\+>"
271
+ CARROW_L_p1 = r"<\+\["
272
+ CARROW_R_p2 = r"]\+>"
273
+ CARROW_L_p2 = r"]\+"
274
+ CARROW_R_p1 = r"\+\["
275
+
276
+ # Just special
277
+ GLOBAL_OP = r":g:|:global:"
278
+ HERE_OP = r"<h>|<here>"
279
+ SELF_OP = r"<s>|<self>"
280
+ SUPER_OP = r"<super>"
281
+ ROOT_OP = r"<r>|<root>"
282
+ WALKER_OP = r":w:|:walker:"
283
+ NODE_OP = r":n:|:node:"
284
+ EDGE_OP = r":e:|:edge:"
285
+ OBJECT_OP = r":o:|:object:"
286
+ ENUM_OP = r":enum:"
287
+ ABILITY_OP = r":a:|:ability:"
288
+ A_PIPE_FWD = r":>"
289
+ A_PIPE_BKWD = r"<:"
290
+ PIPE_FWD = r"\|>"
291
+ PIPE_BKWD = r"<\|"
292
+ DOT_FWD = r"\.>"
293
+ DOT_BKWD = r"<\."
294
+ RETURN_HINT = r"->"
295
+ ELVIS_OP = r"\?:"
296
+ NULL_OK = r"\?"
297
+ DECOR_OP = r"@"
298
+
299
+ # Token rules
300
+ KW_AND = r"&&"
301
+ KW_OR = r"\|\|"
302
+ ADD_EQ = r"\+="
303
+ SUB_EQ = r"-="
304
+ MUL_EQ = r"\*="
305
+ FLOOR_DIV_EQ = r"//="
306
+ DIV_EQ = r"/="
307
+ MOD_EQ = r"%="
308
+ BW_AND_EQ = r"&="
309
+ BW_OR_EQ = r"\|="
310
+ BW_XOR_EQ = r"\^="
311
+ BW_NOT_EQ = r"~="
312
+ LSHIFT_EQ = r"<<="
313
+ RSHIFT_EQ = r">>="
314
+ LSHIFT = r"<<"
315
+ RSHIFT = r">>"
316
+ LTE = r"<="
317
+ GTE = r">="
318
+ NE = r"!="
319
+ NOT = r"!"
320
+ WALRUS_EQ = r":="
321
+ COLON = r":"
322
+ LBRACE = r"{"
323
+ RBRACE = r"}"
324
+ SEMI = r";"
325
+ EE = r"=="
326
+ EQ = r"="
327
+ DOT = r"\."
328
+ LT = r"<"
329
+ GT = r">"
330
+ COMMA = r","
331
+ PLUS = r"\+"
332
+ MINUS = r"-"
333
+ STAR_POW = r"\*\*"
334
+ STAR_MUL = r"\*"
335
+ FLOOR_DIV = r"//"
336
+ DIV = r"/"
337
+ MOD = r"%"
338
+ BW_AND = r"&"
339
+ BW_OR = r"\|"
340
+ BW_XOR = r"\^"
341
+ BW_NOT = r"~"
342
+ LPAREN = r"\("
343
+ RPAREN = r"\)"
344
+ LSQUARE = r"\["
345
+ RSQUARE = r"\]"
346
+
347
+ def ignore_newline(self, t: Token) -> Token:
348
+ """Increment line number."""
349
+ self.lineno += len(t.value)
350
+ return t
351
+
352
+ def ignore_comment(self, t: Token) -> Token: # noqa: N802
353
+ """Add docstring to lexer."""
354
+ self.lineno += t.value.count("\n")
355
+ self.lineno += t.value.count("\r")
356
+ return t
357
+
358
+ def DOC_STRING(self, t: Token) -> Token: # noqa: N802
359
+ """Add docstring to lexer."""
360
+ self.lineno += t.value.count("\n")
361
+ self.lineno += t.value.count("\r")
362
+ return t
363
+
364
+ # Transform Implementations
365
+ # -------------------------
366
+ def transform(self, ir: str) -> Generator:
367
+ """Tokenize the input."""
368
+ return self.tokenize(ir)
369
+
370
+ def error(self, t: Token) -> None:
371
+ """Raise an error for illegal characters."""
372
+ self.cur_line = self.lineno
373
+ self.log_error(msg=f"Illegal character '{t.value[0]}'")
374
+ self.index += 1
375
+
376
+
377
+ # Done like this for type checker
378
+ # validated synced with test
379
+ class Tokens(str, Enum):
380
+ """Token constants for the lexer."""
381
+
382
+ FLOAT = "FLOAT"
383
+ STRING = "STRING"
384
+ DOC_STRING = "DOC_STRING"
385
+ FSTRING = "FSTRING"
386
+ BOOL = "BOOL"
387
+ INT = "INT"
388
+ HEX = "HEX"
389
+ BIN = "BIN"
390
+ OCT = "OCT"
391
+ NULL = "NULL"
392
+ NAME = "NAME"
393
+ TYP_STRING = "TYP_STRING"
394
+ TYP_INT = "TYP_INT"
395
+ TYP_FLOAT = "TYP_FLOAT"
396
+ TYP_LIST = "TYP_LIST"
397
+ TYP_TUPLE = "TYP_TUPLE"
398
+ TYP_SET = "TYP_SET"
399
+ TYP_DICT = "TYP_DICT"
400
+ TYP_BOOL = "TYP_BOOL"
401
+ TYP_BYTES = "TYP_BYTES"
402
+ TYP_ANY = "TYP_ANY"
403
+ TYP_TYPE = "TYP_TYPE"
404
+ KW_FREEZE = "KW_FREEZE"
405
+ KW_OBJECT = "KW_OBJECT"
406
+ KW_ENUM = "KW_ENUM"
407
+ KW_NODE = "KW_NODE"
408
+ KW_IGNORE = "KW_IGNORE"
409
+ KW_VISIT = "KW_VISIT"
410
+ KW_REVISIT = "KW_REVISIT"
411
+ KW_SPAWN = "KW_SPAWN"
412
+ KW_WITH = "KW_WITH"
413
+ KW_ENTRY = "KW_ENTRY"
414
+ KW_EXIT = "KW_EXIT"
415
+ KW_IMPORT = "KW_IMPORT"
416
+ KW_INCLUDE = "KW_INCLUDE"
417
+ KW_FROM = "KW_FROM"
418
+ KW_AS = "KW_AS"
419
+ KW_EDGE = "KW_EDGE"
420
+ KW_WALKER = "KW_WALKER"
421
+ KW_ASYNC = "KW_ASYNC"
422
+ KW_AWAIT = "KW_AWAIT"
423
+ KW_TEST = "KW_TEST"
424
+ KW_ASSERT = "KW_ASSERT"
425
+ COLON = "COLON"
426
+ PIPE_FWD = "PIPE_FWD"
427
+ PIPE_BKWD = "PIPE_BKWD"
428
+ DOT_FWD = "DOT_FWD"
429
+ DOT_BKWD = "DOT_BKWD"
430
+ LBRACE = "LBRACE"
431
+ RBRACE = "RBRACE"
432
+ SEMI = "SEMI"
433
+ EQ = "EQ"
434
+ ADD_EQ = "ADD_EQ"
435
+ SUB_EQ = "SUB_EQ"
436
+ MUL_EQ = "MUL_EQ"
437
+ FLOOR_DIV_EQ = "FLOOR_DIV_EQ"
438
+ DIV_EQ = "DIV_EQ"
439
+ MOD_EQ = "MOD_EQ"
440
+ BW_AND_EQ = "BW_AND_EQ"
441
+ BW_OR_EQ = "BW_OR_EQ"
442
+ BW_XOR_EQ = "BW_XOR_EQ"
443
+ BW_NOT_EQ = "BW_NOT_EQ"
444
+ LSHIFT_EQ = "LSHIFT_EQ"
445
+ RSHIFT_EQ = "RSHIFT_EQ"
446
+ WALRUS_EQ = "WALRUS_EQ"
447
+ KW_AND = "KW_AND"
448
+ KW_OR = "KW_OR"
449
+ KW_IF = "KW_IF"
450
+ KW_ELIF = "KW_ELIF"
451
+ KW_ELSE = "KW_ELSE"
452
+ KW_FOR = "KW_FOR"
453
+ KW_TO = "KW_TO"
454
+ KW_BY = "KW_BY"
455
+ KW_WHILE = "KW_WHILE"
456
+ KW_CONTINUE = "KW_CONTINUE"
457
+ KW_BREAK = "KW_BREAK"
458
+ KW_DISENGAGE = "KW_DISENGAGE"
459
+ KW_YIELD = "KW_YIELD"
460
+ KW_SKIP = "KW_SKIP"
461
+ KW_REPORT = "KW_REPORT"
462
+ KW_RETURN = "KW_RETURN"
463
+ KW_DELETE = "KW_DELETE"
464
+ KW_TRY = "KW_TRY"
465
+ KW_EXCEPT = "KW_EXCEPT"
466
+ KW_FINALLY = "KW_FINALLY"
467
+ KW_RAISE = "KW_RAISE"
468
+ DOT = "DOT"
469
+ NOT = "NOT"
470
+ EE = "EE"
471
+ LT = "LT"
472
+ GT = "GT"
473
+ LTE = "LTE"
474
+ GTE = "GTE"
475
+ NE = "NE"
476
+ KW_IN = "KW_IN"
477
+ KW_IS = "KW_IS"
478
+ KW_NIN = "KW_NIN"
479
+ KW_ISN = "KW_ISN"
480
+ KW_PRIV = "KW_PRIV"
481
+ KW_PUB = "KW_PUB"
482
+ KW_PROT = "KW_PROT"
483
+ KW_HAS = "KW_HAS"
484
+ KW_GLOBAL = "KW_GLOBAL"
485
+ COMMA = "COMMA"
486
+ KW_CAN = "KW_CAN"
487
+ KW_STATIC = "KW_STATIC"
488
+ PLUS = "PLUS"
489
+ MINUS = "MINUS"
490
+ STAR_MUL = "STAR_MUL"
491
+ FLOOR_DIV = "FLOOR_DIV"
492
+ DIV = "DIV"
493
+ MOD = "MOD"
494
+ BW_AND = "BW_AND"
495
+ BW_OR = "BW_OR"
496
+ BW_XOR = "BW_XOR"
497
+ BW_NOT = "BW_NOT"
498
+ LSHIFT = "LSHIFT"
499
+ RSHIFT = "RSHIFT"
500
+ STAR_POW = "STAR_POW"
501
+ LPAREN = "LPAREN"
502
+ RPAREN = "RPAREN"
503
+ LSQUARE = "LSQUARE"
504
+ RSQUARE = "RSQUARE"
505
+ ARROW_L = "ARROW_L"
506
+ ARROW_R = "ARROW_R"
507
+ ARROW_BI = "ARROW_BI"
508
+ ARROW_L_p1 = "ARROW_L_p1"
509
+ ARROW_L_p2 = "ARROW_L_p2"
510
+ ARROW_R_p1 = "ARROW_R_p1"
511
+ ARROW_R_p2 = "ARROW_R_p2"
512
+ CARROW_L = "CARROW_L"
513
+ CARROW_R = "CARROW_R"
514
+ CARROW_L_p1 = "CARROW_L_p1"
515
+ CARROW_L_p2 = "CARROW_L_p2"
516
+ CARROW_R_p1 = "CARROW_R_p1"
517
+ CARROW_R_p2 = "CARROW_R_p2"
518
+ GLOBAL_OP = "GLOBAL_OP"
519
+ HERE_OP = "HERE_OP"
520
+ SELF_OP = "SELF_OP"
521
+ SUPER_OP = "SUPER_OP"
522
+ ROOT_OP = "ROOT_OP"
523
+ WALKER_OP = "WALKER_OP"
524
+ NODE_OP = "NODE_OP"
525
+ EDGE_OP = "EDGE_OP"
526
+ OBJECT_OP = "OBJECT_OP"
527
+ ENUM_OP = "ENUM_OP"
528
+ ABILITY_OP = "ABILITY_OP"
529
+ A_PIPE_FWD = "A_PIPE_FWD"
530
+ A_PIPE_BKWD = "A_PIPE_BKWD"
531
+ ELVIS_OP = "ELVIS_OP"
532
+ RETURN_HINT = "RETURN_HINT"
533
+ NULL_OK = "NULL_OK"
534
+ DECOR_OP = "DECOR_OP"
535
+
536
+ def __str__(self) -> str:
537
+ """Return the string representation of the token."""
538
+ return self.value