GitHub趋势榜第二名:解析、对比不同编程语言的Semantic库

2019 年 6 月 1 日 机器之心

机器之心报道

参与:路、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 符号表等。

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


对比


该库通过语义对比计算路径之间的变化,支持生成 s-expression diff tree、JSON diff tree 等。

Usage: semantic diff ([--sexpression] | [--json] | [--json-graph] | [--toc] |                     [--dot] | [--show]) [FILE_A] [FILE_B]  Compute changes between paths
Available 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


该库可以通过语义图计算目录或顶级入口点模块的图,支持 import graph、call graph、JSON 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 module
Available 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.


语言支持


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 表示:「很期待看到该项目开源后的变化。」




本文为机器之心报道,转载请联系本公众号获得授权

✄------------------------------------------------

加入机器之心(全职记者 / 实习生):hr@jiqizhixin.com

投稿或寻求报道:content@jiqizhixin.com

广告 & 商务合作:bd@jiqizhixin.com

登录查看更多
0

相关内容

JSON( Java Script Object Notation)是一种轻量级的资料交换语言,以文字为基础,且易于让人阅读。尽管 JSON 是在 JavaScript 的一個子集,但 JSON 是独立于语言的文本格式,並且采用了类似于 C 语言家族的一些习惯。
还在修改博士论文?这份《博士论文写作技巧》为你指南
专知会员服务
139+阅读 · 2020年5月19日
【经典书】数据结构与算法C++,第二版,738页pdf
专知会员服务
166+阅读 · 2020年3月27日
专知会员服务
109+阅读 · 2020年3月12日
【电子书】C++ Primer Plus 第6版,附PDF
专知会员服务
87+阅读 · 2019年11月25日
2019年机器学习框架回顾
专知会员服务
35+阅读 · 2019年10月11日
GitHub超2.7万星,最全Python入门算法来了
新智元
5+阅读 · 2019年4月28日
别说还不懂依存句法分析
人工智能头条
23+阅读 · 2019年4月8日
Github项目推荐 | pikepdf - Python的PDF读写库
AI研习社
9+阅读 · 2019年3月29日
2018-Github最热门机器学习开源项目Top10分享
深度学习与NLP
8+阅读 · 2019年1月22日
机器学习开源项目Top10
AI100
4+阅读 · 2019年1月20日
数据科学、机器学习IDE概览
论智
9+阅读 · 2018年11月12日
推荐一些适合小白练手的Python项目
数据挖掘入门与实战
6+阅读 · 2018年5月17日
GitHub上12月份最热门开源项目
程序猿
4+阅读 · 2018年1月9日
Arxiv
19+阅读 · 2019年4月5日
Symbolic Priors for RNN-based Semantic Parsing
Arxiv
3+阅读 · 2018年9月20日
Arxiv
3+阅读 · 2018年5月11日
VIP会员
相关VIP内容
还在修改博士论文?这份《博士论文写作技巧》为你指南
专知会员服务
139+阅读 · 2020年5月19日
【经典书】数据结构与算法C++,第二版,738页pdf
专知会员服务
166+阅读 · 2020年3月27日
专知会员服务
109+阅读 · 2020年3月12日
【电子书】C++ Primer Plus 第6版,附PDF
专知会员服务
87+阅读 · 2019年11月25日
2019年机器学习框架回顾
专知会员服务
35+阅读 · 2019年10月11日
相关资讯
GitHub超2.7万星,最全Python入门算法来了
新智元
5+阅读 · 2019年4月28日
别说还不懂依存句法分析
人工智能头条
23+阅读 · 2019年4月8日
Github项目推荐 | pikepdf - Python的PDF读写库
AI研习社
9+阅读 · 2019年3月29日
2018-Github最热门机器学习开源项目Top10分享
深度学习与NLP
8+阅读 · 2019年1月22日
机器学习开源项目Top10
AI100
4+阅读 · 2019年1月20日
数据科学、机器学习IDE概览
论智
9+阅读 · 2018年11月12日
推荐一些适合小白练手的Python项目
数据挖掘入门与实战
6+阅读 · 2018年5月17日
GitHub上12月份最热门开源项目
程序猿
4+阅读 · 2018年1月9日
Top
微信扫码咨询专知VIP会员