Exemple #1
0
        public static void BuildAbstractSyntaxTree(earley.EarleyParser parser)
        {
            List<string> child = new List<string>();
            List<List<string>> tree = new List<List<string>>();


            parser.Charts.Reverse();
            foreach (var chart in parser.Charts)
                chart.chart.Reverse();

            parser.Words.Reverse();
            foreach (var word in parser.Words)
            {
                hasSChanged = false;
                collapse = false;
                BuildSyntaxNode(parser, word, child);
                tree.Add(child);
                child = new List<string>();

            }

            foreach (var ch in tree)
            {
                string line = "";
                foreach (var node in ch.AsEnumerable().Reverse())
                {
                    line += "\t" + node;
                }
                Console.WriteLine(line);
            }
        }
Exemple #2
0
        public static void BuildSyntaxNode(earley.EarleyParser parser, string s, List<string> tree)
        {
            foreach (var charts in parser.Charts)
            {

                MatchEnum? match = null;
                foreach (var chart in charts.chart)
                {
                    if (hasSChanged)
                    {
                        match = charts.chart.MatchLevelInRightTermsOnStateList(s);
                        if (match == MatchEnum.None) break;

                        if (match == MatchEnum.Perfect)
                        {
                            if (chart.termsRight.termsRight.ContainsPerfectMatchAfterDot(s))
                                BuildChartTree(chart, ref tree, ref s, match);
                        }
                        else if (match == MatchEnum.Good)
                        {
                            if (chart.termsRight.termsRight.ContainsAfterDot(s))
                                BuildChartTree(chart, ref tree, ref s, match);
                        }

                        if (collapse) return;
                    }
                    else
                    {
                        if (chart.termsRight.termsRight.Contains(s))
                        {
                            BuildChartTree(chart, ref tree, ref s);
                            hasSChanged = true;
                        }
                    }

                }
            }
        }
Exemple #3
0
        private static void BuildChartTree(earley.State chart, ref List<string> tree, ref string s, MatchEnum? match = null)
        {
            if (hasSChanged)
            {
                foreach (var term in chart.termsRight.termsRight.StringListAfterDot())
                    if (term != earley.DOT && term == s)
                        tree.Add(term);
            }
            else
            {
                foreach (var term in chart.termsRight.termsRight)
                    if (term != earley.DOT && term == s)
                        tree.Add(term);
            }

            if (chart.termsLeft == "S")
            {
                tree.Add(chart.termsLeft);
                collapse = true;
            }
            else
                s = chart.termsLeft;
        }
Exemple #4
0
        public static void RunTest(p.Grammar grammar, List<string> sentence)
        {
            //Printing out what the sentence is
            Console.WriteLine(p.GetStringFromList(sentence));

            //Initializing parser
            p.EarleyParser parser = new p.EarleyParser();

            //Printing information if parsing was successfull (sentence was parsed for given grammar or not)
            Console.WriteLine(parser.Parse(sentence, grammar) ? "Parsed successfully +" : "Parsing was unsuccessfull -");

            //Printing chart
            parser.PrintOutChart();
            EarleyParserLogic.ASTLogic.BuildAbstractSyntaxTree(parser);
            Program.WaitForPress();
        }