代码解析工具汇总

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

一.针对多种语言

ANTLR

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

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

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

使用体验的话,ANTLR有一个最大的缺点就是解析速度慢,曾基于ANTLR编写了一个C静态分析工具,步骤包括:1.将ANTLR AST转化为自定义AST。2.将自定义AST转化为CFG。3.基于CFG分析control dependence和data dependence。然后发现第一步几乎占用99%以上的时间。其实大部分时间开销都在将c文件解析为ANTLR AST上。如果能用tree-sitter还是考虑tree-sitter吧。

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语言

Eclipse CDT

eclipse的c语言支持采用的语法解析工具,目前joerncpg两个分析工具是用eclipse CDT来先解析AST然后开始接下来的分析。使用时不需要编译选项输入,分析预处理前和预处理后的c文件都可以。

clang

属于clang/llvm工具链的一部分。可以基于clang编译器提供的API分析c代码的AST,不过这里clang编译器本身已经集成了很多静态分析技术,直接调用这些静态分析API或许更加高效。同时clang也提供python binding。可以写python代码调用clang的api分析AST。不过python binding貌似只能分析AST。

需要注意的是,和pycparser一样。clang要求分析的代码可编译。

pycparser

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

github地址:pycparser

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

需要注意的是pycparser以及clang与tree-sitter、eclipse CDT、ANTLR相比。其解析的AST是经过预处理后的AST。也就是AST不包括宏、#include 等语句。因此使用pycparser和clang需要编译选项输入(需要首先预处理c文件)。

Joern

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

使用参考: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】

  • 6
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: 嵌入式map文件是指经过编译的程序中所包含的符号表和地址映射表等信息的文件。通常情况下,嵌入式map文件可以用于调试程序和分析内存占用情况。但是对于大型的嵌入式系统来说,由于符号表很大,难以直接对其进行分析,需要使用嵌入式map文件分析工具来进行处理。 嵌入式map文件分析工具是一种软件工具,可以用于解析、分析和可视化嵌入式map文件。该工具可以非常准确地定位到每个符号的地址,以及每个符号所占用的内存大小和位置等信息。通过对嵌入式map文件的分析,可以非常方便地查找和解决内存泄露、堆栈溢出等问题,也可以优化程序的内存使用效率。 嵌入式map文件分析工具通常支持各种不同的文件格式,如ELF、COFF等。同时,该工具还可以提供可视化界面,以帮助用户更加直观地了解程序的内存使用情况。用户可以通过该工具来查看程序中所有的符号、函数和变量等信息,以及它们之间的关系和依赖关系,从而更好地理解程序的内部结构和运行机制。 总之,嵌入式map文件分析工具是一个非常实用的软件工具,它可以帮助嵌入式系统开发者更加方便地调试和优化程序,提高程序的性能和可靠性。 ### 回答2: 嵌入式map文件分析工具是一种能够对嵌入式软件程序中的map文件进行分析和统计的工具。map文件是编译器生成的一种文本文件,其中包含了程序的符号表、变量表、函数表、内存映射表等信息。嵌入式软件开发中,map文件常用于检查程序内存使用情况、优化程序大小和性能等方面。 嵌入式map文件分析工具可以将map文件中的信息进行分类、汇总、排序和报告,方便工程师分析程序的内存使用情况,找出不必要的资源消耗点,并对程序进行优化。嵌入式map文件分析工具不仅可以显示程序的代码段、数据段、栈空间占用情况等基本信息,还可以显示各个函数和变量的大小、占用的内存地址范围等详细信息,方便工程师深入分析问题。此外,一些高级嵌入式map文件分析工具还可以进行交互式可视化分析,快速定位问题。 综上所述,嵌入式map文件分析工具在嵌入式软件开发中扮演着非常重要的角色,可以帮助开发者更好地进行优化和调试,提高程序性能和稳定性。 ### 回答3: 嵌入式map文件分析工具是一种软件工具,用于分析嵌入式项目中生成的map文件。map文件是编译器生成的一个文本文件,记录了代码中的符号(如变量、函数、地址),它们在内存中的位置等信息。这些信息对于程序的调试、优化、分析都非常重要。 嵌入式map文件分析工具能够解析map文件,提取出其中的各种信息,展示给用户。用户可以通过工具来查看变量的地址、大小、值、定义位置等信息,查看函数的调用路径、参数和返回值等信息,还可以查看代码的内存空间使用情况等信息。此外,工具还支持搜索符号、过滤符号等功能,可以帮助用户快速定位问题。 对于嵌入式系统开发人员而言,使用嵌入式map文件分析工具可以帮助他们更好地理解程序的运行机制,更快地调试和优化代码。此外,由于嵌入式系统代码量大,开发周期长,因此能够尽早发现和解决问题,提高开发效率。 总之,嵌入式map文件分析工具是一种非常有用的软件工具,可以帮助嵌入式系统开发人员更好地管理程序的运行状态,提高开发效率,缩短开发周期。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值