GeezerVisonThe World Wide Web, restored to 800 pixels of glory. |
| Home|About|Gaming cabinet|Archives|How it works|Starter sites |
GeezerVison is showing github.com — RustPython/crawl_sourcecode.py at master · lineCode/RustPython Expand file tree/ Copy pathcrawl_sourcecode.pyMore file actions 83 lines (69 loc) · 2.16 KB / Copy pathcrawl_sourcecode.pyFile metadata and controls83 lines (69 loc) · 2.16 KB 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 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 """ This script can be used to test the equivalence in parsing between rustpython and cpython. Usage example: $ python crawl_sourcecode.py crawl_sourcecode.py > cpython.txt $ cargo run crawl_sourcecode.py crawl_sourcecode.py > rustpython.txt $ diff cpython.txt rustpython.txt """ import ast import sys import symtable import dis filename = sys.argv[1] print('Crawling file:', filename) with open(filename, 'r') as f: source = f.read() t = ast.parse(source) print(t) shift = 3 def print_node(node, indent=0): indents = ' ' * indent if isinstance(node, ast.AST): lineno = 'row={}'.format(node.lineno) if hasattr(node, 'lineno') else '' print(indents, "NODE", node.__class__.__name__, lineno) for field in node._fields: print(indents,'-', field) f = getattr(node, field) if isinstance(f, list): for f2 in f: print_node(f2, indent=indent+shift) else: print_node(f, indent=indent+shift) else: print(indents, 'OBJ', node) print_node(t) # print(ast.dump(t)) flag_names = [ 'is_referenced', 'is_assigned', 'is_global', 'is_local', 'is_parameter', 'is_free', ] def print_table(table, indent=0): indents = ' ' * indent print(indents, 'table:', table.get_name()) print(indents, ' ', 'name:', table.get_name()) print(indents, ' ', 'type:', table.get_type()) print(indents, ' ', 'line:', table.get_lineno()) print(indents, ' ', 'identifiers:', table.get_identifiers()) print(indents, ' ', 'Syms:') for sym in table.get_symbols(): flags = [] for flag_name in flag_names: func = getattr(sym, flag_name) if func(): flags.append(flag_name) print(indents, ' sym:', sym.get_name(), 'flags:', ' '.join(flags)) if table.has_children(): print(indents, ' ', 'Child tables:') for child in table.get_children(): print_table(child, indent=indent+shift) table = symtable.symtable(source, 'a', 'exec') print_table(table) print() print('======== dis.dis ========') print() co = compile(source, filename, 'exec') dis.dis(co) |
| You are visitor 01402503 — GeezerVison does not store the pages you look up. Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required. |