Code generation architecture question

Aaron Brady castironpi at gmail.com
Fri Nov 14 03:04:14 EST 2008


On Nov 13, 7:16 pm, Alex_Gaynor <alex.gay... at gmail.com> wrote:
> I'm trying to figure out what the best architecture for doing code
> generation would be.  I have a set of ASTs that define a program, so
> what should I do to for code generation.  As I see it the 2 choices
> are to have the ASTs have a generate code method that returns the
> correct code for themselves, or to have a seperate class that
> generates code for a given AST.  The problem with the first is that it
> isn't very flexible if I want to generate code for a new language/
> platform, as well as the fact that it is very tightly coupled.
> However the issue with the other approach is that I can't think of a
> good way to write it without have a ton of if isinstance() calls.  Any
> thoughts on what the best appraoch would be?

I think you are seeking the Visitor Pattern.

class A:
  def meth( self, visitor ):
    visitor.visit_classA( self )

class B:
  def meth( self, visitor ):
    visitor.visit_classB( self )

class Visitor:
  def visit_classA( self, objinst ):
    #handle classA
  def visit_classB( self, objinst ):
    #handle classB

then A().meth( v ) gets around to getting v.visit_classA called.  The
code is moderately repetitive.  I believe the Transformer class in the
'ast' module uses the visitor pattern, possibly called NodeWalker or
something.



More information about the Python-list mailing list