您将如何编写一种简单的编程语言? [复制]

2023-11-23

可能的重复:
设计简单编程语言的方法
学习编写编译器

我想编写一种语法类似于 QBasic 但更简单的编程语言。我希望它适合初学者。它的简单性将鼓励有抱负的程序员不要放弃并让他们对编程产生兴趣。例如: 代替 QBasic 的 打印“你好世界!”

我会用

写下“你好世界!”

或者更像VB一点

写(“你好世界”)

我将如何调整基本语法来创建我的语言?


这不是一个简单的任务。语言解析和编译器理论是相当重要的主题。很多数学。您还必须决定您想要的目标平台,这也将决定您的语言是否完全编译(例如 C/C++、Pascal)、编译为字节码(例如 Python、Java)或在运行时解释(例如 VBScript) ,JavaScript)。要指定语言本身,请温习巴科斯-诺尔格式.

为了帮助您,有几个强大的解析器生成器,包括:

  • Lex/Yacc(Flex/Bison 是 GNU 版本)- 老派行业标准。用于开发 C/C++ 编译器
  • ANTLR- 如果您有兴趣使用 Java 创建编译器
  • 精神振奋- 一种不同的方法,允许使用 C++ 本身来规范语言。

还有很多。对比可以发现here,同时还可以找到另一个列表here

如果您真的对完整的理论感兴趣,您想查看一下龙之书.

但我必须重申:这是一个大课题。有很多很多工具可以帮助你,但兔子洞却相当深。

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

您将如何编写一种简单的编程语言? [复制] 的相关文章

随机推荐

  • 为什么 C++ 允许未命名函数参数?

    以下是完全合法的C code void foo int cout lt lt Yo lt lt endl int main int argc char const argv foo 5 return 0 我想知道 考虑到无法从函数内部引用它
  • “可序列化”类中的字段应该是瞬态的或可序列化的

    您好 我在声纳 lint 中收到此错误 可序列化 类中的字段应该是瞬态的或 可序列化为 私有最终条件 notEmpty lock newCondition 私有最终条件 notFull lock newCondition 私有Compara
  • 上渲染 MathJax 输出

    我搜索过这个主题 但无法找到直接答案 而且我也不擅长 javascript 所以我希望有人能告诉我如何做到这一点 我只是喜欢在canvas2D 中显示数学 我用context fillText将字符串传递给canvas2d 但该字符串显然没
  • 以编程方式在 Windows 中创建快捷方式

    有没有办法在 Windows 中创建链接 我找到了使用的示例VBScript或者必须下载Shortcut exe 我需要一个简单的解决方案 那可能吗 我遇到了同样的问题 所以我编写了用于解析和创建 lnk 文件的库 它不使用 VBScrip
  • Python - 使用 matplotlib 组织 3 个子图

    我尝试为我的图生成 3 个子图 这似乎可行 但并不完全一致 如何使底部的图形和下面的图形之间的宽度相同 plt close fig plt figure ax1 plt subplot 211 ax1 plot cycles np asar
  • npm install 错误:rollbackFailedOptional

    当我尝试时npm install新软件包它向我显示此错误 rollbackFailed可选 动词 npm session 585aaecfe5f9a82 node version 8 4 0 npm version 5 3 0 first
  • 启用 cookie 后,为什么 jsessionid 出现在 Wicket URL 中?

    我注意到 当用户第一次访问我的网站时 Wicket 生成的 URL 包含jsessionid 而不是依赖 cookie 来获取会话信息 cookie 确实设置成功 如果用户只是重新加载页面 jsessionid不再附加到 URL 中 你可以
  • Chrome扩展:如何在注入后删除内容脚本?

    使用 Google Chrome 扩展 是否可以在将内容脚本注入页面后将其删除 没有用于重新加载内容脚本的 API 方法 据我所知 因此我想重新注入脚本并删除旧脚本 如果可能 不 你不能 删除 它 运行内容脚本可能会产生副作用 例如在窗口对
  • Nodejs-Req.body 在 Express 4.x 的帖子中未定义

    我正在使用中间件body parser对表单值进行编码以获取 req body 对象 但当我调试代码时 发现 req body 未定义 这是我的代码 var express require express var app express v
  • Linux 和 Windows 之间的移植如何进行?

    如果一款特定的软件要在一个平台上运行 而程序员 公司 任何人想要将其移植到另一个平台上 那么到底要做什么 我的意思是 他们只是将 Linux 或 Windows 特定的引用重写为另一个中的等效引用吗 或者是否需要整个重写 只是想了解是什么导
  • VSO NuGet Publisher 构建步骤失败

    我正在使用 Visual Studio Online 包管理器预览版以及新的构建系统 包管理器预览添加了许多构建步骤 包括 NuGet Publisher 步骤 该步骤应将包推送到 Visual Studio Online 托管的私有源 N
  • 无法在 swift iOS 8 扩展中投射 UIImage

    我有一个奇怪的问题 我正在尝试构建一个操作扩展 该扩展将从提供的图像中扫描条形码 这是代码 override func viewDidLoad super viewDidLoad Get the item s we re handling
  • 使用带有附加参数的自定义规则验证 Laravel 中的数组

    我正在使用 Laravel 5 7 我需要使用 2 个输入 前缀 数字 来验证电话长度 总位数必须始终为 10 我正在将这个自定义规则用于其他运行良好的项目
  • 如何在命令行上从 COM exe 中提取 TypeLib

    我最近需要生成一个互操作程序集 经过一番谷歌搜索后我发现tlbimp exe 我的下一个问题是我的 COM 库没有附带 tlb文件 进一步的谷歌搜索显示 类型库通常作为资源包含在 exe dll 中 果然 在 VS2010 中打开 exe
  • 为什么不调用 Destroy?

    鉴于以下 Delphi 代码 Foo is Free d on FormClose but TFoo Destroy没有被调用 因此Bar is not Freed 导致内存泄漏 我是否在这里错过了一些东西 或者 Foo Free 在某个时
  • 定义和分配属性之间的区别

    为对象分配属性和定义属性有什么区别 哪一个更好以及如何实现 This Object defineProperty obj p propDesc 或者简单地 obj p someValue Object defineProperty让您可以设
  • 使用 $.post 将对象集合传递到 MVC 控制器

    我们正在尝试使用 json 和 jQuery post 函数将对象集合从我们的页面发送到您的控制器 MVC 3 下面是我们的 js 代码以及控制器和对象定义 问题是 当对象被适当地发送到我们的控制器时 它的成员变量没有被填充 Coords
  • jquery 调用命名函数的点击事件

    我有一个 jQueryonClick处理程序 用匿名函数编写 如下所示 selector on click function do something 我将概括在命名函数中提取逻辑的匿名函数 这促使我执行以下操作 selector on c
  • 链接批处理脚本时出现意外的双 & 符号/管道行为

    我的 foo bat 文件 exit b 1 我在cmd提示符下执行的内容 foo bat echo OK Result exit b 1 OK 然而 当我使用双管时 不会出现回声 foo bat echo OK Result exit b
  • 您将如何编写一种简单的编程语言? [复制]

    这个问题在这里已经有答案了 可能的重复 设计简单编程语言的方法 学习编写编译器 我想编写一种语法类似于 QBasic 但更简单的编程语言 我希望它适合初学者 它的简单性将鼓励有抱负的程序员不要放弃并让他们对编程产生兴趣 例如 代替 QBas