-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
50 lines (42 loc) · 1.2 KB
/
Copy pathmain.py
File metadata and controls
50 lines (42 loc) · 1.2 KB
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
#!/usr/bin/python3
"""CLI entry point utilities"""
from argparse import ArgumentParser, Namespace, FileType
from lambda_calculus.visitors.normalisation import BetaNormalisingVisitor
from lambda_calculus.visitors.substitution.renaming import CountingSubstitution
from . import LambdaREPL, __doc__ as description, __version__
from .aliases import LetAliases
from .parsing import LambdaTransformer
__all__ = (
"ARGUMENT_PARSER",
"main",
"main_cli"
)
ARGUMENT_PARSER = ArgumentParser(description=description)
ARGUMENT_PARSER.add_argument(
"-v",
"--version",
action="version",
version=f"%(prog)s {__version__}"
)
ARGUMENT_PARSER.add_argument(
"-f",
"--file",
type=FileType("r"),
action="append",
help="add file which should be executed in the REPL"
)
def main(args: Namespace) -> int:
"""Entry point for the REPL"""
repl = LambdaREPL(
LetAliases(CountingSubstitution),
LambdaTransformer(),
BetaNormalisingVisitor()
)
for file in args.file or ():
for line in file:
repl.cmdqueue.append(line)
repl.cmdloop()
return 0
def main_cli() -> int:
"""CLI entry point"""
return main(ARGUMENT_PARSER.parse_args())