コード例 #1
0
ファイル: TestCases.cs プロジェクト: JosephPotashnik/LIG
        private static void SimpleMovementTest()
        {
            var voc = Vocabulary.GetVocabularyFromFile(@"Vocabulary.json");
            var grammar = new Grammar(voc);
            Program.AddTypesToGrammar(grammar);

            grammar.AddProjectionTypeToTypeDictionary("CP", "V"); // no overt POS here, head of IP is V.
            grammar.AddProjectionTypeToTypeDictionary("IP", "V"); // no overt POS here, head of IP is V.
            grammar.AddRule(new Rule(1, "START", new[] {"CP"}, 0, 0));
            grammar.AddRule(new Rule(1, "CP", new[] {"IP"}, 0, 0));
            grammar.AddRule(new Rule(1, "IP", new[] {"NP", "VP"}, 1, 1));
            grammar.AddRule(new Rule(1, "VP", new[] {"V1", "NP"}, 0, 1));
            grammar.AddRule(new Rule(1, "VP", new[] {"V2", "PP"}, 0, 1));
            grammar.AddRule(new Rule(1, "PP", new[] {"P", "NP"}, 0, 1));
            grammar.AddRule(new Rule(1, "NP", new[] {"D", "N"}, 1, 0));
            grammar.AddNonTerminalToLandingSites("CP");
            grammar.AddMoveable("NP");
            grammar.AddMoveable("PP");
            grammar.GenerateDerivedRulesFromSchema();

            var parser = new Parser(grammar);
            var n = parser.ParseSentence("Who the bells toll for");
            n.Print();
            n = parser.ParseSentence("Who a man arrived from");
            n.Print();
            n = parser.ParseSentence("from Who a man arrived");
            n.Print();
            n = parser.ParseSentence("John David kissed");
            n.Print();
        }
コード例 #2
0
ファイル: Program.cs プロジェクト: JosephPotashnik/LIG
        public static void CreateMovementGrammar(Grammar grammar)
        {
            AddTypesToGrammar(grammar);
            grammar.AddProjectionTypeToTypeDictionary("IP", "V"); // no overt POS here, head of IP is V.

            grammar.AddRule(new Rule(1, "START", new[] {"IP"}, 0, 0));
            grammar.AddRule(new Rule(1, "START", new[] {"CP"}, 0, 0));

            grammar.AddRule(new Rule(0, "CP", new[] {"C", "IP"}, 0, 1));
            grammar.AddRule(new Rule(0, "IP", new[] {"NP", "VP"}, 1, 1));

            grammar.AddRule(new Rule(0, "VP", new[] {"V1", "NP"}, 0, 1));
            grammar.AddRule(new Rule(0, "VP", new[] {"V2", "PP"}, 0, 1));
            grammar.AddRule(new Rule(2, "VP", new[] {"V3", "CP"}, 0, 1));

            grammar.AddRule(new Rule(0, "NP", new[] {"D", "N"}, 1, 0));
            grammar.AddRule(new Rule(0, "PP", new[] {"P", "NP"}, 0, 1));

            grammar.AddNonTerminalToLandingSites("CP");
            grammar.AddMoveable("NP");
            grammar.AddMoveable("PP");
        }
コード例 #3
0
        public bool AddRuleToLandingSites(Grammar grammar)
        {
            for (var i = 0; i < NumberOfRetries; i++)
            {
                var rule = grammar.GetRandomRule();
                //var movementSymbol = rule.NonComplementTerm;

                //if movement symbol is LHS for some rule..
                if (!grammar.LandingSites.Contains(rule.Name.NonTerminal))
                {
                    grammar.AddNonTerminalToLandingSites(rule.Name.NonTerminal);
                    return true;
                }
            }
            return false;
        }