Exemple #1
0
        public override void Translate(DirectoryInfo genPath)
        {
            Directory.CreateDirectory(genPath.FullName);
            // remove existing files
            foreach (var file in genPath.EnumerateFiles())
            {
                file.Delete();
            }
            // and dirs
            foreach (DirectoryInfo dir in genPath.GetDirectories())
            {
                dir.Delete(true);
            }
            foreach (var key in Table.Modules.Keys)
            {
                if (Table.Modules[key].IsEmpty)
                {
                    continue;
                }
                AntlrInputStream  inputStream       = new AntlrInputStream(Table.Modules[key].ModuleData.Data);
                SLangGrammarLexer lexer             = new SLangGrammarLexer(inputStream);
                CommonTokenStream commonTokenStream = new CommonTokenStream(lexer);
                var parser = new SLangGrammarParser(commonTokenStream);
                parser.AddErrorListener(new SLangErrorListener(Table.Modules[key].ModuleData));

                var translatorVisitor = new CppTranslator(new StreamWriter($"{genPath}/{key}.h"), new StreamWriter($"{genPath}/{key}.cpp"), Table, Table.Modules[key], genPath);
                translatorVisitor.Visit(parser.start());
            }
        }
Exemple #2
0
        public void CheckErrors(ProjectManager projectManager)
        {
            // TODO: make async
            string[] allModules = projectManager.FileModules.Keys.ToArray();
            var      modules    = projectManager.FileModules;


            modules.Keys.ToList().ForEach(key =>
            {
                SLangGrammarParser parser        = GenerateParser(modules[key].Data);
                SLangErrorListener errorListener = new SLangErrorListener(modules[key]);
                parser.AddErrorListener(errorListener);

                var storeStepVisitor = new SlangStoreTypesVisitor(SourceCode, modules[key], allModules);
                // store data step
                storeStepVisitor.Visit(parser.start());
            });

            modules.Keys.ToList().ForEach(key =>
            {
                SLangGrammarParser parser        = GenerateParser(modules[key].Data);
                SLangErrorListener errorListener = new SLangErrorListener(modules[key]);
                parser.AddErrorListener(errorListener);

                var storeStepFieldsVisitor = new SlangStoreFieldsVisitor(SourceCode, modules[key]);
                // store data step
                storeStepFieldsVisitor.Visit(parser.start());
            });

            modules.Keys.ToList().ForEach(key =>
            {
                SLangGrammarParser parser        = GenerateParser(modules[key].Data);
                SLangErrorListener errorListener = new SLangErrorListener(modules[key]);
                parser.AddErrorListener(errorListener);

                var storeStepRoutinesVisitor = new SlangStoreRoutinesVisitor(SourceCode, modules[key]);
                // store data step
                storeStepRoutinesVisitor.Visit(parser.start());
            });

            var classChecker = new ClassesValidator(SourceCode);

            classChecker.Check();

            modules.Keys.ToList().ForEach(key =>
            {
                SLangGrammarParser parser        = GenerateParser(modules[key].Data);
                SLangErrorListener errorListener = new SLangErrorListener(modules[key]);
                parser.AddErrorListener(errorListener);

                var semanticVisitor = new SlangSemanticVisitor(SourceCode, modules[key]);
                // store data step
                semanticVisitor.Visit(parser.start());
            });
        }