抽象语法树有什么用?

Rac*_*caR 11 terminology abstract-syntax-tree

我正在学习编写一种编程语言的解释器,我读过有关抽象语法树的文章.我知道它们是什么,但我看不出它们的用途.

为什么AST有用?

小智 5

它们代表代码的逻辑/语法,它自然是树而不是行列表,而不会陷入具体的语法问题,例如放置星号的地方.

然后可以从后端的POV以更加一致和方便的方式操纵逻辑,后者可以(并且除了Lisps之外的所有内容)与我们编写具体语法的方式非常不同.

  • @Rac:你描述的是原始文件和生成AST之间的一个步骤.那就是:raw - >令牌 - > AST.BinaryOp(乘法,标识符("blah"),整数(4))对后端更方便. (2认同)

Jam*_*son 5

使用 AST 的主要好处是您可以将解析和验证逻辑与实现部分分开。作为 AST 实现的解释器确实更容易理解和维护。如果您在解析一些奇怪的语法时遇到问题,您可以查看 AST 解析器,如果一段代码没有产生预期的结果,那么您可以查看解释 AST 的代码。

另一个很大的优势是当您的语法需要“先行”时,例如,如果您的语法允许在定义子例程之前使用它,则在使用 AST 时验证子例程的存在是微不足道的 - 使用“动态”解析器。