def compile(self, grammar): """ Produce an object capable of parsing via this grammar. @param grammar: A string containing an OMeta grammar. """ g = self.classTested(dedent(grammar)) tree = g.parseGrammar('TestGrammar', TreeBuilder) result = moduleFromGrammar(tree, 'TestGrammar', OMetaBase, {}) return HandyWrapper(result)
def compile(self, grammar): """ Produce an object capable of parsing via this grammar. @param grammar: A string containing an OMeta grammar. """ from pymeta3.grammar import OMetaGrammar, NullOptimizer g = OMetaGrammar(dedent(grammar)) tree = g.parseGrammar('TestGrammar', TreeBuilder) opt = NullOptimizer([tree]) opt.builder = TreeBuilder("TestGrammar", opt) tree, err = opt.apply("grammar") grammarClass = moduleFromGrammar(tree, 'TestGrammar', OMetaBase, {}) return HandyWrapper(grammarClass)
def test_bindingAccess(self): """ Bound names in a rule can be accessed on the grammar's "locals" dict. """ gg = self.classTested("stuff = '1':a ('2':b | '3':c)") t = gg.parseGrammar('TestGrammar', TreeBuilder) G = moduleFromGrammar(t, 'TestGrammar', OMetaBase, {}) g = G("12") self.assertEqual(g.apply("stuff")[0], '2') self.assertEqual(g.locals['stuff']['a'], '1') self.assertEqual(g.locals['stuff']['b'], '2') g = G("13") self.assertEqual(g.apply("stuff")[0], '3') self.assertEqual(g.locals['stuff']['a'], '1') self.assertEqual(g.locals['stuff']['c'], '3')