static void Main(string[] args) { if ( args.Length != 1 ) { System.Console.WriteLine("Usage:"); System.Console.WriteLine(); System.Console.WriteLine("j0.exe <FilePath>"); System.Console.WriteLine(); System.Console.WriteLine("The J0 compiler generates the executable .NET MSIL code."); System.Console.WriteLine("The code is placed to the new file with the same name"); System.Console.WriteLine("as the source file and with the '.exe' extension."); return; } string fname = args[0]; System.Console.WriteLine("J0 Command Line Compiler Version 0.0.0.1"); System.Console.WriteLine("Copyright © R.Hamilton 2012"); Errors errors = new Errors(); try { Source source = new Source(fname /* @"c:\Zouev\J0\Tests\T01.j0" */,errors); Lexer lexer = new Lexer(source,errors); Parser parser = new Parser(lexer,errors); // 1. Parsing PROGRAM program = parser.parseCompilationUnit(); if ( errors.errCount() > 0 ) { errors.report(); return; } // 2. Name resolution program.resolve(null,null,null); if (errors.errCount() > 0) { errors.report(); return; } // 3. Code generation Generator gen = new Generator(source,errors,program); gen.generateProgram(); if ( errors.errCount() > 0 ) { errors.report(); System.Console.WriteLine("Code is not generated"); } else { System.Console.WriteLine("Compilation completed successfully"); } } catch (Exception) { errors.issue(34); // internal error errors.report(); System.Console.WriteLine("Compilation aborted"); } }
public Generator(Source s, Errors e, PROGRAM p) { source = s; errors = e; program = p; }
public Lexer(Source source, Errors errors) { this.source = source; this.errors = errors; this.current = null; }