代码解析工具汇总
代碼解析工具
- 一.針對多種語言
- 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庫
tokenize是python實現的一個詞法分析器。可以參考對 Python 代碼使用的詞語標記化器 tokenize,你懂了嗎?【Python|標準庫|tokenize】
總結
- 上一篇: 软工课程读书笔记
- 下一篇: Flutter初步-第一个电视直播APP