diff options
Diffstat (limited to 'Compiler/Program.cs')
| -rw-r--r-- | Compiler/Program.cs | 34 |
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 |
