def check(rules): grammar = Grammar(rules, goal_nts=['goal']) out = io.StringIO() self.assertRaisesRegex( ValueError, r"ambiguous grammar|reduce-reduce conflict", lambda: gen.generate_parser(out, grammar))
def testAmbiguous(self): # This grammar should fail verification. # It's ambiguous: is ABC s(A)y(BC) or s(AB)y(C)? grammar = Grammar({ 'goal': [ ['s', 'y'], ], 's': [ ['A'], ['s', 'B'], ], 'y': [ ['C'], ['B', 'C'], ], }) out = io.StringIO() self.assertRaisesRegex(ValueError, r"shift-reduce conflict", lambda: gen.generate_parser(out, grammar))