1 Star 3 Fork 0

rustup/RustPython

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
crawl_sourcecode.py 2.16 KB
一键复制 编辑 原始数据 按行查看 历史
""" 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)
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Rust
1
https://gitee.com/rustup/RustPython.git
git@gitee.com:rustup/RustPython.git
rustup
RustPython
RustPython
main

搜索帮助