We're back after a server migration that caused effbot.org to fall over a bit harder than expected. Expect some glitches.

A Python Code Generator

March 23, 1998 | Fredrik Lundh

A common complaint about Python’s syntax is that it’s impossible to generate Python code on the fly, from a program. Here’s a simple helper class that helps you do exactly that:

#
# a Python code generator backend
#
# fredrik lundh, march 1998
#
# fredrik@pythonware.com
# http://www.pythonware.com
#

import sys, string

class CodeGeneratorBackend:
    
    def begin(self, tab="\t"):
        self.code = []
        self.tab = tab
        self.level = 0

    def end(self):
        return string.join(self.code, "")

    def write(self, string):
        self.code.append(self.tab * self.level + string)

    def indent(self):
        self.level = self.level + 1 

    def dedent(self):
        if self.level == 0:
            raise SyntaxError, "internal error in code generator"
        self.level = self.level - 1 

And here’s how it can be used:

c = CodeGeneratorBackend()

c.begin(tab="    ")

c.write("for i in range(1000):\n")
c.indent()
c.write("print 'code generation is trivial'")
c.dedent()

print c.end()

Which prints:

for i in range(1000):
    print 'code generation is trivial'