问题标签 [interpreter]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Ruby/Python 中有开源 BASIC 解释器吗?
我想要一些简单的东西来进行实验/破解。我为 c 创建了很多解释器/编译器,我只想要一些简单的东西。一个基本的 BASIC :D
如果你不知道(我已经完成了我的谷歌搜索......),yacc/bison 是唯一的方法吗?
谢谢
interpreter - 无需安装即可从 USB 记忆棒编程语言
我正在寻找具有基本数学支持和文件 IO 的语言的编译器或解释器,可以直接从 Linux 或 Windows 中的记忆棒执行。内置基本数据结构和排序/搜索的功能将是一个加号。
(我读过可移动的python,但它只支持windows)
谢谢
macos - 如何让方案解释器在 Emacs 中工作?
我正在通过 SICP,我希望有一个类似于交互式 Python 解释器的解释器,以便在我观看讲座和阅读本书时玩。此外,我希望这个解释器在 Emacs 中运行,这样我就可以在方案代码文件和交互式解释器等之间来回跳转。
但是,我对 Emacs 还很陌生,到目前为止还不能让它工作或找到一套清晰的指令来让它工作。
似乎我应该能够设置它,以便M-x run-scheme
打开一个交互式解释器,至少听起来正是我想要的,但目前这只是返回Searching for program: no such file or directory, scheme
,我无法弄清楚我到底是什么文件需要在哪里解决这个问题。
我正在GNU Emacs 22.1.1 (mac-apple-darwin, Carbon Version 1.6.0)
通过 OS X 10.5 安装 DVD 安装。
operators - 什么是原始的 Forth 运算符?
我对实现一个 Forth 系统很感兴趣,这样我就可以获得一些构建简单 VM 和运行时的经验。
在开始使用 Forth 时,通常首先了解堆栈及其运算符(DROP、DUP、SWAP 等),因此很自然地将这些视为原始运算符。但他们不是。它们中的每一个都可以分解为直接操作内存和堆栈指针的运算符。后来学习了 store (!) 和 fetch (@),它们可用于实现 DUP、SWAP 等(哈哈!)。
那么什么是原始运算符呢?哪些必须直接在运行时环境中实现,所有其他的都可以在其中构建?我对高性能不感兴趣;我想要一些我(和其他人)可以从中学习的东西。运算符优化可以稍后进行。
(是的,我知道我可以从图灵机开始,然后从那里开始。这有点极端。)
编辑:我的目标类似于引导操作系统或新编译器。我至少需要实现什么,以便我可以用这些原始构建块构建系统的其余部分?我不会在裸硬件上实现它;作为一项教育练习,我会编写自己的最小虚拟机。
java - 在 JVM 之上运行/解释 C?
有没有办法在 JVM 上运行纯 c 代码?
不通过 JNI 连接,运行,就像你可以通过 JRuby 运行 ruby 代码,或者通过 Rhino 运行 javascript。
如果没有当前的解决方案,您建议我应该怎么做?
显然,我想使用尽可能多的部分解决方案来实现它。
ANTLR 似乎是一个很好的起点,拥有完整的“ANSI C”语法实现......
我应该使用 ANTLR 生成的代码在 JVM 上构建一个“玩具”虚拟机吗?
python - 安静地重启 Python 解释器
我在应用程序中嵌入了一个 python 解释器。该应用程序需要很长时间才能启动,并且我无法在不重新启动整个应用程序的情况下重新启动解释器。我想做的是本质上保存解释器的状态并轻松返回该状态。
我首先将所有模块的名称存储在 python 解释器开始使用的 sys.modules 中,然后在请求时从 sys.modules 中删除所有新模块。这似乎使解释器准备重新导入相同的模块,即使它之前已经导入了它们。但是,这似乎并不适用于所有情况,例如使用单例类和静态方法等。
如果可以避免的话,我宁愿不要在这个解释器中嵌入另一个解释器,因为将失去使用应用程序 API 的便利性(以及包括我想象的轻微的速度影响)。
那么,有没有人知道我可以存储解释器的状态然后返回到这个状态以便它可以应对所有情况的方法?
谢谢,
担
ruby-on-rails - 有没有很好的资源来获取 Ruby 企业版在野外的使用情况?
我们在内部使用 Phusion 堆栈(Passenger和Ruby Enterprise Edition)取得了很好的成果,但我无法找到很多关于它们在野外使用的数据,尤其是 REE。我喜欢类似于 WWR 的High Profile Organizations Using Rails或 Ben Forta 的Who's Using ColdFusion?列表。
在这方面有一些谷歌小组活动,但我正在寻找更多的东西,因为没有更好的词,PHB 友好。
assembly - 解释汇编代码
那里有汇编口译员吗?
我在找什么:
- 我有一些我想运行的汇编固件代码,但不是在实际硬件上。
- 我想运行代码,看看它在做什么。
那么,那里有某种免费且易于使用的装配模拟器吗?
你能想到的任何其他指针?
compiler-construction - 编写编程语言的建议?
您能给想要编写编程或脚本语言的人什么建议?我不担心如何编程或设计编译器,而是担心如何使用工具和代码生成器快速开发编译器。
上次我尝试用 C++ 编写它,状态和语法几乎与编写实际逻辑一样长。我知道以下工具会有所帮助。
我在想我可以生成 c++ 代码并让 gcc 编译它。使用上述工具,您估计编写程序或脚本语言需要多长时间?
早在学习编写编译器时,人们就反复询问过这个问题的变体。这是有关该主题的 SO 资源的不完整列表。
compiler-construction - 实现编译器和解释器有什么区别?
我最近阅读了整本《龙之书》(只是为了好玩,我并没有真正打算实现一个实际的编译器),我的脑海中留下了一个悬而未决的大问题。
实现编译器和解释器有什么不同?
对我来说,编译器由以下部分组成:
- 词法分析器
- 解析器(构建语法树)
- 生成中间码(如 3 地址码)
- 如果你愿意,可以做所有这些疯狂的事情来优化:-)
- 从 3 地址码生成“汇编”或“本机代码”。
现在,很明显,解释器也具有与编译器相同的词法分析器和解析器。
但在那之后它会做什么?
它是否“读取”语法树并直接执行它?(有点像有一个指向树中当前节点的指令指针,执行是一个大树遍历加上调用堆栈的内存管理)(如果是这样,它是如何做到的?我希望执行比检查它是什么类型的节点的巨大 switch 语句更好)
它会生成 3 个地址代码并对其进行解释吗?(如果是这样,它是如何做到的?同样,我正在寻找比一英里长的 switch 语句更优雅的东西)
- 它会生成真正的本机代码,将其加载到内存中并使其运行吗?(此时我猜它不再是解释器,而更像是 JIT 编译器)
另外,“虚拟机”的概念是在什么时候切入的?您在语言中使用虚拟机做什么?(要清楚我的无知程度,对我来说虚拟机是VMWare,我不知道VM的概念如何应用于编程语言/执行程序)。
如您所见,我的问题非常广泛。我主要不仅在寻找使用哪种方法,而且主要是首先了解大概念,然后详细了解它的工作原理。我想要丑陋的原始细节。显然,这更多的是寻求参考要阅读的内容,而不是期望您在这里回答所有这些细节。
谢谢!
丹尼尔
编辑:谢谢你到目前为止的回答。但我意识到我的标题具有误导性。我了解编译器和解释器之间的“功能”差异。
我正在寻找的是您如何实现解释器与编译器的区别。
我现在了解编译器是如何实现的,问题是解释器与它有何不同。
例如:VB6 显然既是编译器又是解释器。我现在了解编译器部分。但是,我无法理解,当在 IDE 中运行时,它可以让我在任意点停止程序、更改代码并使用新代码恢复执行。这只是一个很小的例子,这不是我正在寻找的答案。正如我在下面解释的那样,我试图理解的是在我拥有解析树之后会发生什么。编译器将从它以“目标”语言生成新代码。口译员做什么的?
感谢您的帮助!