gpt4 book ai didi

c++ - 解释器 : Handling includes/imports

转载 作者:搜寻专家 更新时间:2023-10-31 01:59:52 25 4
gpt4 key购买 nike

我已经用 C++ 构建了一个解释器,到目前为止一切正常,但现在我陷入了 import/include/however you want to call it function 的设计。

我想到了以下几点:

  • 在标记化过程中处理包含:当在代码中找到include 时,将使用指定的文件名递归调用标记化函数。然后将 included 文件的标记化代码添加到 include 的先前位置。缺点:没有条件包含(!)

  • 处理包括在解释过程中:我不知道如何处理。我所知道的是 PHP 必须这样做,因为条件包含是可能的。

现在我的问题:

  • 我应该如何处理包含项?
  • 现代解释器(Python/Ruby)如何处理这个问题?他们是否允许条件包含?

最佳答案

如果你有一个干净的设计并且你知道你在做什么,这个问题很容易解决。否则会非常困难。我写过至少 6 个解释器都具有此功能,而且相当简单。

  1. 您的解释器需要维护一个环境,该环境了解所有已定义的全局变量、函数、类型等。您可能更愿意称其为“符号表”。

  2. 您需要定义一个内部函数来读取文件并更新环境。根据您的语言设计,您可能会或可能不会在读入内容时进行一些评估。我的解释器非常活跃,会在读入每个定义后立即对其进行评估。

  3. 如果您分层构建您的解释器,您的生活将会变得无比轻松:

    • 分词器(将输入分解为分词)
    • 解析器(一次读取一个标记,转换为抽象语法树)
    • 评估者(阅读抽象语法并更新环境)

抽象语法树确实是关键。如果你有这个,当你在输入中遇到 import/include 构造时,你只需进行递归调用并获得更抽象的语法。您可以在解析器或求值器中执行此操作。如果您想要条件导入,则必须在求值器中进行,因为只有求值器才能计算条件。

Source code for my interpreters在网上。其中两个是用 C 编写的;其他的是用标准 ML 编写的。

关于c++ - 解释器 : Handling includes/imports,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2609145/

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