summaryrefslogtreecommitdiff
path: root/Compiler/Program.cs
diff options
context:
space:
mode:
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