Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Functional programming 为函数式语言设计解释器的主要问题是什么?_Functional Programming_Interpreter - Fatal编程技术网

Functional programming 为函数式语言设计解释器的主要问题是什么?

Functional programming 为函数式语言设计解释器的主要问题是什么?,functional-programming,interpreter,Functional Programming,Interpreter,假设我想为函数式语言实现一个解释器。我想了解这样做所涉及的问题以及可用的适当文献。这是一种处于早期设计阶段的新语言,这就是问题范围广泛的原因 在本次讨论中,我们可以假设语言的目的并不重要,如果它对编写口译员的难易程度产生重大影响,那么它的功能特征可以改变(甚至是彻底改变) 麻省理工学院网站上有麻省理工学院6.001课程使用计划的在线副本,该计划于1986年由惠普公司记录。这些都是对语言设计的一个很好的介绍。我强烈推荐作为起点。这本书将介绍编写解释器(和编译器)的意义,对于任何设计语言的人来说,这

假设我想为函数式语言实现一个解释器。我想了解这样做所涉及的问题以及可用的适当文献。这是一种处于早期设计阶段的新语言,这就是问题范围广泛的原因

在本次讨论中,我们可以假设语言的目的并不重要,如果它对编写口译员的难易程度产生重大影响,那么它的功能特征可以改变(甚至是彻底改变)

麻省理工学院网站上有麻省理工学院6.001课程使用计划的在线副本,该计划于1986年由惠普公司记录。这些都是对语言设计的一个很好的介绍。

我强烈推荐作为起点。这本书将介绍编写解释器(和编译器)的意义,对于任何设计语言的人来说,这通常是必读的


为函数式语言实现解释器与为任何其他通用语言实现解释器没有太大区别。有词法分析、解析、AST构造、语义分析,还有执行(对于纯解释器)或代码生成和优化(对于编译器,甚至编译成Java/Perl/Python等字节码)。SICP将介绍“应用程序顺序”和“正常顺序”求值之间的区别,这在纯函数上下文中可能对您很重要。

主要问题是为您正在实现的语言提供语义——这样,实现就变得简单了。否则,这个问题就非常广泛,很难回答。

对于任何语言解释器或编译器来说,我认为主要问题都是一样的

您需要确定该语言的某些基本特征(语义,而不是语法),而该语言的大部分设计都是基于此

  • 例如,您的语言是否有 类型系统?如果是的话,是什么样的 它有什么类型?会是这样吗 静态类型,动态类型, 鸭子打字

  • 你是什么表情 计划支持?你需要吗 定义操作顺序?意志 你甚至有接线员

  • 您将使用什么作为运行时 该计划的代表性?意志 将文本转换为字节码 表示法,或AST,或 源文本的标记化形式


有一些工具包可以帮助消除文本实际解析过程中的一些繁琐(仅举两例,ANTLR和Bison),但我不知道有什么可以帮助完成任务的实际解释部分。我相信有人会提出一些建议。

我推荐编程语言要点作为SICP的一个很好的补充,特别是如果你对口译员感兴趣:官方EOPL网站。您可能想查看--该站点尚未更新


编辑:防止垃圾邮件让我在链接之间做出选择,因此官方页面现在不加热。不过,它很容易通过谷歌搜索。

我只是温和地建议您可能希望查看过去的问题,并接受答案,如果每个问题都有合适的答案。这应该是一个真正的社区维基。@Bobby-我已经这样做了@大卫-我如何使它成为一个社区维基?如果你能做到,请继续。我对成为一名图书管理员或获取声誉积分等政治方面不是特别感兴趣。@S.Lott-如果你告诉我在哪里可以找到这个“社区维基”按钮,我现在就可以按下它。否则,我更感兴趣的是您对手头问题的任何技术意见。@S I:编辑您的问题。你贴的时候它在底部。当你编辑它时,它就在那里。如果您愿意,可以查看堆栈溢出帮助页面。我不需要完整的“答案”。我正在寻找关于问题的讨论和关于潜在陷阱的建议。太好了。这本书和讲座视频都是在线的,是对函数式编程和语言设计的精彩介绍。