forked from aasmundeldhuset/Compiler
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Program.cs
50 lines (47 loc) · 1.81 KB
/
Program.cs
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
// This compiler is strongly inspired by the excellent exercises created by Jan Christian Meyer
// for Anne C. Elster's course TDT4205 at the Norwegian University of Science and Technology.
using System;
using System.IO;
namespace Compiler
{
public class Program
{
public static void Main(string[] args)
{
string targetLanguage = args[0];
string sourceFilePath = args[1];
string outputFilePath = args[2];
var parser = ParserWrapper.Parse(sourceFilePath, Console.Out);
var symbolTable = new SymbolTable();
symbolTable.FindSymbols(parser.RootNode);
Print(parser.RootNode, 0);
File.Delete(outputFilePath);
using (var file = File.OpenWrite(outputFilePath))
using (var writer = new StreamWriter(file))
{
ICodeGenerator generator;
if (targetLanguage == "cil")
generator = new CilCodeGenerator(writer);
else if (targetLanguage == "jasmin")
generator = new JasminCodeGenerator(writer);
else if (targetLanguage == "javascript")
generator = new JavaScriptCodeGenerator(writer);
else
{
Console.WriteLine("Unsupported target language: '{0}' (must be 'cil', 'jasmin', or 'javascript')", targetLanguage);
return;
}
generator.Generate(parser.RootNode);
}
}
private static void Print(ISyntaxNode node, int level)
{
Console.Write(new string(' ', 2 * level));
Console.WriteLine(node);
foreach (var child in node.GetChildren())
{
Print(child, level + 1);
}
}
}
}