Пример #1
0
            public void ParseCommentNewLine()
            {
                ModuleImport importMods = ModuleParser.ParseImports(new AntlrInputStream(
                                                                        @"// mod ext;"));

                Assert.AreEqual(0, importMods.Count);
            }
Пример #2
0
            public void ParsesServoLayoutLib()
            {
                ModuleImport importMods = ModuleParser.ParseImports(new AntlrInputStream(Utils.LoadResource(@"External\servo\components\layout\lib.rs")));

                Assert.AreEqual(26, importMods.Count);
                Assert.True(importMods[new PathSegment("layout_debug")].Count == 0);
                Assert.True(importMods[new PathSegment("construct")].Count == 0);
                Assert.True(importMods[new PathSegment("context")].Count == 0);
                Assert.True(importMods[new PathSegment("floats")].Count == 0);
                Assert.True(importMods[new PathSegment("flow")].Count == 0);
                Assert.True(importMods[new PathSegment("flow_list")].Count == 0);
                Assert.True(importMods[new PathSegment("flow_ref")].Count == 0);
                Assert.True(importMods[new PathSegment("fragment")].Count == 0);
                Assert.True(importMods[new PathSegment("layout_task")].Count == 0);
                Assert.True(importMods[new PathSegment("inline")].Count == 0);
                Assert.True(importMods[new PathSegment("model")].Count == 0);
                Assert.True(importMods[new PathSegment("parallel")].Count == 0);
                Assert.True(importMods[new PathSegment("table_wrapper")].Count == 0);
                Assert.True(importMods[new PathSegment("table")].Count == 0);
                Assert.True(importMods[new PathSegment("table_caption")].Count == 0);
                Assert.True(importMods[new PathSegment("table_colgroup")].Count == 0);
                Assert.True(importMods[new PathSegment("table_rowgroup")].Count == 0);
                Assert.True(importMods[new PathSegment("table_row")].Count == 0);
                Assert.True(importMods[new PathSegment("table_cell")].Count == 0);
                Assert.True(importMods[new PathSegment("text")].Count == 0);
                Assert.True(importMods[new PathSegment("util")].Count == 0);
                Assert.True(importMods[new PathSegment("incremental")].Count == 0);
                Assert.True(importMods[new PathSegment("wrapper")].Count == 0);
                Assert.True(importMods[new PathSegment("extra")].Count == 0);
                Assert.True(importMods[new PathSegment("css")].Count == 3);
                Assert.True(importMods[new PathSegment("css")][new PathSegment("node_util")].Count == 0);
                Assert.True(importMods[new PathSegment("css")][new PathSegment("matching")].Count == 0);
                Assert.True(importMods[new PathSegment("css")][new PathSegment("node_style")].Count == 0);
            }
Пример #3
0
            public void EmptyModBlock()
            {
                ModuleImport importMods = ModuleParser.ParseImports(new AntlrInputStream(
                                                                        @"mod asd { foo(); }"));

                Assert.AreEqual(0, importMods.Count);
            }
Пример #4
0
            public void MergeAuthorative()
            {
                ModuleImport importMods = ModuleParser.ParseImports(new AntlrInputStream(
                                                                        "mod foo { mod bar; } #[path=\"foo\"] mod foo { mod baz; }"));

                Assert.AreEqual(1, importMods.Count);
            }
Пример #5
0
            public void ParseCommentBlock()
            {
                ModuleImport importMods = ModuleParser.ParseImports(new AntlrInputStream(
                                                                        @"/* mod ext; */"));

                Assert.AreEqual(0, importMods.Count);
            }
Пример #6
0
        public void ModuleParserSiteTest()
        {
            SyntaxTree tree = new SyntaxTree();

            //Create lexer to tokenize stream
            WaebricLexer lexer = new WaebricLexer(new StringReader("module test\n\nsite\n  site/index.html : home() ; site/index2.html : home()\nend"));

            lexer.LexicalizeStream();

            //Parse tokenized stream
            ModuleParser parser = new ModuleParser(lexer.GetTokenIterator());

            tree.SetRoot(parser.ParseModule());

            //Check module
            Module module = tree.GetRoot();

            Assert.IsTrue(module.GetModuleId().ToString() == "test");
            Assert.AreEqual(0, module.GetImports().Count);             //No imports
            Assert.AreEqual(0, module.GetFunctionDefinitions().Count); //No function definitions
            Assert.AreEqual(1, module.GetSites().Count);               //One site

            //Check site
            Site site = (Site)module.GetSites().Get(0);

            Assert.AreEqual(2, site.GetMappings().Count);
        }
Пример #7
0
            public void ParsePubModifier()
            {
                ModuleImport importMods = ModuleParser.ParseImports(new AntlrInputStream(
                                                                        "pub mod foo { pub mod bar; } #[path=\"foo\"] pub mod ex { mod baz; }"));

                Assert.AreEqual(1, importMods.Count);
            }
Пример #8
0
 private static Sections RunSection(string hex)
 {
     using (var reader = BinaryTools.HexToReader(hex))
     {
         return(ModuleParser.ToSections(reader));
     }
 }
Пример #9
0
            public void MergeModules()
            {
                ModuleImport importMods = ModuleParser.ParseImports(new AntlrInputStream(
                                                                        @"mod asd { mod foo; } mod asd { mod bar; }"));

                Assert.AreEqual(1, importMods.Count);
                Assert.AreEqual(2, importMods[new PathSegment("asd")].Count);
            }
Пример #10
0
            public void ParseModBlock()
            {
                ModuleImport importMods = ModuleParser.ParseImports(new AntlrInputStream(
                                                                        @"fn foo { }  mod asd { mod ext; }"));

                Assert.AreEqual(1, importMods.Count);
                Assert.AreEqual(1, importMods[new PathSegment("asd")].Count);
                Assert.AreEqual(0, importMods[new PathSegment("asd")][new PathSegment("ext")].Count);
            }
Пример #11
0
            public void ParseLargeInnerModBlock()
            {
                ModuleImport importMods = ModuleParser.ParseImports(new AntlrInputStream(
                                                                        @"mod asd { mod bar { } mod baz { mod inner; } mod ext1; mod ext2; mod ext3; }"));

                Assert.AreEqual(1, importMods.Count);
                Assert.AreEqual(4, importMods[new PathSegment("asd")].Count);
                Assert.AreEqual(1, importMods[new PathSegment("asd")][new PathSegment("baz")].Count);
            }
Пример #12
0
            public void ParseInnerModBlock()
            {
                ModuleImport importMods = ModuleParser.ParseImports(new AntlrInputStream(
                                                                        @"mod foo { mod inner; }"));

                Assert.AreEqual(1, importMods.Count);
                Assert.AreEqual(1, importMods[new PathSegment("foo")].Count);
                Assert.AreEqual(0, importMods[new PathSegment("foo")][new PathSegment("inner")].Count);
            }
Пример #13
0
            public void AttributePaths()
            {
                ModuleImport importMods = ModuleParser.ParseImports(new AntlrInputStream(Utils.LoadResource(@"Internal\mod_paths.rs")));

                Assert.AreEqual(1, importMods.Count);
                Assert.AreEqual(1, importMods[new PathSegment("task_files", true)].Count);
                Assert.False(importMods.ContainsKey(new PathSegment("task_files", false)));
                Assert.AreEqual(0, importMods[new PathSegment("task_files", true)][new PathSegment("tls.rs", true)].Count);
                Assert.False(importMods[new PathSegment("task_files", true)].ContainsKey(new PathSegment("tls.rs", false)));
            }
Пример #14
0
            public void MergeModBlocks()
            {
                ModuleImport importMods = ModuleParser.ParseImports(new AntlrInputStream(
                                                                        @"fn foo { }  mod asd { mod ext; } mod asd { mod bar { mod ext1; } } mod asd { mod bar { mod ext2; } }"));

                Assert.AreEqual(1, importMods.Count);
                Assert.AreEqual(2, importMods[new PathSegment("asd")].Count);
                Assert.AreEqual(0, importMods[new PathSegment("asd")][new PathSegment("ext")].Count);
                Assert.AreEqual(2, importMods[new PathSegment("asd")][new PathSegment("bar")].Count);
                Assert.AreEqual(0, importMods[new PathSegment("asd")][new PathSegment("bar")][new PathSegment("ext1")].Count);
                Assert.AreEqual(0, importMods[new PathSegment("asd")][new PathSegment("bar")][new PathSegment("ext2")].Count);
            }
Пример #15
0
        /// <summary>
        /// Performs parsing of whole module (file)
        /// </summary>
        /// <param name="tokens">Tokens to parse</param>
        /// <returns>Parsed AST</returns>
        public static CoreNode Parse(Token[] tokens)
        {
            State state  = new State(tokens, "");
            var   result = ModuleParser.Parse(state);

            if (state.IsErrorOccured())
            {
                ReportError(state);
            }

            return(result);
        }
Пример #16
0
    //Need to be careful about params here, will possibly
    //need to parse or be creative with GUI
    public void SetAxiom(string s)
    {
        axiomRep = s;
        axiom    = ModuleParser.StringToModuleList(s, this);
        //axiom = new List<Module>();
        //foreach(Module m in axiom)
        //{
        //    axiomRep += m;
        //}

        //foreach (char c in s)
        //{
        //    axiom.Add(new Module(c));
        //}
    }
Пример #17
0
            public void ParsesPistonImageLib()
            {
                ModuleImport importMods = ModuleParser.ParseImports(new AntlrInputStream(Utils.LoadResource(@"External\image\src\lib.rs")));

                Assert.AreEqual(9, importMods.Count);
                Assert.True(importMods[new PathSegment("imageops")].Count == 0);
                Assert.True(importMods[new PathSegment("webp")].Count == 0);
                Assert.True(importMods[new PathSegment("ppm")].Count == 0);
                Assert.True(importMods[new PathSegment("png")].Count == 0);
                Assert.True(importMods[new PathSegment("jpeg")].Count == 0);
                Assert.True(importMods[new PathSegment("gif")].Count == 0);
                Assert.True(importMods[new PathSegment("image")].Count == 0);
                Assert.True(importMods[new PathSegment("dynimage")].Count == 0);
                Assert.True(importMods[new PathSegment("color")].Count == 0);
            }
Пример #18
0
        private DrawingAction[] CreateDrawingActions(ModuleParser <double> parser)
        {
            var result = new List <DrawingAction>();

            foreach (var module in _modules)
            {
                var info = module.Value;
                var name = TranslateModuleName(info.ModuleName);

                var action = info.GetAction();

                result.Add(new DrawingAction(parser.GetModuleId(name), action));
            }

            return(result.ToArray());
        }
Пример #19
0
        public static bool Parse(SyntaxContext context, int position)
        {
            var list     = context.list;
            var offset   = 0;
            var index    = position;
            var count    = 0;
            var isMissed = false;

            if (!ParserHelper.IsKeyword(list[index], "do"))
            {
                return(false);
            }
            else
            {
                // ignored
            }
            offset += 1;
            index   = position + offset;
            while (ModuleParser.Parse(context, index))
            {
                ;
            }
            if (list[index].type != Expression.Type.Module)
            {
                return(false);
            }
            else
            {
                // ignored
            }
            offset += 1;
            index   = position + offset;
            if (!ParserHelper.IsKeyword(list[index], "end"))
            {
                return(false);
            }
            else
            {
                // ignored
            }
            offset += 1;
            index   = position + offset;
            context.Insert(position, ExpressionCreator.CreateDo(list, position, offset));
            context.Remove(position + 1, offset);
            return(true);
        }
Пример #20
0
        public void RuleParser_SeparateModuleRepresentations_ValidInputTest(string input,
                                                                            string[] expectedOutputContent)
        {
            //Prepare output to format used in method return value
            var expectedOutput = new List <Tuple <string, string> >();

            for (int i = 0; i < expectedOutputContent.Length; i += 2)
            {
                expectedOutput.Add(new Tuple <string, string>(expectedOutputContent[i], expectedOutputContent[i + 1]));
            }
            if (expectedOutputContent.Length % 2 == 1)
            {
                expectedOutput.Add(new Tuple <string, string>(expectedOutputContent[expectedOutputContent.Length - 1], null));
            }


            var parser = new ModuleParser <int>(new IntExpressionParserFactory());

            var output = parser.SeparateModulesRepresentations(input);


            Assert.That(output, Is.EqualTo(expectedOutput));
        }
Пример #21
0
 public void ToModuleWrongVersion()
 {
     Assert.That(() => ModuleParser.ToModule(BinaryTools.HexToBytes("0061736D02000000")), Throws.Exception);
 }
Пример #22
0
        public static (SynchronousParseCoordinator parser, IRewritingManager rewritingManager) CreateWithRewriteManager(IVBE vbe, RubberduckParserState state, IProjectsRepository projectRepository, string serializedComProjectsPath = null, IDictionary <string, IEnumerable <string> > documentModuleSupertypeNames = null)
        {
            var vbeVersion = double.Parse(vbe.Version, CultureInfo.InvariantCulture);
            var compilationArgumentsProvider      = MockCompilationArgumentsProvider(vbeVersion);
            var compilationsArgumentsCache        = new CompilationArgumentsCache(compilationArgumentsProvider);
            var userComProjectsRepository         = MockUserComProjectRepository();
            var documentSuperTypesProvider        = MockDocumentSuperTypeNamesProvider(documentModuleSupertypeNames);
            var ignoredProjectsSettingsProvider   = MockIgnoredProjectsSettingsProviderMock();
            var projectsToBeLoadedFromComSelector = new ProjectsToResolveFromComProjectsSelector(projectRepository, ignoredProjectsSettingsProvider);

            var path = serializedComProjectsPath ??
                       Path.Combine(Path.GetDirectoryName(Assembly.GetAssembly(typeof(MockParser)).Location), "Testfiles", "Resolver");
            var preprocessorErrorListenerFactory = new PreprocessingParseErrorListenerFactory();
            var preprocessorParser               = new VBAPreprocessorParser(preprocessorErrorListenerFactory, preprocessorErrorListenerFactory);
            var preprocessor                     = new VBAPreprocessor(preprocessorParser, compilationsArgumentsCache);
            var mainParseErrorListenerFactory    = new MainParseErrorListenerFactory();
            var mainTokenStreamParser            = new VBATokenStreamParser(mainParseErrorListenerFactory, mainParseErrorListenerFactory);
            var tokenStreamProvider              = new SimpleVBAModuleTokenStreamProvider();
            var stringParser                     = new TokenStreamParserStringParserAdapterWithPreprocessing(tokenStreamProvider, mainTokenStreamParser, preprocessor);
            var vbaParserAnnotationFactory       = new VBAParserAnnotationFactory(WellKnownAnnotations());
            var projectManager                   = new RepositoryProjectManager(projectRepository);
            var moduleToModuleReferenceManager   = new ModuleToModuleReferenceManager();
            var supertypeClearer                 = new SynchronousSupertypeClearer(state);
            var parserStateManager               = new SynchronousParserStateManager(state);
            var referenceRemover                 = new SynchronousReferenceRemover(state, moduleToModuleReferenceManager);
            var baseComDeserializer              = new XmlComProjectSerializer(new MockFileSystem(), path);
            var comDeserializer                  = new StaticCachingComDeserializerDecorator(baseComDeserializer);
            var declarationsFromComProjectLoader = new DeclarationsFromComProjectLoader();
            var referencedDeclarationsCollector  = new SerializedReferencedDeclarationsCollector(declarationsFromComProjectLoader, comDeserializer);
            var userComProjectSynchronizer       = new UserComProjectSynchronizer(state, declarationsFromComProjectLoader, userComProjectsRepository, projectsToBeLoadedFromComSelector);
            var comSynchronizer                  = new SynchronousCOMReferenceSynchronizer(
                state,
                parserStateManager,
                projectRepository,
                referencedDeclarationsCollector);
            var builtInDeclarationLoader = new BuiltInDeclarationLoader(
                state,
                new List <ICustomDeclarationLoader>
            {
                new DebugDeclarations(state),
                new SpecialFormDeclarations(state),
                new FormEventDeclarations(state),
                new AliasDeclarations(state),
            });
            var codePaneComponentSourceCodeHandler = new CodeModuleComponentSourceCodeHandler();
            var codePaneSourceCodeHandler          = new ComponentSourceCodeHandlerSourceCodeHandlerAdapter(codePaneComponentSourceCodeHandler, projectRepository);
            //We use the same handler because to achieve consistency between the return values.
            var attributesSourceCodeHandler = codePaneSourceCodeHandler;
            var moduleParser = new ModuleParser(
                codePaneSourceCodeHandler,
                attributesSourceCodeHandler,
                stringParser,
                vbaParserAnnotationFactory);
            var parseRunner = new SynchronousParseRunner(
                state,
                parserStateManager,
                moduleParser);
            var declarationResolveRunner = new SynchronousDeclarationResolveRunner(
                state,
                parserStateManager,
                comSynchronizer);
            var referenceResolveRunner = new SynchronousReferenceResolveRunner(
                state,
                parserStateManager,
                moduleToModuleReferenceManager,
                referenceRemover,
                documentSuperTypesProvider);
            var parsingStageService = new ParsingStageService(
                comSynchronizer,
                builtInDeclarationLoader,
                parseRunner,
                declarationResolveRunner,
                referenceResolveRunner,
                userComProjectSynchronizer
                );
            var parsingCacheService = new ParsingCacheService(
                state,
                moduleToModuleReferenceManager,
                referenceRemover,
                supertypeClearer,
                compilationsArgumentsCache,
                userComProjectsRepository,
                projectsToBeLoadedFromComSelector
                );
            var tokenStreamCache      = new StateTokenStreamCache(state);
            var moduleRewriterFactory = new ModuleRewriterFactory(
                codePaneSourceCodeHandler,
                attributesSourceCodeHandler);
            var rewriterProvider              = new RewriterProvider(tokenStreamCache, moduleRewriterFactory);
            var selectionService              = new SelectionService(vbe, projectRepository);
            var selectionRecoverer            = new SelectionRecoverer(selectionService, state);
            var rewriteSessionFactory         = new RewriteSessionFactory(state, rewriterProvider, selectionRecoverer);
            var stubMembersAttributeRecoverer = new Mock <IMemberAttributeRecovererWithSettableRewritingManager>().Object;
            var rewritingManager              = new RewritingManager(rewriteSessionFactory, stubMembersAttributeRecoverer);

            var parser = new SynchronousParseCoordinator(
                state,
                parsingStageService,
                parsingCacheService,
                projectManager,
                parserStateManager,
                rewritingManager);

            return(parser, rewritingManager);
        }
Пример #23
0
        public static (SynchronousParseCoordinator parser, IRewritingManager rewritingManager) CreateWithRewriteManager(IVBE vbe, RubberduckParserState state, IProjectsRepository projectRepository, string serializedComProjectsPath = null)
        {
            var vbeVersion = double.Parse(vbe.Version, CultureInfo.InvariantCulture);
            var compilationArgumentsProvider = MockCompilationArgumentsProvider(vbeVersion);
            var compilationsArgumentsCache   = new CompilationArgumentsCache(compilationArgumentsProvider);

            var path = serializedComProjectsPath ??
                       Path.Combine(Path.GetDirectoryName(Assembly.GetAssembly(typeof(MockParser)).Location), "Testfiles", "Resolver");
            var preprocessorErrorListenerFactory = new PreprocessingParseErrorListenerFactory();
            var preprocessorParser              = new VBAPreprocessorParser(preprocessorErrorListenerFactory, preprocessorErrorListenerFactory);
            var preprocessor                    = new VBAPreprocessor(preprocessorParser, compilationsArgumentsCache);
            var mainParseErrorListenerFactory   = new MainParseErrorListenerFactory();
            var mainTokenStreamParser           = new VBATokenStreamParser(mainParseErrorListenerFactory, mainParseErrorListenerFactory);
            var tokenStreamProvider             = new SimpleVBAModuleTokenStreamProvider();
            var stringParser                    = new TokenStreamParserStringParserAdapterWithPreprocessing(tokenStreamProvider, mainTokenStreamParser, preprocessor);
            var projectManager                  = new RepositoryProjectManager(projectRepository);
            var moduleToModuleReferenceManager  = new ModuleToModuleReferenceManager();
            var supertypeClearer                = new SynchronousSupertypeClearer(state);
            var parserStateManager              = new SynchronousParserStateManager(state);
            var referenceRemover                = new SynchronousReferenceRemover(state, moduleToModuleReferenceManager);
            var baseComDeserializer             = new XmlComProjectSerializer(path);
            var comDeserializer                 = new StaticCachingComDeserializerDecorator(baseComDeserializer);
            var referencedDeclarationsCollector = new SerializedReferencedDeclarationsCollector(comDeserializer);
            var comSynchronizer                 = new SynchronousCOMReferenceSynchronizer(
                state,
                parserStateManager,
                projectRepository,
                referencedDeclarationsCollector);
            var builtInDeclarationLoader = new BuiltInDeclarationLoader(
                state,
                new List <ICustomDeclarationLoader>
            {
                new DebugDeclarations(state),
                new SpecialFormDeclarations(state),
                new FormEventDeclarations(state),
                new AliasDeclarations(state),
            });
            var codePaneSourceCodeHandler = new CodePaneSourceCodeHandler(projectRepository);
            //We use the same handler because to achieve consistency between the return values.
            var attributesSourceCodeHandler = codePaneSourceCodeHandler;
            var moduleParser = new ModuleParser(
                codePaneSourceCodeHandler,
                attributesSourceCodeHandler,
                stringParser);
            var parseRunner = new SynchronousParseRunner(
                state,
                parserStateManager,
                moduleParser);
            var declarationResolveRunner = new SynchronousDeclarationResolveRunner(
                state,
                parserStateManager,
                comSynchronizer);
            var referenceResolveRunner = new SynchronousReferenceResolveRunner(
                state,
                parserStateManager,
                moduleToModuleReferenceManager,
                referenceRemover);
            var parsingStageService = new ParsingStageService(
                comSynchronizer,
                builtInDeclarationLoader,
                parseRunner,
                declarationResolveRunner,
                referenceResolveRunner
                );
            var parsingCacheService = new ParsingCacheService(
                state,
                moduleToModuleReferenceManager,
                referenceRemover,
                supertypeClearer,
                compilationsArgumentsCache
                );
            var tokenStreamCache      = new StateTokenStreamCache(state);
            var moduleRewriterFactory = new ModuleRewriterFactory(
                codePaneSourceCodeHandler,
                attributesSourceCodeHandler);
            var rewriterProvider      = new RewriterProvider(tokenStreamCache, moduleRewriterFactory);
            var rewriteSessionFactory = new RewriteSessionFactory(state, rewriterProvider);
            var rewritingManager      = new RewritingManager(rewriteSessionFactory);

            var parser = new SynchronousParseCoordinator(
                state,
                parsingStageService,
                parsingCacheService,
                projectManager,
                parserStateManager,
                rewritingManager);

            return(parser, rewritingManager);
        }
Пример #24
0
 public static Module Decode(byte[] module)
 {
     return(ModuleParser.ToModule(module));
 }
Пример #25
0
        public static bool Parse(SyntaxContext context, int position)
        {
            var list     = context.list;
            var offset   = 0;
            var index    = position;
            var count    = 0;
            var isMissed = false;

            if (!ParserHelper.IsKeyword(list[index], "for"))
            {
                return(false);
            }
            else
            {
                // ignored
            }
            offset += 1;
            index   = position + offset;
            if (list[index].type != Expression.Type.Word)
            {
                return(false);
            }
            else
            {
                // ignored
            }
            offset += 1;
            index   = position + offset;
            if (!ParserHelper.IsOperator(list[index], "="))
            {
                return(false);
            }
            else
            {
                // ignored
            }
            offset += 1;
            index   = position + offset;
            while (FunctionAParser.Parse(context, index))
            {
                ;
            }
            while (ParenParser.Parse(context, index))
            {
                ;
            }
            while (TableIParser.Parse(context, index))
            {
                ;
            }
            while (TableSParser.Parse(context, index))
            {
                ;
            }
            while (ListParser.Parse(context, index))
            {
                ;
            }
            while (PropertyParser.Parse(context, index))
            {
                ;
            }
            while (IndexParser.Parse(context, index))
            {
                ;
            }
            while (CallParser.Parse(context, index))
            {
                ;
            }
            while (NotParser.Parse(context, index))
            {
                ;
            }
            while (LengthParser.Parse(context, index))
            {
                ;
            }
            while (NegateParser.Parse(context, index))
            {
                ;
            }
            while (PowerParser.Parse(context, index))
            {
                ;
            }
            while (MultiplyParser.Parse(context, index))
            {
                ;
            }
            while (DivisionParser.Parse(context, index))
            {
                ;
            }
            while (ModParser.Parse(context, index))
            {
                ;
            }
            while (AddParser.Parse(context, index))
            {
                ;
            }
            while (SubtractParser.Parse(context, index))
            {
                ;
            }
            while (ConcatParser.Parse(context, index))
            {
                ;
            }
            while (LessParser.Parse(context, index))
            {
                ;
            }
            while (GreaterParser.Parse(context, index))
            {
                ;
            }
            while (LessEqualParser.Parse(context, index))
            {
                ;
            }
            while (GreaterEqualParser.Parse(context, index))
            {
                ;
            }
            while (EqualParser.Parse(context, index))
            {
                ;
            }
            while (NotEqualParser.Parse(context, index))
            {
                ;
            }
            while (AndParser.Parse(context, index))
            {
                ;
            }
            while (OrParser.Parse(context, index))
            {
                ;
            }
            if (!list[index].isRightValue)
            {
                return(false);
            }
            else
            {
                // ignored
            }
            offset += 1;
            index   = position + offset;
            if (!ParserHelper.IsOperator(list[index], ","))
            {
                return(false);
            }
            else
            {
                // ignored
            }
            offset += 1;
            index   = position + offset;
            while (FunctionAParser.Parse(context, index))
            {
                ;
            }
            while (ParenParser.Parse(context, index))
            {
                ;
            }
            while (TableIParser.Parse(context, index))
            {
                ;
            }
            while (TableSParser.Parse(context, index))
            {
                ;
            }
            while (ListParser.Parse(context, index))
            {
                ;
            }
            while (PropertyParser.Parse(context, index))
            {
                ;
            }
            while (IndexParser.Parse(context, index))
            {
                ;
            }
            while (CallParser.Parse(context, index))
            {
                ;
            }
            while (NotParser.Parse(context, index))
            {
                ;
            }
            while (LengthParser.Parse(context, index))
            {
                ;
            }
            while (NegateParser.Parse(context, index))
            {
                ;
            }
            while (PowerParser.Parse(context, index))
            {
                ;
            }
            while (MultiplyParser.Parse(context, index))
            {
                ;
            }
            while (DivisionParser.Parse(context, index))
            {
                ;
            }
            while (ModParser.Parse(context, index))
            {
                ;
            }
            while (AddParser.Parse(context, index))
            {
                ;
            }
            while (SubtractParser.Parse(context, index))
            {
                ;
            }
            while (ConcatParser.Parse(context, index))
            {
                ;
            }
            while (LessParser.Parse(context, index))
            {
                ;
            }
            while (GreaterParser.Parse(context, index))
            {
                ;
            }
            while (LessEqualParser.Parse(context, index))
            {
                ;
            }
            while (GreaterEqualParser.Parse(context, index))
            {
                ;
            }
            while (EqualParser.Parse(context, index))
            {
                ;
            }
            while (NotEqualParser.Parse(context, index))
            {
                ;
            }
            while (AndParser.Parse(context, index))
            {
                ;
            }
            while (OrParser.Parse(context, index))
            {
                ;
            }
            if (!list[index].isRightValue)
            {
                return(false);
            }
            else
            {
                // ignored
            }
            offset += 1;
            index   = position + offset;
            if (!ParserHelper.IsKeyword(list[index], "do"))
            {
                return(false);
            }
            else
            {
                // ignored
            }
            offset += 1;
            index   = position + offset;
            while (ModuleParser.Parse(context, index))
            {
                ;
            }
            if (list[index].type != Expression.Type.Module)
            {
                return(false);
            }
            else
            {
                // ignored
            }
            offset += 1;
            index   = position + offset;
            if (!ParserHelper.IsKeyword(list[index], "end"))
            {
                return(false);
            }
            else
            {
                // ignored
            }
            offset += 1;
            index   = position + offset;
            context.Insert(position, ExpressionCreator.CreateFor(list, position, offset));
            context.Remove(position + 1, offset);
            return(true);
        }
Пример #26
0
    /*
     *  EditorGUILayout.BeginHorizontal();
     *  scrollPos =
     *      EditorGUILayout.BeginScrollView(scrollPos, GUILayout.Width(100), GUILayout.Height(100));
     *  GUILayout.Label(t);
     *  EditorGUILayout.EndScrollView();
     */

    private void OnGUI()
    {
        // if(isInit)
        // {
        //     //lSys = new LSystem();
        //     //rules.Add("");
        //     //varsCreated = variables.Count;

        //     //serObj = new SerializedObject(this);
        //     isInit = false;
        // }

        lSys.Clear(); //Could do this first thing on clicking "Generate"? Will that keep adding production rules...

        scrollPos = EditorGUILayout.BeginScrollView(scrollPos);
        //scrollPos = EditorGUILayout.BeginVertical(GUILayout.Height(100));

        GUILayout.Label("L-Systems:", EditorStyles.boldLabel);
        //SerializedObject obj = new SerializedObject(this);

        // SerializedProperty keyProp = obj.FindProperty("keyList");
        // EditorGUILayout.PropertyField(keyProp, new GUIContent("Names: "), true);

        // SerializedProperty valProp = obj.FindProperty("valList");
        // EditorGUILayout.PropertyField(valProp, new GUIContent("Values: "), true);

        DrawVariableMap();
        //GUILayout.Space(VariableDrawer.propHeight);
        // int lowCount = keyList.Count;
        // if (valList.Count < lowCount)
        // {
        //     lowCount = valList.Count;

        // }

        //change to just copy dict?
        foreach (KeyValuePair <string, float> kv in variables)
        {
            //Debug.Log("Key: " + kv.Key + " = " + kv.Value);
            lSys.SetVar(kv.Key, kv.Value);
            // lSys.SetVar(variables[i].key, variables[i].value);
        }

        axiom = EditorGUILayout.DelayedTextField("Axiom: ", lSys.GetAxiom());
        lSys.SetAxiom(axiom);

        DrawProductionRules();

        serObj.ApplyModifiedProperties();


        foreach (ProductionRule pr in pRules)
        {
            pr.suc.Clear();
            if (pr.sucRep.Length > 0)
            {
                List <Module> mods = ModuleParser.StringToModuleList(pr.sucRep, lSys);
                pr.suc.InsertRange(0, mods);
            }
        }

        stepSize = EditorGUILayout.FloatField("Segment Length: ", stepSize);
        width    = EditorGUILayout.FloatField("Segment Width: ", width);
        angle    = EditorGUILayout.FloatField("Angle: ", angle);
        num      = EditorGUILayout.IntField("Iterations: ", num);
        numOut   = EditorGUILayout.IntField("Output Count: ", numOut);

        turtlePos = (Interpreter.TurtlePos)EditorGUILayout.EnumPopup("Turtle Position: ", turtlePos);

        GUILayout.FlexibleSpace();

        if (GUILayout.Button("Generate"))
        {
            //Debug.Log("Generating...");

            //Debug.Log(pRules.Count);
            foreach (ProductionRule r in pRules)
            {
                lSys.AddRule(r);
            }


            float xOffset = 10f;

            Material mat = new Material(Shader.Find("Sprites/Default"));
            mat.color = new Color(0.0f, 0.0f, 0.0f, 1.0f);
            AssetDatabase.CreateAsset(mat, "Assets/GeometryMaterial.mat");

            List <Mesh> meshes = new List <Mesh>();
            dupCount = 0;
            dupMap.Clear();

            //string symbols = "Ff+-[]|";
            for (int i = 0; i < numOut; ++i)
            {
                EditorUtility.DisplayProgressBar("Generating Geometry...", "Generating Geometry...", ((float)i / numOut));
                List <Module> mods    = lSys.RunSystem(num);
                string        str_out = "";
                foreach (Module m in mods)
                {
                    str_out += m;
                    //if (symbols.IndexOf(m.sym) != -1)
                }


                //str_out = Regex.Replace(str_out, "[^Ff+*/ ()0-9|,-]", "", RegexOptions.Compiled);
                //str_out.Replace("^[Ff+-()[][0-9]", "");
                //Debug.Log(str_out);

                if (dupMap.ContainsKey(str_out))
                {
                    dupMap[str_out] += 1;
                }
                else
                {
                    dupMap.Add(str_out, 1);
                }
                //Debug.Log(str_out);



                Interpreter intptr = new Interpreter();
                GameObject  go     = new GameObject("Geometry" + i);
                //go.transform.position = Vector3.zero;
                go.transform.position = new Vector3(0f, 0f, 0f);
                MeshFilter   mf = go.AddComponent <MeshFilter>();
                MeshRenderer mr = go.AddComponent <MeshRenderer>();

                //Material mat = new Material(Shader.Find("Sprites/Default"));
                mr.sharedMaterial = mat;
                //mr.sharedMaterial.color = Color.black;
                Mesh newMesh = intptr.InterpretSystem(mods, turtlePos, stepSize, width, angle);
                mf.mesh = newMesh;

                //Dictionary<Vector3, int> vertexCount = new Dictionary<Vector3, int>();
                //foreach (Vector3 v in newMesh.vertices)
                //{
                //    if (vertexCount.ContainsKey(v))
                //    {
                //        vertexCount[v] += 1;
                //    }
                //    else
                //    {
                //        vertexCount.Add(v, 1);
                //    }
                //}

                //bool isDuplicate = false;
                //foreach (Mesh m in meshes)
                //{
                //    Dictionary<Vector3, int> vCount = new Dictionary<Vector3, int>();
                //    foreach (Vector3 v in m.vertices)
                //    {
                //        if (vCount.ContainsKey(v))
                //        {
                //            vCount[v] += 1;
                //        }
                //        else
                //        {
                //            vCount.Add(v, 1);
                //        }
                //    }

                //    bool isDup = true;
                //    if (vertexCount.Keys.Count == vCount.Keys.Count)
                //    {
                //        foreach (KeyValuePair<Vector3, int> kv in vertexCount)
                //        {
                //            if (!vCount.ContainsKey(kv.Key))
                //            {
                //                isDup = false;
                //                break;
                //            }
                //            else if (vCount[kv.Key] != kv.Value)
                //            {
                //                isDup = false;
                //                break;
                //            }
                //        }
                //        if (isDup)
                //        {
                //            isDuplicate = true;
                //            ++dupCount;
                //        }
                //    }
                //}
                //if (!isDuplicate)
                //    meshes.Add(newMesh);

                ++createdCount;

                AssetDatabase.CreateAsset(mf.sharedMesh, "Assets/NewGO" + createdCount + ".mesh");
                //AssetDatabase.CreateAsset(mr.sharedMaterial, "Assets/NewGO" + createdCount + ".mat");
                PrefabUtility.SaveAsPrefabAssetAndConnect(go, "Assets/NewGO" + createdCount + ".prefab", InteractionMode.AutomatedAction);
            }
            EditorUtility.ClearProgressBar();

            foreach (KeyValuePair <string, int> kv in dupMap)
            {
                if (kv.Value > 1)
                {
                    dupCount += kv.Value - 1;
                    Debug.Log("Duplicate Reuslt: " + kv.Key + "\nTimes Generated: " + kv.Value);
                }
            }
            Debug.Log("Num Duplicates: " + dupCount);
        }
        EditorGUILayout.EndScrollView();
    }
Пример #27
0
        // vbe is the com coclass interface from the interop assembly.
        // There is no shared interface between VBA and VB6 types, hence object.
        internal Parser(object vbe) : this()
        {
            if (_parser != null)
            {
                throw new InvalidOperationException("ParserState is already initialized.");
            }

            _vbe       = RootComWrapperFactory.GetVbeWrapper(vbe);
            _vbeEvents = VBEEvents.Initialize(_vbe);
            var declarationFinderFactory = new ConcurrentlyConstructedDeclarationFinderFactory();
            var projectRepository        = new ProjectsRepository(_vbe);

            _state = new RubberduckParserState(_vbe, projectRepository, declarationFinderFactory, _vbeEvents);
            _state.StateChanged += _state_StateChanged;
            var vbeVersion = double.Parse(_vbe.Version, CultureInfo.InvariantCulture);
            var predefinedCompilationConstants = new VBAPredefinedCompilationConstants(vbeVersion);
            var typeLibProvider = new TypeLibWrapperProvider(projectRepository);
            var compilationArgumentsProvider     = new CompilationArgumentsProvider(typeLibProvider, _dispatcher, predefinedCompilationConstants);
            var compilationsArgumentsCache       = new CompilationArgumentsCache(compilationArgumentsProvider);
            var preprocessorErrorListenerFactory = new PreprocessingParseErrorListenerFactory();
            var preprocessorParser              = new VBAPreprocessorParser(preprocessorErrorListenerFactory, preprocessorErrorListenerFactory);
            var preprocessor                    = new VBAPreprocessor(preprocessorParser, compilationsArgumentsCache);
            var mainParseErrorListenerFactory   = new MainParseErrorListenerFactory();
            var mainTokenStreamParser           = new VBATokenStreamParser(mainParseErrorListenerFactory, mainParseErrorListenerFactory);
            var tokenStreamProvider             = new SimpleVBAModuleTokenStreamProvider();
            var stringParser                    = new TokenStreamParserStringParserAdapterWithPreprocessing(tokenStreamProvider, mainTokenStreamParser, preprocessor);
            var projectManager                  = new RepositoryProjectManager(projectRepository);
            var moduleToModuleReferenceManager  = new ModuleToModuleReferenceManager();
            var parserStateManager              = new ParserStateManager(_state);
            var referenceRemover                = new ReferenceRemover(_state, moduleToModuleReferenceManager);
            var supertypeClearer                = new SupertypeClearer(_state);
            var comLibraryProvider              = new ComLibraryProvider();
            var referencedDeclarationsCollector = new LibraryReferencedDeclarationsCollector(comLibraryProvider);
            var comSynchronizer                 = new COMReferenceSynchronizer(_state, parserStateManager, projectRepository, referencedDeclarationsCollector);
            var builtInDeclarationLoader        = new BuiltInDeclarationLoader(
                _state,
                new List <ICustomDeclarationLoader>
            {
                new DebugDeclarations(_state),
                new SpecialFormDeclarations(_state),
                new FormEventDeclarations(_state),
                new AliasDeclarations(_state),
                //new RubberduckApiDeclarations(_state)
            }
                );
            var codePaneSourceCodeHandler   = new CodePaneSourceCodeHandler(projectRepository);
            var sourceFileHandler           = _vbe.TempSourceFileHandler;
            var attributesSourceCodeHandler = new SourceFileHandlerSourceCodeHandlerAdapter(sourceFileHandler, projectRepository);
            var moduleParser = new ModuleParser(
                codePaneSourceCodeHandler,
                attributesSourceCodeHandler,
                stringParser);
            var parseRunner = new ParseRunner(
                _state,
                parserStateManager,
                moduleParser);
            var declarationResolveRunner = new DeclarationResolveRunner(
                _state,
                parserStateManager,
                comSynchronizer);
            var referenceResolveRunner = new ReferenceResolveRunner(
                _state,
                parserStateManager,
                moduleToModuleReferenceManager,
                referenceRemover);
            var parsingStageService = new ParsingStageService(
                comSynchronizer,
                builtInDeclarationLoader,
                parseRunner,
                declarationResolveRunner,
                referenceResolveRunner
                );
            var parsingCacheService = new ParsingCacheService(
                _state,
                moduleToModuleReferenceManager,
                referenceRemover,
                supertypeClearer,
                compilationsArgumentsCache
                );

            _parser = new SynchronousParseCoordinator(
                _state,
                parsingStageService,
                parsingCacheService,
                projectManager,
                parserStateManager
                );
        }
Пример #28
0
        public void RuleParser_SeparateModuleRepresentations_ExceptionTest(string input)
        {
            var parser = new ModuleParser <int>(new IntExpressionParserFactory());

            Assert.Throws <ParserException>(() => parser.SeparateModulesRepresentations(input));
        }