當前位置:
首頁 > 知識 > GitHub趨勢榜第二名:解析、對比不同編程語言的Semantic庫

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:機器之心 |