Python 2.0 parser module bug(?) and a Q

Pearu Peterson pearu at cens.ioc.ee
Thu Dec 28 05:07:03 EST 2000


On 28 Dec 2000, Martin von Loewis wrote:

> Pearu Peterson <pearu at ioc.ee> writes:
> 
> > I have found that parser module may have a bug in its functions tuple2ast
> > or suite.
> 
> Please report bugs on sourceforge.net/projects/python; on this list,
> they might easily be overlooked.

OK, will do.

> > And my question is (not really related to above):
> > 
> >   Is there inverse function for parser.suite? 
> 
> A colleague of mine has an "unparser" module for Python AST; that is
> not (yet) released to the public, and works not (yet) for 2.0. Please
> contact me if you need more details.

Thanks, but I already wrote a simple inverse parser.suite my self.
See the function ast2string below.

Any constructive critisism is welcome!

Thanks,
	Pearu

from types import *
import string
import parser,token

def _asttuple2str(t,indent=[0]):
    if not isinstance(t,TupleType):
        if isinstance(t,StringType):
            return t+' '
        return '' # if line_info=1 in ast2tuple or ast.totuple
    if not isinstance(t[0],TupleType):
        if token.tok_name.has_key(t[0]):
            if token.tok_name[t[0]]=='INDENT':
                indent[0]+=1
                return '\t'
            if token.tok_name[t[0]]=='DEDENT':
                indent[0]-=1
                return '\r'
            if token.tok_name[t[0]]=='NEWLINE':
                return '\n'+indent[0]*'\t'
            if token.tok_name[t[0]]=='ENDMARKER':
                return t[1]
    return string.join(map(_asttuple2str,t[1:]),'')
def asttuple2str(t,tab=4*' '):
    return _asttuple2str(t).replace('\t\r','').replace('\t',tab)
def ast2string(ast):
    return asttuple2str(ast.totuple())





More information about the Python-list mailing list