-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathProgram.cs
104 lines (81 loc) · 2.72 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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
namespace Language
{
class Program
{
public static void Main(string[] args)
{
if (args.Length == 1)
{
RunCode(File.ReadAllText($"./Snippets/{args[0]}"));
}
else
{
// foreach (var snippet in CodeSnippets.Snippets)
// {
// Console.WriteLine(snippet);
// try
// {
// RunCode(snippet);
// }
// catch (Exception e)
// {
// Console.ForegroundColor = ConsoleColor.Red;
// Console.WriteLine(e.Message);
// Console.ResetColor();
// }
// }
RunCode(@"
function string test() {
return ""he"" + ""l"";
}
print test();
");
}
}
public static void RunCode(string code)
{
Scanner scanner = new(code);
List<Token> tokens = scanner.ScanTokens();
// foreach (var item in tokens)
// {
// Token.TokenLogger(item);
// }
RDParser rDParser = new(tokens);
Pratt parser = new(tokens);
List<Statement> statements = rDParser.Parse();
// AstPrinter astPrinter = new();
// foreach (var statement in statements)
// {
// astPrinter.PrintStatement(statement);
// }
foreach (var statement in statements)
{
Console.WriteLine(statement);
}
// Console.WriteLine();
// TypeChecker typeChecker = new();
// typeChecker.TypeCheck(statements);
Console.WriteLine();
Interpreter interpreter = new();
interpreter.Interpret(statements);
Console.WriteLine();
Compiler compiler = new();
string mnemo = compiler.Compile(statements);
Console.WriteLine(mnemo);
var mnemonics = Mnemonics.Mnemonic(mnemo);
VirtualMachine virtualMachine = new(mnemonics);
Console.WriteLine();
List<string> toMnemo = MnemoHelpers.ByteCodeToMnemonics(mnemonics);
// foreach (var item in toMnemo)
// {
// Console.WriteLine(item);
// }
VirtualMachine vm = new(mnemonics);
vm.Execute();
vm.Logger();
scanner.Reset();
interpreter.Reset();
compiler.Reset();
}
}
}