- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
现在,在我开始问愚蠢的问题之前,我想说我在 JavaScript 和 C# 方面都有丰富的经验。
所以最近我开始了创建自己的编程语言的旅程。我找到了一个使用 javaScript 的好教程( http://lisperator.net/pltut/dream ) 但我不太明白这一点。你如何创建一个“独立”的编译器。现在,这是一个虚构的词,用来描述作为一个全新程序运行的编译器。例如“node index.js”。你不必用其他东西编译编译器。
如果我用 JavaScript 创建编译器,我仍然需要像这样为 ex 'node compiler.js nameofthefile.ext' 编译编译器。
然后我发现了一个叫做引导编译器的东西。因此,例如,您使用 Java 或 C 为您的新语言创建了一个编译器,然后您创建了一个用新语言编写的新编译器,并使用该编译器编译它以获得一个用新语言编写的新编译器。但我仍然不明白如何运行它。
例如,如果要用 C 来实现(这就是我打算做的),那么我将拥有名为 compiler.c 的文件
现在我需要编译 C 代码,所以我做了例如“make compiler.c”,这给了我一个名为“compiler”(在我使用的 Linux 中)或“compiler.exe”(在 Windows 中)。
所以现在要运行该程序,我可以执行 ./compiler,然后给它一个参数 the/path/to/the/programming_language.someExt
如果一切运行良好,它将执行我用新语言编写的程序所执行的操作。
但即使是现在我也无法将那个版本的编译器提供给 Windows 用户,因为编译器需要是 .exe 文件。
如果您仍在阅读本文,还有更多...如果然后想要引导当前编译器怎么办。
所以现在它自己的编译器将被称为 compiler.theExtOfTheProgrammingLang 而我想要编译的代码将是 hello_world.theExtOfTheProgrammingLang。但是现在我不能只运行编译器,因为我需要先使用以前的编译器编译它。
这一切让我脑子里一片困惑,但我不想放弃。
最佳答案
我会试着给你画一幅画。
您正在创建一种新语言 L
。对于那种语言,你编写了一个编译器,CL(例如)Java,它从 L
编译到 x86 并创建一个 ELF 可执行文件(即 Linux 可执行文件)。您需要使用 JVM 才能使用 CL(好吧,从技术上讲,有工具链可以将 Java 编译为 native ,但让我们忽略它)。
假设您不想受 JVM 限制,而是更喜欢在 Linux 上本地运行。嗯,没问题。您刚刚编写了一个从 L 编译为 native Linux 可执行文件的编译器。您只需要使用该编译器 CL 来编写一个新的编译器 C2L。 C2L 与 CL 做同样的事情,只是它是用 L
而不是 Java 编写的,所以你可以用 CL(在 JVM 上运行 CL)。编译 C2L 后,您不再需要 JVM 来运行或编译任何东西,因为 C2L 在 native 运行并编译为 native 可执行文件。
现在,如果您想创建另一个在 Windows 上运行的编译器,您需要创建第三个编译器 C3L,它将 L
编译为 native EXE (或您选择的任何 Windows 兼容格式)- 该编译器将使用 CL 或 C2L 进行编译。一旦你编译了 C3L,你就可以将该可执行文件转移到 Windows 机器上,你就完成了。
关于c - 在创建 "stand alone"编译器时遇到困难,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51835935/
我忘了,但是 EAGL 代表什么具体的东西吗?或者它只是核心动画 OpenGL 命名约定的一部分(CAEAGLLayer 等)? 最佳答案 “AGL”是苹果 OS X 的 OpenGL 扩展的名称。我
我有 2 个表: 包含 gold_country、silver_country、bronze_country 列的 olympic_medalists 带有国家列的标志 我想相应地列出奥运奖牌表。我有
我有一些带有@prim: #colorCode 的.css 文件,@prim 代表什么?因为它只在一个地方使用,所以我无法弄清楚@prim 的用途。并且 Eclipse 正在报告错误“意外的 toke
我正在查看 Kestrel 的源代码并发现了一些有趣的东西。从它的 dev 分支,你可以看到有一个名为 HttpClientSlim 的独立类文件。在不属于任何项目的 /test/shared 文件夹
我正在试图理解编译C/C++项目时如何使用MT和MD选项。然而,由于无法将这些假定的缩略语扩展为有意义的短语,我忘记了从一段到下一段哪个是哪个。奇怪的是,我读过的文章都不是从定义M、T和D开始的,它们
我知道向它们发出警告的方法,但我想让我的合法警告与我的待办事项分开。我还没有看到 xcode 4 像每个人似乎都认为的那样突出显示待办事项。并且 xcode 的 todo 支持仅适用于函数之外的 to
我有一个相当普遍的问题:我最近在 C/C++ 代码中看到许多#defines 被注释为“/*< ... */”,例如: #define ARRSIZE(x) (sizeof(x)/s
我正在查看 pthreadtypes.h 文件中的 pthread_mutex_t 结构。 “__lock”代表什么?它就像分配给互斥锁的锁号吗? typedef union { struct _
我在 JavaScript 中有这段代码 var pts = "0 0, 0 1909, 2559 1909, 2559 0"; pts.replace(/0/g, '2'); 问题是它替换了所有零!
这可能是文档中的一个错误,或者只是我弄错了,但无论如何我认为看到同一个 fb: 命名空间的多个不同定义是令人困惑的: xmlns:fb="http://www.facebook.com/2008/fb
我有一个问题,在进入待机模式之前我需要清理一些东西。问题是,当客户按下电源按钮(如果配置为进入休眠模式)时,我也需要这样做。 PowerSetRequest(_PowerRequest, PowerR
我试图使用 Wiremock 独立服务器实现对 POST REST 调用的模拟。我面临这样的挑战,假设帖子正文包含一个“名称”字段及其值,该 POST 调用的响应中应返回相同的值。我的 json 文件
现在,在我开始问愚蠢的问题之前,我想说我在 JavaScript 和 C# 方面都有丰富的经验。 所以最近我开始了创建自己的编程语言的旅程。我找到了一个使用 javaScript 的好教程( http
我很想知道以下标记中的字母 g 代表什么: %1$suntil holiday 我从 https://developer.android.com/distribute/tools/loca
我在 prolog 中找不到明确的 (:) 代表什么. 在交互模式下,您可以看到以下证据: ?- display(a:b). :(a,b) true. ?- display([a,b,c]). .(a
我刚刚开始学习 Solidity,这是一项个人挑战。我不是开发人员,所以我还有很长的路要走。 我正在关注 Ethereum.org 教程,这是我有疑问的地方: “[msg.sender]”代表什么?
我习惯了 SQL Server 中的查询编辑器,在那里可以自由编写和执行 T-SQL。如何让以下代码在 PostgreSQL 中执行而无需从中创建函数? DECLARE l integer =
我已经使用 pandas 一段时间了,我了解 loc 和 iloc 的作用。但是直到今天我都不知道这两个东西是否代表什么?它们是某物的简称还是缩写?或者它们只是随机的? 我将 iloc 解释为“基于索
我正在尝试编写一个 Ruby 正则表达式,它可以捕获引用的短语,而不是前面有“:”的短语。例如: Obama: "Yes, we can!" 应该被忽略。 我写了一些测试: http://rubula
我试图弄清楚我做错了什么,但这是我唯一得到的错误。你能给我一些我可以寻找的提示吗? 错误发生在 Deutsch 时被选中,当 Englisch 时它工作正常被选中。 --Size 51,18 --Ze
我是一名优秀的程序员,十分优秀!