创建解释型语言的过程是什么?

7

我希望创建一种非常简单的实验性编程语言。有哪些资源可以查看以获取创建解释语言的过程概述。我将使用C++构建和编译解释器。


1
那个有点太 LISP 特定了。 - Georg Fritzsche
1
@Neil:虽然相似,但这并不是一个重复的问题——它询问了关于Lisp解释器的问题,而答案大多也只适用于Lisp。虽然OP的语言可能与Lisp相似,但并不确定。 - Jerry Coffin
相关:https://dev59.com/x3VD5IYBdhLWcg3wXaed - Georg Fritzsche
1
"我该如何制作一种解释性语言?""你可以看看所有关于编译器的与此无关的东西。" - JamEngulfer
4个回答

5
你需要实现解析器和解释器。
有一本名为“编程语言:应用与解释”的免费教材,使用Scheme构建越来越复杂的解释器。它也是一个很好的介绍编程语言特性的入门教材。
在这里查看:http://www.cs.brown.edu/~sk/Publications/Books/ProgLangs/ 如果Scheme不适合你,可以考虑其他选择。

2
Scheme和C++相距甚远。 - Earlz
我知道C++和Scheme在编程语言的范畴中毫不相同,但是本书采用的Scheme方法可能会使提问者更多地了解语言设计的基本原则。 - Ben

5

以下是几个步骤:

首先,构建词法分析器和语法分析器。使用常见的工具,例如lex和yacc,或者使用更现代的框架,如Antlr(我推荐使用这个),这些工具会为您的目标语言生成源代码,然后你可以编译并将其包含到你的项目中。

词法分析器和语法分析器将构建源文件的内部表示。有几种不同的方法来处理这个问题:

  1. bytecode 模型中,源文件被编译成低级内部语言,你需要编写一个 bytecode interpreter 直接执行操作。例如,Perl和.NET语言就是这种方式。
  2. object tree 模型中,源文件被编译成一个对象树,其中每个对象都知道如何执行自己。一旦解析完成,只需调用根对象上的 Exec() 方法(这将调用其子对象的 Exec() 方法,以此类推)。这基本上是我为我的解释型领域特定语言Phonix使用的方法。

1
创建解释性语言,需要创建两件事情:
  • 语言语法的正式定义
  • 能够读取和解释语言的解析器

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


0

看一下boost库中的"spirit" LL解析器。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接