File: showparse

package info (click to toggle)
python-docutils 0.3.7-2sarge1
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 3,872 kB
  • ctags: 2,908
  • sloc: python: 27,538; lisp: 641; makefile: 102
file content (48 lines) | stat: -rwxr-xr-x 1,127 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#!/usr/bin/python

"""
This is a tool for exploring abstract syntax trees generated by
``parser.suite()`` from test data in
docutils/test/test_readers/test_python/test_parser or stdin.

Usage::

    showparse <key> <index>

    showparse < <module.py>

Where ``<key>`` is the key to the ``totest`` dictionary, and ``<index>`` is
the index of the list ``totest[key]``.  If no arguments are given, stdin is
used for input.
"""

import sys
import types
import parser
import token
import symbol
import pprint
import test_parser

names = token.tok_name.copy()
names.update(symbol.sym_name)

def name_elements(ast):
    if ast:
        name = names[ast[0]]
        ast[0] = '%s (%s)' % (name, ast[0])
    for node in ast[1:]:
        if type(node) == types.ListType:
            name_elements(node)

if len(sys.argv) > 1:
    key, caseno = sys.argv[1:]
    print 'totest["%s"][%s][0]:\n' % (key, caseno)
    input_text = test_parser.totest[key][int(caseno)][0]
else:
    input_text = sys.stdin.read()
print input_text
module = parser.suite(input_text)
ast = parser.ast2list(module, line_info=1)
name_elements(ast)
pprint.pprint(ast)