Compiler, ast and forwards/backwards compatibility

Orestis Markou orestis at
Thu Oct 9 12:11:59 CEST 2008

On Wed, Oct 8, 2008 at 9:14 PM, "Martin v. Löwis" <martin at> wrote:
>> The documentation for the ast module states that it "helps to find out
>> programmatically what the current grammar looks like". I can't find
>> any reference (even when reading the code) on how you should go about
>> this, other than checking the sys.version number and reading up on the
>> changes.
> Not sure what "this" is, but if you mean what you quoted - what does
> that have to do with version numbers?
> To find out what the grammar looks like, just inspect the classes in
> the _ast module, e.g.
> py> _ast.For._fields
> ('target', 'iter', 'body', 'orelse')
> py> _ast.For._attributes
> ['lineno', 'col_offset']

Thanks, that clears things up a bit.

> In any case, you shouldn't look at sys.version, but at _ast.__version__

Right - the documentation says I should look at ast.__version__ (not
_ast.__version__), which doesn't exist. I've filed a bug report about
> To see the source code version of that, look at Python/Parser.asdl.
>> My understanding is that there is no way to write, say, an ast visitor
>> that runs under Python 3.0 that targets 2.4 because the ast has
>> changed, and there's no way to indicate that you want to parse another
>> version.
> I wouldn't say that. The writer might not be trivial, but should be
> fairly simple. It can't be 1:1, because, as you say, the AST has
> changed.
>> I guess that Python 2.6 can target Python 2.3-6, and with specific
>> compiler flags it can also target 3.0, so it seems that the correct
>> thing to do is to use that.
> Depends on what you want to do. To transform source code so that
> people can still read and understand it, the _ast module might be
> inappropriate, as it drops all comments.
> For code-rewriting applications, look at lib2to3 instead.
>> Am I correct? Am I seriously confused? Please help!
> I think you are a little confused.

:) Hopefully as I start coding against ast I'll understand more about this.

> Regards,
> Martin
> --

orestis at

More information about the Python-list mailing list