示例#1
0
        private void InitializeParsers()
        {
            #region Grammar
            Grammar = new Grammar();
            //Grammar.Load();
            var finiteAutomaton = new FiniteAutomaton();

            dynamic parser = ParserManager.InitializeParser(
                "GrammarParser.dll",
                "GrammarParser.GrammarParser",
                Configuration.Path.GrammarInputXml,
                Configuration.Parser.ShouldIncludeTerminalsFromInsideOfDefinedTokens,
                Configuration.Parser.ShouldConvertLeftRecursionToRight);


            Grammar.Parse(parser);

            var controlTerminals = Grammar.Nodes.Terminals.Where(n => n.IsControl).Select(n => n.Name).ToArray();

            Editor.DocumentOpened += (doc) => mainWindow.ScriptEditor.ApplyTextColor(doc, controlTerminals, Color.FromRgb(0, 0, 255));


            // Parse finite automaton

            parser = ParserManager.InitializeParser(
                "FiniteAutomatonParser.dll",
                "FiniteAutomatonParser.FiniteAutomatonParser",
                Grammar.ClassTable,
                Grammar.Nodes,
                Grammar.UnclassifiedTerminals);

            finiteAutomaton.Parse(parser);
            //finiteAutomaton.Save();
            //finiteAutomaton.Load();


            SaveGrammarTxt(Grammar);
            SaveGrammarFactorizedTxt(Grammar);
            //Grammar.Save();

            #endregion


            ParserManager.InitializeParser(
                "SyntaxRecursiveParser.dll",
                "SyntaxRecursiveParser.SyntaxRecursiveParser",
                true,
                Grammar.ClassTable.TokenClasses.Forward(Grammar.ClassTable.UndefinedTokenClassName),
                Grammar.Nodes.Axiom);

            //PushdownAutomaton pushdownAutomaton = new PushdownAutomaton();
            //pushdownAutomaton.Load();


            //ParserManager.InitializeParser(
            //    "SyntaxPushdownParser.dll",
            //    "SyntaxPushdownParser.SyntaxPushdownParser",
            //    pushdownAutomaton,
            //    Grammar.Nodes,
            //    true,
            //    Grammar.ClassTable.TokenClasses.Forward(Grammar.ClassTable.UndefinedTokenClassName));

            ParserManager.InitializeParser(
                "TokenParser.dll",
                "TokenParser.TokenParser",
                Grammar.Nodes,
                Grammar.ClassTable,
                finiteAutomaton);

            ParserManager.InitializeParser(
                "SemanticParser.dll",
                "SemanticParser.SemanticParser",
                Grammar.ClassTable,
                Grammar.Nodes);


            #region Predescence
            //Create predescence table

            //parser = ParserManager.InitializeParser(
            //   "PredescenceTableParser.dll",
            //   "PredescenceTableParser.PredescenceTableParser",
            //   Grammar.Nodes);

            //var predescenceTable = new PredescenceTable();
            //predescenceTable.Parse(parser);

            //var f = (Func<IEnumerable<IParsedToken>>)(() => ParsedTokens);

            //parser = ParserManager.InitializeParser(
            //   "SyntaxPredescenceTableParserWithPOLIZ.dll",
            //   "SyntaxPredescenceTableParser.SyntaxPredescenceTableParser",
            //   predescenceTable.Nodes,
            //   f,
            //   Grammar.Nodes,
            //   Grammar.Nodes.Axiom);

            //parser = ParserManager.InitializeParser(
            //    "SyntaxPredescenceTableParser.dll",
            //    "SyntaxPredescenceTableParser.SyntaxPredescenceTableParser",
            //    predescenceTable.Nodes,
            //    f,
            //    Grammar.Nodes,
            //    Grammar.Nodes.Axiom);

            //SavePredescenceTableTxt(predescenceTable, Grammar);

            #endregion


            ParserManager.InitializeParser(
                "RpnParser.dll",
                "RpnParser.RpnParser",
                Grammar.Nodes,
                Configuration.Path.StatementRulesXml);
        }