gpt4 book ai didi

compiler-construction - 解释器在解释一种语言时应该如何处理 "work"?

转载 作者:行者123 更新时间:2023-12-01 14:40:23 25 4
gpt4 key购买 nike

作为一个 self 项目,我正在为我“编造”的编程语言创建一个解释器(它实际上只是 JavaScript 编程语言的一个微小扩展),但我对解释器的真正工作方式有点迷茫,我应该如何执行用我的语言编写的程序。我的问题是:

1:因为这是一个解释器,我应该在遍历解析树时执行语句,还是应该用不同的语言(比如 python)生成代码,然后使用子进程调用来编译和运行它生成 python 文件?

2:我应该在阅读每条语句时执行它吗?或者我应该在遍历树并生成/执行代码之前在内存中构建整个程序的解析树-> AST? (取决于问题1的答案是什么)

最佳答案

实现解释器的一种直观方法是创建可执行的 AST:

  1. 解析源文件:您可以自己编写解析器或使用众多可用的编译器生成器之一(例如 Cocoa )。如果使用编译器生成器,“低级内容”的麻烦就会少得多,并且可以将更多精力集中在实现语言语义上。但是,您也会错过学习如何自己实现解析器的机会。
  2. 生成可执行的 AST:您在执行函数/方法的一个节点中本地实现每个操作。例如,加法节点将执行其左子节点、右子节点,然后返回结果本身。 if 节点将首先执行其条件,然后根据条件执行其 if 分支子节点或右分支子节点。您还必须考虑要将运行时数据(例如变量)存储在何处。
  3. 执行 AST:如果你想执行像 JavaScript 这样的动态类型语言,你必须考虑一个变量可以有不同类型的值。您可以拥有适应执行状态的节点,也可以实现处理所有情况的单个节点。

一种方法是在 Java Truffle 框架之上实现它。如果你以正确的方式实现你的解释器,你将获得不错的性能。还有几种可用的语言实现;一个simple example language也包括使用 Cocoa 编译器生成器。一些论文(1) (2)解释一下,如何为动态类型语言实现局部变量或处理不同类型的值。

我建议您先看看 truffle.sl 实现 (link how to get it)然后看看你能从那里得到什么。

关于compiler-construction - 解释器在解释一种语言时应该如何处理 "work"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20778262/

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