代码解析工具汇总

代码解析工具

  • 一.针对多种语言
    • ANTLR
    • SonarQube
    • tree-sitter
  • 二.针对C语言
    • pycparser
    • Joern
  • 三.针对Java
    • Javalang
    • JavaParser
    • Eclipse AstParser
  • 四.针对python
    • ast库
    • tokenize库

代码解析工具的主要作用是输入源代码,可以输出其AST或者CFG(控制流图),DFG(数据流图)。

一.针对多种语言

ANTLR

Antlr4是一款开源的语法分析器生成工具,能够根据语法规则文件生成对应的语法分析器。现在很多流行的应用和开源项目里都有使用,比如Hadoop、Hive以及Pig等都在使用ANTLR来做语法分析。

ANTLR可以分析现有多种编程语言,包括C,Java,python,php等等,一般g4为antlr的语法文件,只要编程语言有相应的g4文件,就能生成自定义解析工具。

ANTLR有java api和python api(不过感觉python api没有java api成熟)。

SonarQube

SonarQube是管理代码质量一个开放平台,可以快速的定位代码中潜在的或者明显的错误。同时也开源,可以用SonarQube的API来自定义构建语法解析工具,目前除了C/C++,其它的语言(java,python,php等)都开源。

官方自定义demo

同时SonarQube是用Java编写的,API什么都是Java的

tree-sitter

项目地址:tree-sitter

搬运自github:treesitter是一个解析器 生成器工具和一个增量解析库。它可以为源文件建立一个具体的语法树,并在编辑源文件时有效地更新语法树。

能找到的文档比较少,目前我见过的用tree-sitter的只有GraphCodeBert,这里粘贴一下地址:DFG.py

二.针对C语言

pycparser

Pycparser是C语言的解析器,支持完整的C99标准,用纯Python编写。
非常方便对C语言源码的解析和处理,如生成AST、提取源码中函数调用关系等。
Pycparser非常容易上手,需重点阅读examples目录和c_ast.py文件。

github地址:pycparser
使用参考:C语言源码分析库Pycparser介绍

Joern

Joern是一个C/C++代码分析工具,主要功能是从源码生成抽象语法树,控制流图和程序依赖,合成一个Code Property Graph,存入图形数据库neo4j。

使用参考:joern的安装与使用

三.针对Java

Javalang

Javalang 是用于处理 Java 源码的纯 Python 库,目前提供了针对 Java 8 的词法分析器和解析器。

和其它解析工具一样,JavaLang包分两段理解:一段是代码片段解析成语法树的过程 一段是语法树节点操。

使用参考:python 的 javalang 库【1】

github地址

JavaParser

与JavaLang一样,是一个java词法分析和语法分析库,只不过是Java库,功能包括:

  • JavaParser可以处理注释,弄清楚它们所引用的元素
  • JavaParser可以进行词法保留或漂亮的打印 :您的选择
  • 它可以找出一个方法调用指向哪个方法声明,某个类具有哪个祖先,以及更多地归功于与JavaSymbolSolver的集成。
  • 它可以将AST导出为JSON,XML,YAML,甚至可以使用Graphviz生成图表!

参考:javaparser_JavaParser生成,分析和修改Java代码

Eclipse AstParser

Eclipse JDT 提供了操纵 Java 源代码、检测错误、执行编译和启动程序的的 API,Eclipse AST是其中一个重要组成部分,它提供了AST、ASTParser、ASTNode、ASTVisitor等类,通过这些类可以获取、创建、访问和修改抽象语法树。

使用参考:【Eclipse AST】AST的获取与访问

四.针对python

ast库

ast(Abstract Syntax Trees)是python中非常有用的一个模块,我们可以通过分析python的抽象语法树来对python的代码进行分析和修改。

ast作用在python代码的语法被解析后,被编译成字节码之前。

使用参考:python ast 语法分析

tokenize库

tokenizepython实现的一个词法分析器。可以参考对 Python 代码使用的词语标记化器 tokenize,你懂了吗?【Python|标准库|tokenize】

你可能感兴趣的:(静态代码检测,编程语言)