![]() |
1
13
我不知道你在问什么;即使有大量的选项,DU仍然很容易定义。见例。 this blog entry 对于微型语言的DU结构(以及关于编写树转换的更一般性的讨论)。有一个包含更多案例的DU是很好的,在编译器/解释器中使用这种表示是很常见的。 FParsec 或者看 this old blog entry . 在使用了这样的解析器组合器之后,我再也不能回到像lex/yacc/ANTLR这样的东西了——相比之下,外部DSL似乎太原始了。 (编辑:你发现的“微小的算术示例”可能也很能代表更大的解决方案。“玩具”示例通常展示正确的架构。) |
![]() |
2
3
你应该带一本罗伯特·皮克林的《开始F》。 第13章“解析文本”包含一个示例 FsLex 和 FsYacc ,正如诺尔多林所建议的。 除此之外,在同一本书的第12章中,作者解释了如何为他提出的算术语言构建一个实际的简单编译器。很有启发性。最重要的部分是您正在寻找的内容: . 祝你好运 |
![]() |
3
3
|
![]() |
4
2
您可能对查看 Lexing and Parsing F#维基百科的一节。这个 F# PowerPack library 包含 FsLex和FsYacc工具 ,这与此有很大关系。WikiBook指南是一个很好的入门方法。 除此之外,您还需要考虑如何实际执行AST表单中的代码,这在编译器和解释器的设计中都很常见。然而,这通常被认为是比较容易的部分,并且有很多关于编译器/解释器的通用资源可以提供这方面的信息。 |
![]() |
5
2
我自己还没有做过翻译。希望以下帮助:) Here 这是耶鲁大学用ML教授的一门编译器课程,你可能会发现它很有用。课堂讲稿非常简洁(简短)且内容丰富。你可以按照前几个课堂讲稿和作业进行操作。如您所知,读取ML程序不会有问题。 顺便说一句,这位教授是a的学生。Appel,SML实现的创建者。从这些笔记中,你也可以得到 最自然 用ML族语言编写编译器/解释器的方法。 |
![]() |
6
0
This is 使用F#和FParsec的完整小型基本实现的一个极好示例。它甚至包括IL编译器。整个代码非常容易访问,并附有作者在 http://trelford.com/blog/ |
![]() |
JCN · 要创建编译器,是否必须生成AST? 7 年前 |
![]() |
Song Wukong · yacc:如何“保存”代码以备将来执行? 7 年前 |
![]() |
Bailey Parker · 使用ppx\U驱动程序进行AST转换(使用ocaml\U current\U AST进行register\U transformation\u)有什么好的用法示例吗? 7 年前 |
![]() |
tekknolagi · 模式匹配中的OCaml多态变体 7 年前 |