【问题标题】:What is the process of creating an interpreted language? [duplicate]创建解释性语言的过程是什么? [复制]
【发布时间】:2010-05-27 17:16:51
【问题描述】:

我想创建一个非常简单的实验性编程语言。我可以查看哪些资源来大致了解创建解释语言的过程。我将使用 c++ 来构建和编译解释器。

【问题讨论】:

  • 那个有点太特定于 LISP 了。
  • @Neil:虽然类似,但这并不是真正的重复——它询问的是 Lisp 解释器,而且答案也大多是 Lisp 独有的。虽然 OP 的语言可能足以像 Lisp 一样让那些应用,但并不确定。
  • “如何制作解释语言?” “你如何检查所有这些与编译器无关的东西”

标签: c++ programming-languages interpreter


【解决方案1】:

您需要同时实现解析器和解释器。

有一本很棒的免费教科书,名为“Programming Languages: Application and Interpretation”,它使用方案来构建越来越复杂的解释器。它还可以很好地介绍编程语言的特性。

在这里查看:http://www.cs.brown.edu/~sk/Publications/Books/ProgLangs/

如果 Scheme 不是你的菜,那么它可能值得研究。

【讨论】:

  • heh Scheme 和 C++ 相距甚远。
  • 我知道 C++ 和 Scheme 在语言范围内相距甚远,但本书采用 Scheme 的方法可能会让提问者更多地了解语言设计的基本原则。
【解决方案2】:

几个步骤:

首先,构建词法分析器和解析器。使用 lex 和 yacc 等常用工具或使用 Antlr 等更现代的框架(这是我推荐的)很容易做到这一点。这些工具将为您的目标语言生成源代码,然后您可以编译并包含在您的项目中。

词法分析器和解析器将构建源文件的内部表示。有几种不同的方法可以解决这个问题:

  1. 字节码模型中,源文件被编译成低级的内部语言,你可以为此编写一个字节码解释器直接执行操作。例如,这就是 Perl 和 .NET 语言的工作方式。
  2. 对象树模型中,源文件被编译成一个对象树,其中每个对象都知道如何执行自己。解析完成后,您只需在根对象上调用Exec()(反过来又在其子对象上调用Exec(),等等)。这基本上是我用于解释域特定语言Phonix 的方法。

【讨论】:

    【解决方案3】:

    要创建解释型语言,您需要创建两件事:

    • 语言语法的正式定义
    • 可以读取和解释语言的解析器

    一旦您定义了语言本身,就可以使用多种工具来帮助创建语言解析器。经典工具有lexyacc,以及它们的开源版本flexbison

    【讨论】:

      【解决方案4】:

      看看 boost 库“spirit”LL 解析器。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-09-21
        • 1970-01-01
        • 2012-01-30
        • 1970-01-01
        • 2011-05-17
        • 1970-01-01
        • 2011-02-09
        相关资源
        最近更新 更多