def gen_TestUnifyBinary(): parser = Parser() parser.parse_grammar(text=TestUnifyBinary.grammar) parser.compile() sents = [ "a0 b0", "a0 b1", "a1 b0", "a1 b1" ] for sent in sents: print(sent) try: parser.parse(sent) tree = parser.make_tree() tree2 = parser.unify_tree(tree) print(tree2.pformat_ext()) except UnifyError as ue: print(ue) except ParseError as pe: print(pe)
def gen_TestUnify(): parser = Parser() parser.parse_grammar(text=TestUnify.grammar) parser.compile() sents = ["i am watching her", "she is watching me", "these men are watching us", "me am watching you", "she is watching i", "two man is watching it", "a man watch us", "they watch us", "he watches the men", "he watches a men", "i watch him"] for sent in sents: print(sent) try: parser.parse(sent) tree = parser.make_tree() tree2 = parser.unify_tree(tree) print(tree2.pformat_ext()) except UnifyError as ue: print(ue) except ParseError as pe: print(pe)
def test_unify_basic(self): for dst,param,src,exp_up,exp_down in self.cases: with self.subTest(dst=dst,param=param,src=src): try: checklist = [key for key,val in dst.items() if val=='?'] _dst = {key:val for key,val in dst.items() if val!='?'} result = Parser.unify_up(_dst,param,src,checklist) except UnifyError: result = None self.assertEqual(result, exp_up) with self.subTest(dst=dst,param=param,src=src): try: checklist = [key for key,val in dst.items() if val=='?'] _dst = {key:val for key,val in dst.items() if val!='?'} result = Parser.unify_down(_dst,param,src,checklist) except UnifyError: result = None self.assertEqual(result, exp_down)
def setUp(self): parser = Parser() parser.load_grammar(text=self.grammar) parser.compile() self.parser = parser self.maxDiff = None
def genTestMacro(): parser = Parser() parser.parse_grammar(text=TestMacro.grammar) for rule in parser.rules: print(rule)
def setUp(self): parser = Parser() parser.parse_grammar(text=self.grammar) parser.compile() self.parser = parser
from GLRParser import Parser, ParseError, GrammarError, Tree grammar = """ %ifdef token1 %ifdef token2 S -> in : out1 %else S -> in : out2 %endif %else %ifdef token2 S -> in : out3 %else S -> in : out4 %endif %endif S -> in : out """ defines = [ "%define token1\n%define token2\n", "%define token1\n", "%define token2\n", "", ] for define in defines: parser = Parser() print(define) parser.load_grammar(text=define + grammar) print(parser.format_rules())
VP -> Vs : Vs -Ar VP -> Ving : Ving -Hyor VP -> Ved : Ved -dH VP -> Ven : Ven -mHş %macro V -> V,Vs,Ving,Ved,Ven %form V -> turn,turns,turning,turned,turned $V -> $turn : dön $V -> $turn Obj : Obj çevir $V -> $turn Obj down : Obj reddet $V -> $turn down Obj : Obj reddet Subj -> he Obj -> it : onu """ try: parser = Parser() # initialize parser object parser.load_grammar(text=grammar) # load grammar from a file sent = "he turned it down" # sentence to parse print(parser.format_rules()) parser.compile() # constructs parsing tables parser.parse(sent) # parse the sentence tree = parser.make_tree() # generates parse forest ttree = parser.trans_tree(tree) # translate the parse forest print(ttree.pformatr()) # pretty-print the translated parse forest for trans in ttree.enum(): # enumerate and print all alternative translations in the parse forest
import sys sys.path.append("..") from GLRParser import Parser, ParseError, GrammarError, Tree try: parser = Parser() # initialize parser object parser.load_grammar( "..\GLRParser\grm\simple_trans.grm") # load grammar from a file sent = "i saw the man in the house with the telescope" # sentence to parse parser.compile() # constructs parsing tables parser.parse(sent) # parse the sentence tree = parser.make_tree() # generates parse forest ttree = parser.trans_tree(tree) # translate the parse forest print(ttree.pformatr()) # pretty-print the translated parse forest for trans in ttree.enum( ): # enumerate and print all alternative translations in the parse forest print(trans.replace(" -", "")) # concat suffixes except GrammarError as ge: print(ge) except ParseError as pe: print(pe)
def genTransUnify(): # used for data generation parser = Parser() parser.load_grammar(text=TestTransUnify.grammar) parser.compile() parser.parse(TestTransUnify.sent) tree = parser.make_tree() utree = parser.unify_tree(tree) print(utree.pformat_ext()) ttree = parser.trans_tree(utree) #print(ttree.format(3)) #print(ttree.pformat(3)) #print(ttree.str_format(3)) #lst = ttree.list_format(3) #print(Tree.convert_tree(lst).replace(" -","")) trans_list = [parser.post_processor(trans) for trans in ttree.enum()] print(trans_list)
%macro V -> V,Vs,Ving,Ved,Ven %form V -> watch,watches,watching,watched,watched %form V -> go,goes,going,went,gone %suffix_macro V -> base,aorist,caus,passive %suffix V -> izle,izler,izlet,izlen %suffix V -> seyret,seyreder,seyrettir,seyredil %suffix V -> git,gider,götür,gidil $V -> $watch : izle | seyret $V -> $go : git """ try: parser = Parser("EN","TR") # initialize parser object parser.load_grammar(text=grammar) # load grammar from a text sent = "i watch" # sentence to parse parser.compile() # constructs parsing tables parser.parse(sent) # parse the sentence tree = parser.make_tree() # generates parse forest ttree = parser.trans_tree(tree) # translate the parse forest print(ttree.pformatr()) # pretty-print the translated parse forest for trans in ttree.enum(): # enumerate and print all alternative translations in the parse forest print(trans) # raw outpu print(parser.post_processor(trans)) # postprocessed output
def setUp(self): parser = Parser() parser.load_grammar(text=self.grammar, reverse=self.reverse) parser.compile() self.parser = parser
def genTestCost(cls): parser = Parser() parser.load_grammar(text=cls.grammar, reverse=cls.reverse) parser.compile() for sent in cls.sents: parser.parse(sent) tree = parser.make_tree() utree = parser.unify_tree(tree) ttree = parser.trans_tree(utree) print(list(sorted(ttree.enumx())))
def genTrans(): # used for data generation parser = Parser() parser.parse_grammar(text=TestTrans.grammar) parser.compile() parser.parse(TestTrans.sent) tree = parser.make_tree() ttree = parser.trans_tree(tree) print(ttree.formatr()) print(ttree.pformatr()) print(ttree.str_formatr()) lst = ttree.list_formatr() #print(Tree.convert_tree(lst).replace(" -","")) trans_list = [parser.post_processor(trans) for trans in ttree.enum()] print(trans_list)