GitHub趨勢榜第二名:解析、對比不同編程語言的Semantic庫
機器之心報道
參與:路、Shooting
剛剛,GitHub Semantic Code 團隊宣布開源 semantic 庫。這是一個 Haskell 庫,用於解析、對比、解釋多種編程語言,目前該庫支持 JavaScript、TypeScript、Python、Ruby 和 Go 等多種語言。
semantic 庫地址:https://github.com/github/semantic
今天,該庫獲得了 608 個 star,位列 GitHub 趨勢榜第二名。
semantic 庫簡介
semantic 是一個用於解析、分析和對比不同語言源代碼的 Haskell 庫和命令行工具,目前支持 JavaScript、TypeScript、Python、Ruby 和 Go 語言。根據 GitHub Semantic Code 團隊成員 patrick thomson 的 twitter 評論,未來該庫可能會增加對 C 語言的支持。
該庫由 GitHub Semantic Code team 完成。這支團隊主要負責解決分析、解釋 GitHub 上公開代碼的任務,使用 Haskell 語言。
功能
semantic 庫可用於解析、對比、解釋多種編程語言的源代碼。
解析
該庫通過語義解析為路徑生成解析樹,支持生成 s-expression 解析樹、JSON 解析樹、JSON 鄰接表、JSON 符號表等。
對比
該庫通過語義對比計算路徑之間的變化,支持生成 s-expression diff tree、JSON diff tree 等。
Graph
該庫可以通過語義圖計算目錄或頂級入口點模塊的圖,支持 import graph、call graph、JSON graph 等。
語言支持
semantic 庫支持的語言很多,如下圖所示:
技術和架構
從架構上來說,semantic 庫可以:
讀 blob;
用 tree-sitter 生成這些 blob 的解析樹,tree-sitter 是一種用於編程工具的增量解析系統;
將這些樹分配至語法的泛型表示中;
執行分析、計算差異或僅返回解析樹;
以支持的格式渲染輸出。
semantic 庫利用了一系列有趣的演算法和技術:
Myers 的演算法 (SES),詳見論文:An O(ND) Difference Algorithm and Its Variations;
RWS,詳見論文:RWS-Diff: Flexible and Efficient Change Detection in Hierarchical Data;
open-union 包和 data types à la carte;
將 Abstracting Definitional Interpreters 的實現擴展,使其可以處理語法項的à la carte 表示。
該項目歡迎社區的參與,該項目參與者之一 patrick thomson 表示:「很期待看到該項目開源後的變化。」
本文為機器之心報道,轉載請聯繫本公眾號獲得授權。
------------------------------------------------


※智能體張量融合,一種保持空間結構信息的軌跡預測方法
※如何用OpenCV在Python中實現人臉檢測
TAG:機器之心 |