最新文章

OpenRewrite 学习笔记(二):无损语义树 LST

OpenRewrite 学习笔记(二):无损语义树 LST

在上一篇文章中我们提到,LST 是 OpenRewrite 实现精准、可控代码修改的关键支柱。本篇将更深入地探讨 OpenRewrite 在代码解析过程中,究竟是如何保留代码原有的精确语义结构的。

什么是 LST

LST 是 Lossless Semantic Trees,无损语义树的缩写。

先上总结,说说我对这三个单词的理解:

  • Lossless 无损:代码解析和结构化过程中不丢失源代码中的任何信息(包括空格、注释、格式等),最终的属性结构中可以保留代码的原始细节。
  • Semantic(语义):该树不仅仅是语法分析的产物,还能体现代码片段之间的语义关系。
  • Trees(树):以树形结构组织代码元素,使得对代码片段的遍历、查询和变换更为直观且层次清晰。

说起语义树,就不得不提一下 AST。

抽象语法树 AST

AST(Abstract Sytax Tree,抽象语法树),又常被称为语法树(Sytax Tree),是以树状的形式来表示编程语言的语法结构。AST 是编译器中广泛使用的的数据结构,用于表示程序代码的结构。

像下面的 AST 图是这段代码(欧几里得算法)的抽象语法树结构展示,树上的每个节点都表示源码中的一种结构。

while b ≠ 0:
    if a > b:
        a := a - b
    else:
        b := b - a
return a