Python AST 可视化工具(支持 Kotlin & Java) 的完整代码,你可以在左侧 Canvas 中直接查看、修改或扩展。

# AST Visualizer for Kotlin and Java using tree-sitter
# Requirements: pip install tree_sitter tree_sitter_languages graphviz
# And graphviz system package installed.

from tree_sitter import Language, Parser
from tree_sitter_languages import get_language
from graphviz import Digraph

# Load languages
java_lang = get_language('java')
kotlin_lang = get_language('kotlin')

parser = Parser()


def parse_code(code: str, lang: str):
    if lang.lower() == 'java':
        parser.set_language(java_lang)
    elif lang.lower() == 'kotlin':
        parser.set_language(kotlin_lang)
    else:
        raise ValueError('Unsupported language')
    return parser.parse(bytes(code, 'utf8')).root_node


def visualize_ast(node, graph, parent_id=None):
    node_id = str(id(node))
    label = f"{node.type}"
    graph.node(node_id, label)
    if parent_id:
        graph.edge(parent_id, node_id)
    for child in node.children:
        visualize_ast(child, graph, node_id)


def generate_ast_graph(code: str, lang: str, output_path: str = 'ast_output'): 
    root = parse_code(code, lang)
    graph = Digraph(comment=f"AST for {lang}")
    visualize_ast(root, graph)
    graph.render(output_path, format='png', cleanup=True)
    return output_path + '.png'


if __name__ == '__main__':
    kotlin_sample = """
    fun add(a: Int, b: Int): Int {
        return a + b
    }
    """

    java_sample = """
    public class Test {
        public int add(int a, int b) {
            return a + b;
        }
    }
    """

    print(generate_ast_graph(kotlin_sample, 'kotlin', 'kotlin_ast'))
    print(generate_ast_graph(java_sample, 'java', 'java_ast'))

这个工具基于:

tree-sitter(解析 Kotlin、Java 的语法树)

graphviz(渲染 AST 树结构为 PNG)

运行方式:

pip install tree_sitter tree_sitter_languages graphviz
brew install graphviz   # macOS

执行后会生成:

  • kotlin_ast.png
  • java_ast.png

如果你希望:

  • 添加 Web 可视化版本(Flask/Web)
  • 添加 AST 节点点击展开/折叠
  • 添加 AST → JSON 导出
  • 添加 代码高亮 + AST 双视图

我可以继续帮你扩展。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐