Add an interpreter
[fur] / main.py
1 import sys
2
3 import conversion
4 import crossplatform_ir_generation
5 import desugaring
6 import c_generation
7 import normalization
8 import optimization
9 import parsing
10 import tokenization
11
12 command = sys.argv[1]
13
14 source_path = sys.argv[2]
15
16 with open(source_path, 'r') as f:
17     source = f.read()
18
19 tokens = tokenization.tokenize(source)
20 parsed = parsing.parse(tokens)
21 desugared = desugaring.desugar(parsed)
22 normalized = normalization.normalize(desugared)
23 converted = conversion.convert(normalized)
24
25 crossplatform_ir = crossplatform_ir_generation.generate(converted)
26 optimized = optimization.optimize(crossplatform_ir)
27
28 if command == 'compile':
29     generated = c_generation.generate(optimized)
30
31     assert source_path.endswith('.fur')
32     destination_path = source_path + '.c'
33
34     with open(destination_path, 'w') as f:
35         f.write(generated)
36
37 elif command == 'ir':
38     outputted = crossplatform_ir_generation.output(optimized)
39     print(outputted)
40
41 elif command == 'interpret':
42     interpreter.interpret(optimized)