Пример #1
0
        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);
        }
Пример #2
0
        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);
            }
        }