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