[Compiler-sig] progress on new AST

Jeremy Hylton jeremy@zope.com
Wed, 10 Apr 2002 18:55:18 -0400


>>>>> "FB" == Finn Bock <bckfnn@worldonline.dk> writes:

  FB> [Jeremy Hylton]
  >> There is a python.asdl that defines an AST that is reasonably
  >> complete, although it has rough edges (slices, etc.).

  FB> Keep in mind that I'm a newbie at reading asdl,

I'd recommend you read Dan Wang's DSL 97 paper:
http://www.cs.princeton.edu/~danwang/Papers/dsl97/dsl97-abstract.html.
It's an easy read.  It describes the ASDL syntax and shows small
examples of an AST and code generated for C and Java.  

  FB> Keep in mind that I'm a newbie at reading asdl, but how is it
  FB> expressed that a 'Module' contain a list of 'stmts', while a
  FB> FunctionDef only contain one 'name'?

Your question pointed out an embarassing bug in the python.asdl file
:-).  If we take an example "constructor" (with fix applied):

    stmt = ClassDef(identifier name, expr* bases, stmt* body)

The lhs is the name of the type, the rhs is a constructor signature.
The constructor takes three arguments.  The type is on the left, the
name is on the right.  identifier is a builtin type.  expr and stmt
are defined in python.asdl.  There are two type modifiers * and ?.
The * means sequence of 0 or more.  The ? means optional.

So a class has a single name, an arbitrary number of base class
expressions, and an arbitrary number of stmts.  

The bug is that Module, FunctionDef, and ClassDef were define to
contain a single statement.  I'm sure that's what confused you.

  >> I've also written a simple C code generator that turns the ast
  >> definition into C code that defines structs and constructor
  >> functions.

  FB> I'm playing around with generating java code and all the needed
  FB> information seems to be available, but I can't quite make sense
  FB> of the basic idea behind the datastructures we are generating
  FB> from. What is a Sum and what is a Product in this sense?

A Sum is a set of type constructors -- so stmt is a sum type.  A
Product is like listcomp -- a single unnamed constructor.  For a sum
type, a value can be any one of the constructors.  For a product,
there is only one constructor.

The DSL paper represents a sum as a C union with a struct element for
each constructor.  It is silent on products, but I've chosen to
represent it as a single struct.

Feel free to check in any Java-generating code in the sandbox.

Jeremy