-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathnyaa.py
54 lines (45 loc) · 1.34 KB
/
nyaa.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import argparse
import sys
from src.Interpreter import Interpreter
from src.Lexer import Lexer
from src.Parser import Parser
from src.Repl import Repl
def parse_args() -> argparse.Namespace:
"""Custom arg parser for parsing CLI arguments"""
arg_parser = argparse.ArgumentParser()
if len(sys.argv) > 1 and not sys.argv[1].startswith("-"):
arg_parser.add_argument("src", type=str, help="The source file to translate")
arg_parser.add_argument(
"-l",
"--lexer",
action="store_true",
default=False,
help="Verbose mode for the lexer",
)
arg_parser.add_argument(
"-p",
"--parser",
action="store_true",
default=False,
help="Verbose mode for the parser",
)
arg_parser.add_argument(
"-i",
"--interpreter",
action="store_true",
default=False,
help="Verbose mode for the interpreter",
)
return arg_parser.parse_args()
def main() -> None:
args = parse_args()
lexer = Lexer(verbose=args.lexer)
parser = Parser(lexer=lexer, verbose=args.parser)
interpreter = Interpreter(verbose=args.interpreter)
if "src" not in args:
Repl(parser, interpreter).run()
else:
AST = parser.parse_source(filepath=args.src)
interpreter.interpret(AST)
if __name__ == "__main__":
main()