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