I want to hack around with the Python interpreter and try creating a small DSL . Is there any module where I can do something like this theoretical code (similar to LINQ expression trees)?
expression_tree = Function( Print( String('Hello world!') ) ) compile_to_bytecode(expression_tree)
Or would it just be easier to just generate Python source code? Could this be made easier by using C or SWIG or Cython?
ast and compiling the tree into bytecode, as another answer suggests, is probably simplest; generating sources and compiling those, almost as good.
However, to explore lower-level approaches, check out the links from this page; I've found byteplay especially useful (currently doesn't work on 2.6 nor 3.*, only 2.4 or 2.5, but I think fixing it for 2.6 should be easy, as currently discussed in its tracker). I have not used Phil Eby's similarly-featured BytecodeAssembler, but given the author's reputation I'm sure it's worth checking it out!
Both offer a
compile() function that will go from source/AST to "a code object that can be executed by the
exec statement or