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()); } }
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()); }); }