print "lexical productions", lprod x.append(lprod) xe.append(lprod) factory.number_lexical_productions = lprod fkpn = 0.0 f1p = 0.0 for grammar in xrange(number_grammars): grammar = factory.make_grammar() print grammar.language_infinite(), len(grammar.nonterminals) #print grammar #grammar.dump() # us = uniformsampler.UniformSampler(grammar,max_length) ## now test if it has the fcp and fkp. eanswer = cfgfcp.test_one_fkp_exact(grammar, 10) if eanswer: f1p += 1 answer = cfgfcp.test_strong_fkp_full(grammar, k) print "FKPK", answer if answer: fkpn += 1 if eanswer and not answer: grammar.dump() #raise ValueError() print "count k = ", fkpn print "count exact = ", f1p ratio = fkpn / number_grammars y.append(ratio) ye.append( f1p/ number_grammars)
# Display information about the experiment. trial_heading = "Grammar " + str(i + 1) + ": " if grammar.language_infinite(): trial_heading += "Infinite" else: trial_heading += "Finite" trial_heading += " with " + str(len( grammar.nonterminals)) + " nonterminals" print trial_heading # Test if the grammar has the 1-FKP. # Make two copies of the grammar: one with and one without lexical rules. grammar_no_lex = deepcopy(grammar) try: grammar.trim() answer = cfgfcp.test_one_fkp_exact(grammar, 10) grammar_no_lex.remove_lexical_rules() grammar_no_lex.trim() answer_no_lex = cfgfcp.test_one_fkp_exact(grammar_no_lex, 10) except: print "An error occurred. Trying again." no_error = False continue # Report and record the results. print "1-kernels: " + str(answer) print "1-kernels (no lex): " + str(answer_no_lex) if answer: fkpn += 1 if answer_no_lex:
#for lprod in [25, 50, 100,150,200,250,300]: print "lexical productions", lprod x.append(lprod) factory.number_lexical_productions = lprod fkpn = 0.0 for grammar in xrange(number_grammars): grammar = factory.make_grammar() print grammar.language_infinite(), len(grammar.nonterminals) #print grammar #grammar.dump() # us = uniformsampler.UniformSampler(grammar,max_length) ## now test if it has the fcp and fkp. print "Exact", cfgfcp.test_one_fkp_exact(grammar, 10) answer = cfgfcp.test_strong_fkp_full(grammar, k) print "FKPK", answer if answer: fkpn += 1 print "ratio = ", fkpn ratio = fkpn / number_grammars y.append(ratio) print x print y plt.plot(x,y)
#for lprod in [25, 50, 100,150,200,250,300]: print "lexical productions", lprod x.append(lprod) xe.append(lprod) factory.number_lexical_productions = lprod fkpn = 0.0 f1p = 0.0 for grammar in xrange(number_grammars): grammar = factory.make_grammar() print grammar.language_infinite(), len(grammar.nonterminals) #print grammar #grammar.dump() # us = uniformsampler.UniformSampler(grammar,max_length) ## now test if it has the fcp and fkp. eanswer = cfgfcp.test_one_fkp_exact(grammar, 10) if eanswer: f1p += 1 answer = cfgfcp.test_strong_fkp_full(grammar, k) print "FKPK", answer if answer: fkpn += 1 if eanswer and not answer: grammar.dump() #raise ValueError() print "count k = ", fkpn print "count exact = ", f1p ratio = fkpn / number_grammars y.append(ratio) ye.append(f1p / number_grammars)
def test_full_1fkp_exact3(self): grammar = cfg.load_from_file("../data/cfgs/atwice.cfg") self.assertTrue(cfgfcp.test_one_fkp_exact(grammar, 10))
def test_full_1fkp_exact2(self): grammar = cfg.load_from_file("../data/cfgs/abab2.cfg") self.assertFalse(cfgfcp.test_one_fkp_exact(grammar, 10))