如何写一个解释器?

2023-11-25

我决定用 Ruby 编写一个小型解释器作为我的下一个项目。我需要什么知识/技能才能成功?
我还没有决定要解释的语言,但我正在寻找一种不是玩具语言,但相对容易编写解释器的语言。 提前致谢。


你至少必须学习:

  • 词法分析(将字符分组为标记)
  • 解析(将标记分组到结构中)
  • 抽象语法树(用数据结构表示程序结构)
  • 数据表示(假设您的语言有变量)
  • “运行”程序的评估循环

在介绍性文本中可以找到对其中一些主题的精彩介绍计算机程序的结构和解释。该书中使用的语言是Scheme,它是一种强大的、指定良好的语言,非常适合您的第一个解释器实现。强烈推荐。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何写一个解释器? 的相关文章

  • 执行 rvm use 2.0.0 --default 时收到“警告!路径未正确设置”

    以上第一次不起作用 第二次起作用 尝试将任何新 shell 窗口的 ruby 版本设置为 2 0 0 Doing rvm use 2 0 0 default gives Warning PATH is not properly set up
  • 捆绑包 - 从另一台电脑复制粘贴宝石

    我正在尝试设置 Rails 应用程序 该应用程序依赖于大量的宝石 宝石已预先安装在vendor gems我从朋友那里获得的副本的文件夹 现在 考虑到那些闭源宝石的不可用性 bundle install path home umang pro
  • 如何保存包含框架/iframe 的完整 html 页面?

    在网页抓取期间 我想将当前页面的 html 保存到文件中以供以后调试 browser html在大多数情况下有帮助 但是当页面包含 iframe frame 时 它 的内容不会返回browser html 我必须用类似的东西单独得到它bro
  • 如何在 Rails 中制作动态下拉菜单?

    我正在开发一个电子商务项目 其中将有用于选择尺寸的单选按钮 我有一个数量下拉菜单 我想根据用户所选尺寸的可用库存使此下拉列表动态化 谁能告诉我如何在 Rails 上做到这一点 不会用大量的 javascript 扰乱我的视图文件 如果您使用
  • 在企业代理内的 Windows 中安装 Ruby 2.4.1。 MSYS2更新失败

    我正在使用 ruby 安装程序rubyinstaller 2 4 1 2 x64 exe https rubyinstaller org downloads archives 安装ruby 2 4 1 on windows 10 就成功了并
  • 尝试使用 Rails 和 PostgreSQL 生成模型时,命令挂起且没有错误

    使用该命令时 rails generate model Event name string 什么也没发生 我必须按 CTRL c 我使用的版本是 红宝石 2 1 1p76 导轨4 1 0 PostgreSQL 9 3 4 Mac OS X
  • 通过名称查找进程ID

    如何在 Ruby 中通过名称或完整命令行找到 pid 而不调用外部可执行文件 我正在将 SIGUSR2 发送到命令行包含的进程ruby job rb 我想在不打电话的情况下执行以下操作pgrep uid Process uid pid pg
  • File.delete 上的 Ruby (Errno::EACCES)

    我试图在使用完一些 XML 文件后删除它们 其中一个文件给了我这个错误 delete Permission denied monthly builds xml Errno EACCES Ruby 声称该文件受到写保护 但我在尝试删除它之前设
  • 当 config.cache_classes = true 时缺少方法

    我有两个名为 Scope 和 ScopeItem 的 ActiveRecord 模型 具有 has many 关系 class Scope lt ActiveRecord Base has many scope items end clas
  • 尝试使用适用于 Windows XP 的 Heroku 时未找到 msvcrt-ruby18.dll

    我有一个学生在 Windows XP 上进行开发 他在尝试运行时遇到了一个奇怪的错误heroku keys add 错误是 This application has failed to start because msvcrt ruby18
  • 如何在 Ruby 中将“Access-Control-Allow-Origin”标头添加到 API 响应

    我正在面试前端开发人员的工作 并接受了构建简单前端界面的编码测试 我已经得到了服务器 它是用 Ruby 2 1 3 编写的 有 3 个端点 我将在前端客户端中使用它们 我对 Ruby 没有任何经验 但我按照他们的说明设置服务器 它似乎有效
  • Ruby 依赖注入库

    我一直在研究一些 Ruby 依赖注入库 特别是 我检查了Needle http needle rubyforge org and Copland http copland rubyforge org 它们已经存在很长一段时间了 但用途并不多
  • 什么是“太聪明”的 Ruby 代码示例? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在与一些程序员朋友进行讨论 他们说他们看到 Ruby 程序员 尤其是 编写了很多 太聪明 的代码 所以我想知道那会是什么样子 我指
  • 从when语句内的函数返回

    我想做的就是使用 when 语句返回一个值 我想要以下功能 if x return y 我正在尝试使用 when x y 但是when语句并没有以退出函数并返回y的方式进行计算 它只是愉快地继续下一行 有没有办法做到这一点而不需要制作一个看
  • 如何将两个不同的哈希数组中的值添加在一起?

    我有两个哈希数组 哈希值的键不同 player scores1 first name gt Bruce score gt 43 time gt 50 first name gt Clark score gt 45 minutes gt 20
  • rvm编译安装ruby 2.5.0出错

    我正在尝试使用 rvm 安装 ruby 2 5 0 但出现错误 我在 Ubuntu 18 16 和现在的 Linux Mint Cinnamon 上尝试过 基本上我在运行安装 ruby 的代码之前所做的是 打开 GPG 密钥https rv
  • Ruby 未绑定方法:是否可以强制绑定到其他类的实例?

    我想知道我是否可以强迫这种情况发生 class A def bomb bomb end end class B end bomb A instance method bomb b B new bomb bind b 目前它抛出错误 Type
  • 如何使 Rails 3 资源预编译速度更快?

    我有一个正在运行的 Rails 3 2 1 应用程序 我正在通过 Capistrano 进行部署deploy assets它运行deploy assets precompile task 一切工作都很好 除了编译本身非常慢 我没有那么多 C
  • Rails 中的 PDF 导出

    我需要将包含一些图表的 HTML 页面导出为 PDF 有哪些好的 gem 可以做到这一点 PDFKit http railscasts com episodes 220 pdfkit http railscasts com episodes
  • Watir 更改 Mozilla Firefox 首选项

    我正在使用 Watir 运行 Ruby 脚本来自动执行一些操作 我正在尝试自动将一些文件保存到某个目录 因此 在我的 Mozilla 设置中 我将默认下载目录设置为桌面并选择自动保存文件 然而 当我开始运行脚本时 这些更改并未反映出来 似乎

随机推荐

  • 在 C# 中,我如何知道要捕获哪些异常?

    我已经养成了使用通用 catch 语句的习惯 并以通用方式处理这些异常 这是不好的做法吗 如果是这样 我如何知道可以抛出哪些特定异常以及捕获哪些异常 是的 除了在一些非常具体的情况下 这是不好的做法 我能想到的一种常见情况是 捕获所有异常并
  • C++ 控制台应用程序中的 PlaySound?

    已编辑 因此代码是正确的 感谢 a spot is 底部有新问题 所以我一直在玩控制台 因为我在那个级别 我们被要求制作我们的第一个 项目 进行评估 我已经完成了基本的应用程序 但我想让它活跃一点并添加一些声音 将从控制台播放的声音 这个测
  • 如何在 Symfony 4 中覆盖第三方包的资源?

    我使用 Symfony Flex 进行了全新的 Symfony 安装 新的框架属于下一个 Symfony 4 目录结构 下一个 我将覆盖一些资源例如来自外部包的模板 翻译等 我尝试为模板创建所有这些路径 首先 但没有任何效果 templat
  • 如何在 git checkout 上仅恢复修改过的文件?

    假设我有一个包含数百个文件的目录 我修改了其中一些 但后来我意识到我的修改很糟糕 如果我做 git checkout whole folder 然后所有的东西都会被再次检查 我必须重新编译所有的东西 有没有办法让结账只影响修改过的文件 或者
  • LazyLoadingEnabled 设置似乎在 EF 5 中不起作用

    我首先将 EF 模型与 POCO 实体和自定义 DbContext 一起使用 我的问题是设置LazyLoadingEnabled false不会影响任何内容 导航属性仍会加载 下面是我的简化示例 实体计划 一个程序可以是其他程序的一部分 n
  • 如何在 Postgres 中搜索字符串中是否存在整个单词

    我有一张带有一列的桌子field具有像三星手机这样的价值 我的问题是 如果我搜索字符串 Samsung 或 phone 如何获得这一行 如果我只给出 Sam 或 ph 作为搜索词 我不想要任何结果 我曾尝试使用 ILIKE 运算符 但如果我
  • 在 VB.NET 中订阅事件

    我正在尝试将一些 C 代码转换为 VB NET 我在 C 中有以下内容 有效 m switchImageTimer new DispatcherTimer m switchImageTimer Interval Interval m swi
  • Java:将大量数据序列化到单个文件

    我需要将小对象的大量数据 大约 2gig 序列化到单个文件中 以便稍后由另一个 Java 进程处理 性能很重要 谁能建议一个好的方法来实现这一目标 你有没有看过谷歌的协议缓冲区 听起来像是它的一个用例
  • AMD多核编程

    我想开始编写应用程序 C 它将利用额外的核心来执行需要执行大量计算并且其计算彼此独立的代码部分 我有以下处理器 x64 Family 15 Model 104 Stepping 2 Authentic AMD 1900 Mhz 在 Wind
  • JavaScript 中的睡眠 - 操作之间的延迟

    有没有办法可以在 JavaScript 执行另一个操作之前让其休眠 Example var a 1 3 Sleep 3 seconds before the next action here var b a 4 您可以使用setTimeou
  • 如何在 xunit/autofixture 中组合 PropertyData 和 AutoNSubstituteData 属性?

    我正在使用 AutoNSubstituteData 属性 发布在这里 AutoFixture xUnit net 和自动模拟 我想将其与 PropertyData 来自 xunit 扩展的属性 这是我的测试 public static IE
  • 在 Android Studio Java 中读取文本文件

    我有一个类 QuoteBank 需要使用扫描仪读取 txt 文件 但它给了我一个文件未找到异常 java 文件位于 应用程序 src main java nate marxBros QuoteBank java txt 文件位于 应用程序
  • Django celery Worker 将实时状态和结果消息发送到前端

    在 django 应用程序中 我正在运行异步任务 并希望向用户显示进度 错误等 如果出现错误 则应将用户重定向到需要额外输入或执行某些操作才能解决问题的页面 从 celery 工作返回到前端的最佳通信方式是什么 这是伪代码的基本结构 vie
  • 如何将 C# 方法添加到现有的大型 wix 脚本中

    我们现有的 wix 脚本相当复杂且冗长 所有自定义操作均使用内联 vbscript 执行 我想将其中一些操作从 vbscript 切换到 C 各地的所有示例都以 在 VisualStudio 中创建一个 wix 项目 开头 有没有关于如何将
  • 构建并安装 x86_64 而不是 i386 的 Brew 应用程序?

    我完成此操作后 酿造安装git 我这样做 哪个git 返回 usr local bin git 然后我这样做 文件 usr local bin git 返回 usr local bin git Mach O 可执行文件 i386 我需要br
  • 数字和一位小数的正则表达式

    我似乎无法使用简单的正则表达式来工作 这是我目前所拥有的 Hours on input function e var regex d d 0 2 g if regex test this value if regex test this v
  • 获取变量名。 javascript“反射”

    有没有办法获取变量name 就像你可以在 Net 中使用反射做的那样 就像在这个场景中 function x y z if x 0 logger log variable x reflectedName has invalid value
  • 在应用程序域之间来回传递值

    我有以下代码 public class AppDomainArgs MarshalByRefObject public string myString static AppDomainArgs ada new AppDomainArgs m
  • 有关即将推出的 fork-join 框架的资源

    我正在寻找有关如何使用即将推出的 jsr166y fork join fences 和 extras166y ParallelArray 等 的组织良好的信息源 从教程到专家级别的内容 IBM Developerworks 网站有一个好系列
  • 如何写一个解释器?

    我决定用 Ruby 编写一个小型解释器作为我的下一个项目 我需要什么知识 技能才能成功 我还没有决定要解释的语言 但我正在寻找一种不是玩具语言 但相对容易编写解释器的语言 提前致谢 你至少必须学习 词法分析 将字符分组为标记 解析 将标记分