summaryrefslogtreecommitdiff
path: root/Compiler/Program.cs
diff options
context:
space:
mode:
authorMelodi <62381002+Melodi17@users.noreply.github.com>2025-09-05 10:20:03 +1000
committerMelodi <62381002+Melodi17@users.noreply.github.com>2025-09-05 10:20:03 +1000
commit9e8ba6e00dc4a4137a5187dbe5fe5b1394219735 (patch)
treee5a54706a8a85243fdb0fe0f2ed73fb7b7566bcd /Compiler/Program.cs
parent4ea967c6089bbcaba5d71145546d288e186fba40 (diff)
stuff
Diffstat (limited to 'Compiler/Program.cs')
-rw-r--r--Compiler/Program.cs34
1 files changed, 23 insertions, 11 deletions
diff --git a/Compiler/Program.cs b/Compiler/Program.cs
index cde49a5..7ecbf8e 100644
--- a/Compiler/Program.cs
+++ b/Compiler/Program.cs
@@ -27,17 +27,7 @@ public class Program
try
{
ICharStream inputStream = new PreprocessingCharStream(options.InputFile);
- CGrammarLexer lexer = new(inputStream);
- lexer.RemoveErrorListeners();
-
- ITokenStream tokenStream = new BufferedTokenStream(lexer);
- CGrammarParser parser = new(tokenStream);
- parser.RemoveErrorListeners();
-
- Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
- Encoding encoding = Encoding.GetEncoding(437);
- CCompilerVisitor compiler = new(options.CommentCompilationMode, encoding);
- IEnumerable<string> result = compiler.Compile(parser.program());
+ IEnumerable<string> result = Program.Compile(options, inputStream);
File.WriteAllLines(options.OutputFile, result);
if (options.Verbose)
@@ -58,4 +48,26 @@ public class Program
Environment.Exit(1);
}
}
+ public static IEnumerable<string> Compile(CompilerOptions options, ICharStream inputStream)
+ {
+ CGrammarLexer lexer = new(inputStream);
+ lexer.RemoveErrorListeners();
+
+ ITokenStream tokenStream = new BufferedTokenStream(lexer);
+ CGrammarParser parser = new(tokenStream);
+ parser.RemoveErrorListeners();
+
+ Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
+ Encoding encoding = Encoding.GetEncoding(437);
+ CCompilerVisitor compiler = new(options.CommentCompilationMode, encoding);
+ IEnumerable<string> result = compiler.Compile(parser.program());
+
+ return result;
+ }
+
+ public static string Optimize(IEnumerable<string> instructions)
+ {
+ Optimizer optimizer = new(instructions.ToList());
+ return optimizer.Optimize();
+ }
} \ No newline at end of file