代码之家  ›  专栏  ›  技术社区  ›  bennybdbc

怎么写翻译?

  •  15
  • bennybdbc  · 技术社区  · 15 年前

    我决定用Ruby编写一个小型的解释器作为我的下一个项目。我需要哪些知识/技能才能成功?
    我还没有决定要用哪种语言来翻译,但我正在寻找一种不是玩具语言,而是相对容易为其编写翻译的语言。 事先谢谢。

    10 回复  |  直到 15 年前
        1
  •  30
  •   Greg Hewgill    15 年前

    你必须至少学习:

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

    这些主题中的一些可以在介绍性文本中找到一个很好的介绍。 Structure and Interpretation of Computer Programs . 该书中使用的语言是Scheme,它是一种健壮的、指定良好的语言,非常适合您的第一个解释器实现。强烈推荐。

        2
  •  5
  •   Joshua Fox    15 年前

    我还没有决定要用哪种语言来解释,但我正在寻找 不是玩具语言,但相对容易写的东西 的翻译。事先谢谢。

    尝试一些口齿不清的方言,比如“阴谋”或“clojure”。(现在有一个想法:Ruby中的Culjule,它与露比以及Culjuri集成在Java上。)

    有了Lisp,就不必为语法的特殊性操心了,因为Lisp的语法更接近抽象语法树。

        3
  •  2
  •   Vijay Mathew Chor-ming Lung    15 年前

    This SICP chapter 演示如何在Lisp(元循环计算器)中编写Lisp解释器。在我看来,这是最好的开始。然后你可以继续 Lisp in Small Pieces 学习如何为Lisp编写高级解释程序和编译器。实现类似Lisp的语言的优势(在Lisp本身中!)您可以免费获得词汇分析器、解析器、AST、数据/程序表示和repl。你可以专注于让你伟大的语言工作!

        4
  •  2
  •   Sebastian    15 年前

    有树顶项目可以帮助你 http://treetop.rubyforge.org/

        5
  •  2
  •   allenwei    15 年前

    您可以检查Ruby草案规范 http://ruby-std.netlab.jp/

        6
  •  2
  •   triggerNZ    15 年前

    几天前我也有类似的想法。到目前为止,Lisp是最容易实现的,因为它的语法非常简单,并且语言操作的数据结构与代码编写时使用的结构相同。因此,您只需要一个最小的实现,并且可以根据自身来定义其余部分。

    但是,如果您试图学习解析,您可能需要使用抽象语法树等来执行更复杂的语言。

    如果您想查看我的LISP(实际上是两天)的Java实现,请签出 mylisp.googlecode.com . 我仍在努力,但令人难以置信的是,我花了这么短的时间才让现有的东西运作起来。

        7
  •  1
  •   Camilo Martin    15 年前

    这并不难。这里有一个 LISP interpreter in ruby 源太小了,你应该复制/粘贴它。但是你现在要学Lisp吗?呵呵。

        8
  •  1
  •   uliwitness    11 年前

    如果你只是为了好玩,那就自己编一个简单的语言,试试看。我的建议是一个非常简单的经典基础(没有VisualBasic或面向对象的东西)。有了行号,转到,输入和打印,就这样了。你可以做一些基本的事情,更好地理解事情是如何工作的。

    你需要的知识?

    • 标记化(将大量字符转换为更有效可读的内容,有效地将其拆分为“单词”)。
    • 解析(遍历标记并从中构建数据结构)
    • 解释(循环访问数据结构并执行每个命令)

    对于最后一个问题,你还需要一种方法来保持变量。通常,你只需要实现一个“栈”,一个巨大的数据块,在那里你可以在最后标出一个区域。

        9
  •  1
  •   Inaimathi    11 年前

    它不是 实施 但我发现 Write Yourself A Scheme in 48 Hours 这是一个非常有用的文件,当我开始与哈斯克尔(虽然我没有得到任何接近完成48小时后,YMMV)。它也能让你对口译员有很多了解。

        10
  •  0
  •   Ashley Davis    14 年前

    我可以推荐这本书。它讨论了编写解析器和解释器的模式,以及更多:

    http://www.amazon.co.uk/s/ref=nb_sb_noss?url=search-alias%3Daps&field-keywords=language+implementation+patterns&x=0&y=0