private static void ComplexMovementTest() { var voc = Vocabulary.GetVocabularyFromFile(@"Vocabulary.json"); var grammar = new Grammar(voc); Program.AddTypesToGrammar(grammar); grammar.AddProjectionTypeToTypeDictionary("CP", "N"); // no overt POS here, head of IP is V. grammar.AddProjectionTypeToTypeDictionary("IP", "N"); // no overt POS here, head of IP is V. grammar.AddRule(new Rule(1, "START", new[] { "CP" }, 0, 0)); grammar.AddRule(new Rule(1, "START", new[] { "IP" }, 0, 0)); //grammar.AddRule(new Rule(1, "CP", new[] { "IP" }, 0, 0)); //grammar.AddRule(new Rule(1, "IP", new[] { "NP" }, 0, 0)); //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.AddNonTerminalToLandingSites("IP"); grammar.AddMoveable("NP"); grammar.AddMoveable("PP"); grammar.GenerateDerivedRulesFromSchema(); var parser = new Parser(grammar, true); var n = parser.ParseSentence("Who Who Who"); n.Print(); }
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(2, "VP", new[] { "V4", "LP" }, 0, 1)); grammar.AddRule(new Rule(2, "VP", new[] { "V5", "MP" }, 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.AddRule(new Rule(0, "LP", new[] { "L", "PP" }, 0, 1)); grammar.AddRule(new Rule(0, "MP", new[] { "M", "LP" }, 0, 1)); grammar.AddNonTerminalToLandingSites("CP"); grammar.AddMoveable("NP"); grammar.AddMoveable("PP"); grammar.AddMoveable("LP"); grammar.AddMoveable("MP"); }
public bool InsertRuleWithANewSymbol(Grammar grammar) { for (var i = 0; i < NumberOfRetries; i++) { var existingLHSNonTerminal = grammar.GetRandomRule().Name.NonTerminal; if (existingLHSNonTerminal == grammar.StartSymbol) { continue; } var newLHSNonTerminal = grammar.GetNextAvailableProjectionName(); var typeOfExistingLHS = grammar.NonTerminalsTypeDictionary[existingLHSNonTerminal]; grammar.AddProjectionTypeToTypeDictionary(newLHSNonTerminal, typeOfExistingLHS); //grammar.AddRule(new Rule(0, grammar.StartSymbol, new[] { newLHSNonTerminal, grammar.StartSymbol }, 0, 1)); // grammar.AddRule(new Rule(0, grammar.StartSymbol, new[] { newLHSNonTerminal }, 0, 0)); grammar.AddRule(new Rule(0, newLHSNonTerminal, new[] { existingLHSNonTerminal }, 0, 0)); return(true); } return(false); }
private static Grammar InfiniteMovementGrammar2() { var voc = Vocabulary.GetVocabularyFromFile(@"..\..\..\Input\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[] { "NP", "IP" }, 1, 1)); grammar.AddRule(new Rule(1, "IP", new[] { "NP", "CP" }, 1, 1)); grammar.AddRule(new Rule(1, "PP", new[] { "V2", "P" }, 1, 0)); grammar.AddRule(new Rule(1, "NP", new[] { "D", "N" }, 1, 0)); var does = grammar.DoesGrammarAllowInfiniteMovement(); return(grammar); }
private static void TestMovement2() { 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[] { "VP", "VP" }, 1, 1)); grammar.AddRule(new Rule(1, "VP", new[] { "VP", "PP" }, 0, 1)); grammar.AddRule(new Rule(1, "VP", new[] { "NP", "V1" }, 1, 0)); grammar.AddRule(new Rule(1, "PP", new[] { "V2", "P" }, 1, 0)); grammar.AddRule(new Rule(1, "NP", new[] { "D", "N" }, 1, 0)); var parser = new Parser(grammar, true); var n = parser.ParseSentence("the man arrived to Mary"); //supposed to fail in parsing!! n.Print(); }