我决定在Ruby中编写一个小解释器作为我的下一个项目。我需要什么样的知识/技能才能获得成功? 我还没有决定要解释的语言,但我正在寻找一种不是玩具语言的东西,但是为这个语言编写翻译会相对容易。 提前致谢。
答案 0 :(得分:30)
你必须至少学习:
可以在介绍性文本Structure and Interpretation of Computer Programs中找到对其中一些主题的精彩介绍。该书中使用的语言是Scheme,它是一种强大的,指定良好的语言,非常适合您的第一个解释器实现。强烈推荐。
答案 1 :(得分:5)
我还没有确定要解释的语言,但我正在寻找 不是玩具语言的东西,但写起来比较容易 口译员。提前谢谢。
尝试一些Lisp方言,如Scheme或Clojure。 (现在有一个想法:Clojure-in-Ruby,它与Ruby集成以及Clojure与Java集成。)
使用Lisp,没有必要打扰语法的特性,因为Lisp的语法更接近抽象语法树。
答案 2 :(得分:2)
This SICP chapter展示了如何在Lisp中编写一个Lisp解释器(一个metacircular评估器)。在我看来,这是最好的起点。然后,您可以继续Lisp in Small Pieces来学习如何为Lisp编写高级解释器和编译器。实现像Lisp这样的语言(在Lisp本身!中)的优点是你可以免费获得词法分析器,解析器,AST,数据/程序表示和REPL。您可以专注于让您的优秀语言运作的任务!
答案 3 :(得分:2)
有一个树顶项目可以对你有所帮助http://treetop.rubyforge.org/
答案 4 :(得分:2)
您可以查看Ruby草案规范http://ruby-std.netlab.jp/
答案 5 :(得分:2)
几天前我有类似的想法。到目前为止,LISP是最容易实现的,因为语法非常简单,语言操作的数据结构与编写代码的结构相同。因此,您只需要一个最小的实现,并且可以根据本身。
但是,如果您正在尝试学习解析,您可能希望使用抽象语法树等执行更复杂的语言。
如果你想查看我的(字面上两天)Java实现的lisp,请查看mylisp.googlecode.com。我还在努力,但令人难以置信的是,让现有的东西工作的时间有多短。
答案 6 :(得分:1)
这并不难。这是一个LISP interpreter in ruby,来源太小,你应该复制/粘贴它。但你现在要学习LISP吗?和合。
答案 7 :(得分:1)
如果您只是为了好玩而这样做,请编写您自己的简单语言,然后尝试一下。我的建议就像一个非常简单的经典BASIC(没有视觉基础或面向对象的东西)。使用行号,GOTO,INPUT和PRINT就是这样。你可以完成基础知识,并且可以更好地理解事物的运作方式。
你需要的知识?
对于最后一个,你还需要一种方法来保持变量。通常你只是实现一个“堆栈”,一个巨大的数据块,你可以在最后标记一个区域。
答案 8 :(得分:1)
在Lisp中没有实现,但是当我开始使用Haskell时,我发现Write Yourself A Scheme in 48 Hours是一个非常有用的文档(虽然我在48之后没有接近完成它小时; YMMV)。它还为您提供了大量有关口译员的见解。
答案 9 :(得分:0)