0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

GitHub趨勢(shì)榜榜首:超級(jí)命令行工具Semantic,比較解析源代碼

DPVg_AI_era ? 來源:YXQ ? 2019-06-03 14:15 ? 次閱讀

作為開發(fā)者,天天都要與源代碼打交道,面對(duì)不同版本,不同語言的代碼進(jìn)行比較、分析,理順開發(fā)流程往往是開發(fā)者的日常。近日,一款名為Semantic的源代碼分析比較工具一舉登上了GitHub趨勢(shì)榜榜首,一起來看看!

作為開發(fā)者,你是否對(duì)不同源代碼段之間的解析和比較困惑不已呢?今天的GitHub趨勢(shì)熱榜上排名第一的帖子介紹了一款多語言支持的“超級(jí)命令行工具”Semantic,或許可以解決這個(gè)令人頭疼的問題。

Semantic是一個(gè)Haskell庫,也是一個(gè)用于分析和比較源代碼的命令行工具。

本文將從應(yīng)用功能、語言支持、開發(fā)、技術(shù)和架構(gòu)、許可等五個(gè)方面介紹Semantic這款工具。

用途及功能:源代碼解析、比較、圖應(yīng)用

解析(Parse)

Usage: semantic parse ([--sexpression] | [--json] | [--json-graph] | [--symbols] | [--dot] | [--show] | [--quiet]) [FILES.。.] Generate parse trees for path(s)Available options: --sexpression Output s-expression parse trees (default) --json Output JSON parse trees --json-graph Output JSON adjacency list --symbols Output JSON symbol list --dot Output DOT graph parse trees --show Output using the Show instance (debug only, format subject to change without notice) --quiet Don‘t produce output, but show timing stats

比較(Diff)

Usage: semantic diff ([--sexpression] | [--json] | [--json-graph] | [--toc] | [--dot] | [--show]) [FILE_A] [FILE_B] Compute changes between pathsAvailable options: --sexpression Output s-expression diff tree (default) --json Output JSON diff trees --json-graph Output JSON diff trees --toc Output JSON table of contents diff summary --dot Output the diff as a DOT graph --show Output using the Show instance (debug only, format subject to change without notice)

圖(Graph)

Usage: semantic graph ([--imports] | [--calls]) [--packages] ([--dot] | [--json] | [--show]) ([--root DIR] [--exclude-dir DIR] DIR:LANGUAGE | FILE | --language ARG (FILES.。. | --stdin)) Compute a graph for a directory or from a top-level entry point moduleAvailable options: --imports Compute an import graph (default) --calls Compute a call graph --packages Include a vertex for the package, with edges from it to each module --dot Output in DOT graph format (default) --json Output JSON graph --show Output using the Show instance (debug only, format subject to change without notice) --root DIR Root directory of project. Optional, defaults to entry file/directory. --exclude-dir DIR Exclude a directory (e.g. vendor) --language ARG The language for the analysis. --stdin Read a list of newline-separated paths to analyze from stdin.

多語言支持:Python、Go,Java均可使用

開發(fā)環(huán)境及版本要求

我們使用cabal的Nix風(fēng)格的本地版本進(jìn)行開發(fā)。要快速入門,可以按照下圖中的步驟:

git clone git@github.com:github/semantic.gitcd semanticgit submodule sync --recursive && git submodule update --init --recursive --forcecabal new-updatecabal new-buildcabal new-testcabal new-run semantic -- --help

Semantic最低要求GHC 8.6.4。我們建議使用ghcup沙箱GHC版本。我們使用的版本基于StackageLTS版。目前的LTS版本是13.13。如果您愿意,也可以使用堆棧版。

技術(shù)和架構(gòu)特征

從架構(gòu)上看,Semantic具備以下特點(diǎn):

可以讀取blob。

可以為樹形保護(hù)程序的blob生成解析樹(用于編程工具的增量解析系統(tǒng))。

將這些樹分配為語法的通用表示。

執(zhí)行分析,計(jì)算差異,或僅返回解析樹。

以多種支持格式呈現(xiàn)輸出。

Semantic利用了許多有趣的算法和技術(shù):

Myers算法(SES)如論文An O(ND)差分算法及其變化所述

RWS-Diff:在分層數(shù)據(jù)中靈活高效的變化檢測(cè)中描述的RWS。

可以單獨(dú)打開Union和數(shù)據(jù)類型。

簡(jiǎn)要定義解釋器(Abstracting Definitional Interpreters)的實(shí)現(xiàn)。可擴(kuò)展為基于語法術(shù)語的單點(diǎn)表示。

關(guān)于授權(quán)許可

Semantic基于MIT許可。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 源代碼
    +關(guān)注

    關(guān)注

    96

    文章

    2943

    瀏覽量

    66566
  • GitHub
    +關(guān)注

    關(guān)注

    3

    文章

    461

    瀏覽量

    16324

原文標(biāo)題:GitHub趨勢(shì)榜第一:超級(jí)命令行工具Semantic,比較解析源代碼

文章出處:【微信號(hào):AI_era,微信公眾號(hào):新智元】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    在STM32實(shí)現(xiàn)命令行

    工作中的開發(fā)環(huán)境都是基于linux命令行交互,作為命令行的重度使用者,玩單片機(jī)也要使用命令行工具,百度了一些命令行
    發(fā)表于 12-09 11:32 ?2183次閱讀

    caxa命令行中的應(yīng)用

    caxa命令行中的應(yīng)用 命令行對(duì)于大多用戶來說往往只是輸入數(shù)據(jù)的作用,但是其中的奧妙還有很多,下面就給大家
    發(fā)表于 10-18 18:18 ?2266次閱讀

    監(jiān)控jvm常用的5個(gè)命令行工具

    常用的幾個(gè)命令行工具有jps、jstat、jinfo、jmap、jstack等。這幾個(gè)工具可以安裝openjdk-devel-debug包。
    的頭像 發(fā)表于 02-06 14:47 ?5805次閱讀
    監(jiān)控jvm常用的5個(gè)<b class='flag-5'>命令行</b><b class='flag-5'>工具</b>

    Xilinx軟件命令行工具:XSCT開發(fā)和調(diào)試

    了解如何使用XSCT,Xilinx軟件命令行工具進(jìn)行開發(fā)和調(diào)試。 該視頻演示了XSCT如何充當(dāng)Xilinx SDK的命令行控制臺(tái)。
    的頭像 發(fā)表于 11-21 06:02 ?1.4w次閱讀

    Xilinx軟件命令行工具進(jìn)行開發(fā)和調(diào)試

    了解如何使用XSCT,Xilinx軟件命令行工具進(jìn)行開發(fā)和調(diào)試。 該視頻演示了XSCT如何充當(dāng)Xilinx SDK的命令行控制臺(tái)。
    的頭像 發(fā)表于 11-22 06:53 ?6536次閱讀

    GitHub五萬星登頂 程序員命令行最全技巧寶典!

    最近兩天,「The Art of Command Line(命令行的藝術(shù))」這個(gè)開源項(xiàng)目雄踞了 GitHub TOP ,直接以 51,727 Star 登上榜首。
    的頭像 發(fā)表于 06-06 14:02 ?2388次閱讀

    Git常見的誤區(qū)和命令行工具等綜述

    Git常見的誤區(qū)和命令行工具等綜述
    發(fā)表于 08-31 09:51 ?0次下載

    自己動(dòng)手實(shí)現(xiàn)命令行解析

    一、介紹嵌入式里面經(jīng)常會(huì)自己做命令行,這里分享一個(gè)命令解析代碼實(shí)現(xiàn)二、代碼實(shí)現(xiàn)mycmd.c
    發(fā)表于 12-22 18:51 ?13次下載
    自己動(dòng)手實(shí)現(xiàn)<b class='flag-5'>命令行</b><b class='flag-5'>解析</b>器

    如何從命令行獲取和解析參數(shù)

    這是一篇技術(shù)干貨快文,能夠快速閱讀完。文章內(nèi)容是關(guān)于如何從命令行獲取和解析參數(shù),包括SystemVerilog本身支持的系統(tǒng)函數(shù)和UVM提供的函數(shù)封裝,并給出示例代碼和仿真結(jié)果。
    的頭像 發(fā)表于 05-30 14:05 ?2703次閱讀

    Shell命令行解釋器簡(jiǎn)介

    Shell 是一個(gè)命令行解釋器,Shell 為用戶提供了與設(shè)備進(jìn)行命令行交互的方式,用戶通過串口、以太網(wǎng)、無線等方式將命令傳輸給具有 Shell 功能的設(shè)備,設(shè)備會(huì)解析
    的頭像 發(fā)表于 08-19 17:20 ?3091次閱讀

    Golang基于flag庫實(shí)現(xiàn)一個(gè)命令行工具

    Golang 標(biāo)準(zhǔn)庫中的 flag 庫提供了解析命令行選項(xiàng)的能力,我們可以基于此來開發(fā)命令行工具。
    的頭像 發(fā)表于 10-28 09:26 ?1223次閱讀

    新的開源命令行工具west

    電子發(fā)燒友網(wǎng)站提供《新的開源命令行工具west.zip》資料免費(fèi)下載
    發(fā)表于 11-11 09:25 ?0次下載
    新的開源<b class='flag-5'>命令行</b><b class='flag-5'>工具</b>west

    用于解析和操作URL的命令行工具

    curl 作者 Daniel 宣布推出新的開源項(xiàng)目:trurl,這是一款用于解析和操作 URL 的命令行工具,主要是面向 shell 腳本作者提供。Daniel 稱項(xiàng)目名字中的 'tr' 代表 transla
    的頭像 發(fā)表于 04-11 10:02 ?1075次閱讀

    PetaLinux工具文檔:命令行參考指南

    電子發(fā)燒友網(wǎng)站提供《PetaLinux工具文檔:命令行參考指南.pdf》資料免費(fèi)下載
    發(fā)表于 09-15 14:52 ?0次下載
    PetaLinux<b class='flag-5'>工具</b>文檔:<b class='flag-5'>命令行</b>參考指南

    pycharm命令行終端運(yùn)行代碼

    Python是一種非常流行的編程語言,許多開發(fā)者使用它來編寫各種應(yīng)用程序和腳本。為了方便開發(fā)者編寫和測(cè)試代碼,PyCharm是一種集成開發(fā)環(huán)境(IDE),它提供了許多功能和工具,其中包括命令行終端
    的頭像 發(fā)表于 11-22 11:20 ?3866次閱讀