答案 0 :(得分:4)
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& amp; amp; amp; amp; amp; amp; Sussman(1985年第1版,1996年第2版),它帮助推广了元认知解释的理念 - 即将计算机程序解释为可以以编程方式解释(或以其他方式分析)的正式数据结构。
答案 1 :(得分:3)
您可以将“libadalang”视为ASIS Mark II。 AdaCore似乎试图重新思考ASIS,以支持ASIS已经可以做的事情,以及更轻量级的操作,在这些操作中你不需要编译源代码来提供它的分析。
希望最终的API能够比ASIS更好。
所以不,这不是一种独特的方法。它已经为Ada做了。 (但我不知道其他语言的类似库。)