Compiler, ast and forwards/backwards compatibility
"Martin v. Löwis"
martin at v.loewis.de
Wed Oct 8 22:14:36 CEST 2008
> 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
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.
('target', 'iter', 'body', 'orelse')
In any case, you shouldn't look at sys.version, but at _ast.__version__
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
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
> 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.
More information about the Python-list