是什么让libadalang特别?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了是什么让libadalang特别?相关的知识,希望对你有一定的参考价值。

我一直在阅读有关libadalang 1 2的文章,我对它印象非常深刻。但是,我想知道这种技术是否已被使用,而另一种语言支持用于语法和语义分析其代码的库。这是一种独特的方法吗?

答案

C和C ++:libclang“Clang的C接口提供了一个相对较小的API,它公开了将源代码解析为抽象语法树(AST)的工具,加载已解析的AST,遍历AST,将物理源位置与内部元素相关联。 AST,以及支持基于Clang的开发工具的其他设施。“ (有关C ++ API,请参阅libtooling

Python:请参阅Python Library手册的ast部分中的Python Language Services模块。 (其他模块也很有用。)

javascript:正在进行的ESTree努力试图通过不同的Javascript引擎标准化解析服务。

C#和Visual Basic:请参阅.NET Compiler Platform ("Roslyn")

我相信还有更多;那些刚刚脱颖而出。

为了实践和理论基础,你绝对应该(重新)访问Abelson&Sussman的经典教科书Structure and Interpretation of Computer Programs(1985年第1版,1996年第2版),这有助于普及Metacircular Interpretation的想法 - 即将计算机程序解释为可以以编程方式解释(或以其他方式分析)的正式数据结构。

另一答案

您可以将“libadalang”视为ASIS Mark II。 AdaCore似乎试图重新思考ASIS,以支持ASIS已经可以做的事情,以及更轻量级的操作,在这些操作中,您不需要编译源,以提供对它的分析。

希望最终的API能够比ASIS更好。

所以不,这不是一种独特的方法。它已经为Ada做了。 (但我不知道其他语言的类似库。)

以上是关于是什么让libadalang特别?的主要内容,如果未能解决你的问题,请参考以下文章

VS Code配置markdown代码片段

VS Code配置markdown代码片段

终于懂了:Delphi重定义消息结构随心所欲,只需要前4个字节是消息编号就行了,跟Windows消息虽然尽量保持一致,但其实相互没有特别大的关系。有了这个,就有了主动,带不带句柄完全看需要。(代码片段

Sleep() 方法后的代码片段没有被执行

Word 文档的优秀代码片段工具或插件?

我只是无法让片段工作