gpt4 book ai didi

design-patterns - 在解释器中,词法分析器之后(通常)是什么?

转载 作者:行者123 更新时间:2023-12-04 07:07:50 28 4
gpt4 key购买 nike

对于编程语言解释器,我想知道解释器经历的事件顺序。例如,我认为事情是这样的:

  • 解释器得到一些输入
  • 词法分析器/分词器获取输入并划分标记
  • x 获取代币列表
  • ???
  • 代码被执行

什么步骤属于 ??? spot,什么代替了 x(即,什么接收词法分析器生成的标记并对其进行操作)?

最佳答案

我先推荐经典的免费书籍:Structure and Interpretation of Computer Programs ( video lectures )

Lisp 是基线解释器,其他一切在某些方面都是主题​​的变体。

一般的步骤是:

  • 词法分析获取字符流并生成标记
  • 解析采用标记(平面列表)并构建称为抽象语法树 (AST) 的数据结构。这一步可以非常简单 (Lisp) 也可以非常复杂(C++、Ruby)。
  • 评估 AST。细节有点不同,但这几乎是第一次沿着树走下去的深度。叶子是数据(数字、字符串、常量、变量)节点是原始函数(数学、数据操作、控制结构)或更高级别的复合函数。每个节点都应该减少到可以直接馈送到它上面的节点的东西。

这最后一步“代码被执行”。对于编译语言或即时 (JIT) 语言,最后一步是将 AST 翻译回机器指令。注意可能存在的其他两个步骤也很重要。一种是翻译成更简单的语言,如 c--、LLVM、.NET 或 Java bitecode。另一个是解析器和求值器之间可能发生的脱糖和/或优化。例如,Haskell 因大量的脱糖而臭名昭著。

最后,我将鼓励您尝试编写 Scheme(Lisp 的一种方言)解释器的众多演练之一。网上某处可能有您最喜欢的语言。

关于design-patterns - 在解释器中,词法分析器之后(通常)是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6006597/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com