4
|
Abdulsattar Mohammed · 技术社区 · 15 年前 |
![]() |
1
16
在一个项目的演示过程中,给出一个项目的演示和实现整个项目是不同的。 在一个小时内,可以很好地呈现Java到x86编译器的一些有趣的方面,甚至可以显示一些代码:但这与在那时和那里创建所有代码不一样。 |
![]() |
2
18
让我们先从一些修正开始:
也就是说,用一种非常适合在一小时内编写编译器的语言为一种简单语言解释一个结构良好、简单的编译器是绝对可行的。 F是ML语言家族的成员(特别是OCAML的近亲),这些语言确实非常适合编写编译器。事实上, 原因 罗宾·米尔纳之所以选择ML(元语言)作为他的语言,是因为 特别设计 用于编写编译器。编译器基本上是一个大函数(因此在函数语言中实现是非常自然的),它检测模式(因此在模式匹配的语言中实现是非常自然的),并为它检测到的每个模式执行一点代码(因此在具有一流函数的语言中实现是非常自然的)。ONS)。那现在怎么办?F是一种功能性语言,具有非常复杂的模式匹配功能。另一个不错的特性是一个具有代数数据类型和区分联合的表示型系统,这使得表示抽象语法树非常容易。 在lang.net研讨会上,Jason Olson a talk on F# 在这个过程中,他展示了一些他目前正在研究的解释程序片段,这些片段很好地展示了这些特性。 Fredrik Holmstr_¶M目前正在研究 IronJS 是动态语言运行时的ECMAScript 3实现。看看 code 特别是 AST types 还有一些 analysis 和 parsing 代码。 Jonathan Tang's Write Yourself a Scheme in 48 Hours 这是另一个编写解释器的好例子,这次在与f_共享许多特性的haskell中。 The 90 Minute Scheme to C compiler by Marc Feeley 是关于用Scheme编写的方案编译器的演示文稿。 在 Implementing Scheme in Ruby 詹姆斯·科格兰教授观众方案,实时代码,并用Ruby解释方案解释器,并编写了几个示例方案程序,全部只需15分钟。 |
![]() |
3
8
Java是一种相当复杂的语言,所以我认为克里斯不会实现完整的Java编译器。然而,他的谈话确实指出,使用代码(和一般的树型结构)进行操作是 许多的 在F中比在任何其他.NET语言中都容易。这就是为什么F被用于各种静态分析工具(如微软的静态驱动验证程序)的原因。 像fslex和fsyacc这样的工具可以很容易地为一种语言编写解析器。克里斯有 blog with simple mathematical expressions . 罗伯特·皮克林写道 a more sophisticated example 它只需要几行代码就可以生成IL代码(将数学表达式编译为.NET)。如果使用表达式树生成代码,在.NET 4.0上更容易实现这一点。 所以我想,即使他是从头开始编写编译器,他也可以为一个语言编写编译器,这个语言可以用来编写非平凡的示例程序。 |
![]() |
Thomas · 使类型别名在F中不可互换# 3 年前 |
![]() |
sdgfsdh · 我该怎么说。使用异步转换函数进行收集? 7 年前 |
![]() |
Soldalma · 我可以实例化包含顶级副作用值的类吗? 7 年前 |
![]() |
matekus · F#-包含数字的字符串的自然排序 7 年前 |
![]() |
matekus · F#类型匹配-无法创建映射或匹配记录 7 年前 |
![]() |
Rob Lyndon · 未找到F#ProvidedTypes文件 7 年前 |
![]() |
red-swan · 如何将intro ML.Net演示翻译为F#? 7 年前 |
![]() |
jkone27 · F#-在编译时从字符串生成简单的空类型 7 年前 |