public void Compile(string inputCode, string outputPath) { var lexicalAnalyser = new LexicalAnalyzer(inputCode, 0); var syntaxAnalyzer = new SyntaxAnalyzer(lexicalAnalyser); var fileWriter = new FileWriter(outputPath); var node = syntaxAnalyzer.Expression(0); var semanticAnalyzer = new SemanticAnalyzer(syntaxAnalyzer); var codeGenerator = new CodeGenerator(semanticAnalyzer, fileWriter); codeGenerator.GenerateCode(node); }
static void Main(string[] args) { try { // check number parameters on command if (args.Length == 0) { Help(); return; } // read source file var pathFile = Path.Combine(args[args.Length - 1]); Console.WriteLine("File to read : " + pathFile); var codeTemp = File.ReadAllText(pathFile); Console.WriteLine("File content : "); Console.WriteLine(codeTemp); Console.WriteLine("Press any key to continue."); Console.ReadKey(); Console.WriteLine(); // Preprocessor var preprocessor = new SimplePreprocessor(); codeTemp = preprocessor.Process(codeTemp); // lexicalAnalyser var lexicalAnalyzer = new LexicalAnalyzer(codeTemp, 0); // parserAnalyzer var syntaxAnalyzer = new SyntaxAnalyzer(lexicalAnalyzer); // File writer var fileWriter = new FileWriter("code.txt"); // Display all token in form of a tree. var semanticAnalyzer = new SemanticAnalyzer(syntaxAnalyzer); var codeGenerator = new CodeGenerator(semanticAnalyzer, fileWriter); while (lexicalAnalyzer.Next().Type != TokenType.END_OF_FILE) { var node = syntaxAnalyzer.Function(); semanticAnalyzer.Analyze(node); node.VariablesCount = semanticAnalyzer.VariablesCount; node.Print("", false); codeGenerator.GenerateCode(node); semanticAnalyzer = new SemanticAnalyzer(syntaxAnalyzer); } // add code generate on the file output code fileWriter.DeclareStart(); fileWriter.WriteFile(); // wait exit Console.WriteLine("\nPress any key to exit."); Console.ReadKey(); } catch (EncoderFallbackException e) { Console.WriteLine(e.StackTrace); } catch (ArgumentNullException e) { Console.WriteLine("Null argument enter for launch program"); Console.WriteLine(e.Message); } }