def makeGrammar(cls, grammar, name='Grammar'): """ Define a new parser class with the rules in the given grammar. @param grammar: A string containing a PyMeta grammar. @param name: The name of the class to be generated. @param superclass: The class the generated class is a child of. """ g = cls(grammar) if TIMING: start = time.time() tree = g.parseGrammar(name) if TIMING: print "Grammar %r parsed in %g secs" % (name, time.time() - start) def cnt(n): count = sum(cnt(a) for a in n.args) + 1 return count print "%d nodes." % (cnt(tree)) start = time.time() modname = "pymeta_grammar__" + name filename = "/pymeta_generated_code/" + modname + ".py" source = writePython(tree, grammar) if TIMING: print "Grammar %r generated in %g secs" % (name, time.time() - start) return moduleFromGrammar(source, name, modname, filename)
def makeGrammar(cls, grammar, name='Grammar'): """ Define a new parser class with the rules in the given grammar. @param grammar: A string containing a PyMeta grammar. @param name: The name of the class to be generated. @param superclass: The class the generated class is a child of. """ g = cls(grammar) if TIMING: start = time.time() tree = g.parseGrammar(name) if TIMING: print "Grammar %r parsed in %g secs" % (name, time.time() - start) def cnt(n): count = sum(cnt(a) for a in n.args) + 1 return count print "%d nodes." % (cnt(tree)) start = time.time() modname = "pymeta_grammar__" + name filename = "/pymeta_generated_code/" + modname + ".py" source = writePython(tree) if TIMING: print "Grammar %r generated in %g secs" % (name, time.time() - start) return moduleFromGrammar(source, name, modname, filename)
def makeGrammar(cls, grammar, name): """ Define a new parser class with the rules in the given grammar. @param grammar: A string containing a PyMeta grammar. @param globals: A dict of names that should be accessible by this grammar. @param name: The name of the class to be generated. @param superclass: The class the generated class is a child of. """ g = cls(grammar) tree = g.parseGrammar(name) modname = "pymeta_grammar__" + name filename = "/pymeta_generated_code/" + modname + ".py" source = g.writeTerm(tree) return moduleFromGrammar(source, name, modname, filename)