![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
方言
文章平均质量分 58
心想才事成
这个作者很懒,什么都没留下…
展开
-
说说保护方言的重要
说说保护方言的重要原创 2014-02-14 22:44:28 · 1462 阅读 · 0 评论 -
使用解析器
使用解析器 使用解析器是非常简单,可以使用它自己的词法分析器,但是,用fsyacc.exe 产生的解析器总是要求词法分析器。在这一小节,我们将讨论如何使用自己的词法分析器,以及与解析器联合。 警告记住F# 编译器不能直接使用.fsl 和 .fsy 文件,需要用fslex.exe 和 fsyacc.exe 进行编译,创建.fs 文件,然后才能使用。通常,使用预编译事件实现,它在翻译 2014-06-16 08:58:23 · 1156 阅读 · 0 评论 -
实现基于数据结构的语言
实现基于数据结构的语言 创建任何 DSL 都应该从定义需要解决的问题开始。这里,我们需要定义一个 DSL 库(有时也称为组合库,combinators library),用于二维图形,这是一个很明显的选择。这个示例演示如何用大量简单的基本图形构建出复杂的结构。在计算机屏幕上的图像本质上就是线条和多边形的集合,尽管显示出来的图形可能极其复杂。这个示例用四个模块表现:第一,清单 12-1,提供翻译 2014-05-30 15:09:19 · 1047 阅读 · 0 评论 -
文本符号化:Fslex
文本符号化:Fslex 文本符号化(Tokenizing,有时也叫词法分析,lexical analysis 或 lexing),其基本意思是把文本分成可管理的块(lump),或符号(token)。要用到工具fslex.exe,它本身就是创建词法分析器(有时也叫扫描器,scanner),进行文本符号化的程序或模块的特定域语言。fslex.exe 是命令行程序,接收参数是表示词法分析器的文本翻译 2014-06-12 11:05:45 · 1923 阅读 · 0 评论 -
生成解析器:Fsyacc
生成解析器:Fsyacc 扫描器就是一段程序或模块,把文本流拆成片断,解析器可以看作是把文本重新组织为更有意义的内容。解析器的目标通常是产生抽象语法树,通过定义规则,确定符号应该出现的顺序。工具fsyacc.exe 生成的解析器,是向前看从左到右(look-ahead left-to-right)的解析器,通常称为 LALR(1)[ 好像解释的有点问题,下面的内容来自百度百科 LR 分析法翻译 2014-06-13 14:38:31 · 1175 阅读 · 0 评论 -
数据结构成为小语言
数据结构成为小语言 面向语言的开发并不一定意味着,一定要自己开发解析器或编译器。这就是说,我们将在下一章学习创建解析器,然后,把这样的解析器和本章介绍的方法照结合起来,去构建一个简单的编译器。可以通过创建数据结构和函数或模块,就能够做很多事,数据结构描述了准备做什么,而函数或模块定义了如何解释结构。几乎可以用任何语言创建数据结构来表示一个程序,但是 F# 更适合。F# 的文字列表和数组翻译 2014-05-28 15:15:59 · 1009 阅读 · 0 评论 -
第十二章 面向语言编程
第十二章 面向语言编程 在这一章,首先了解什么是面向语言的编程(language-oriented programming),许多人都在用,定义也各不相同。我们将主要讨论它的优点、不足;然后,再看F# 中面向语言编程的几种不同方法,这些方法包括使用 F# 文字创建“小语言”(little languages),使用 F# 引用(quotations),本章的大部分将讨论创建一种语言的示例,翻译 2014-05-28 10:16:56 · 1130 阅读 · 0 评论 -
使用 fslex.exe 和 fsyacc.exe
使用 fslex.exe 和 fsyacc.exe 在这一节,我们将学习如何使用fslex.exe 和 fsyacc.exe 两个工具,它是由 F# 提供的,用来为 F# 语言创建解析器。 注意fslex.exe 和 fsyacc.exe 是以 ocamllex.exe和 ocamlyacc.exe 为基础的,它们是随 O'Caml 发布的工具。 正如前一章所讨论的,创翻译 2014-06-11 14:42:34 · 1345 阅读 · 0 评论 -
语言定义的其他示例
语言定义的其他示例 在本章的以后部分,我们会看到有关如何解析简单的算术语言的两个扩展示例。第一个用fslex.exe 和 fsyacc.exe 实现,第二个用开源的解析库 FParsec。这种语言与前一章的非常相似,语言规范完全相同,有四则运算,只是不再使用连接符(combinator),语言本身有文字格式 *、+、/、- 来表示运算。扩展的巴氏范式(Extended Backus–Nau翻译 2014-06-11 14:27:58 · 1149 阅读 · 0 评论 -
编译抽象语法树
编译抽象语法树 对大多数开发人员来说,编译就意谓着产生本地代码,给人感觉就是一个字,难。但是,并不一定要产生本地代码,对于 DSL,通常产生其他更加通用的编程语言。.NET 框架提供几个把抽象语法树编译成程序的功能。技术的选择取决于几个因素。例如,如果语言针对的是开发人员,那么,生成文本文件就足够了,内容可以是 F#,也可以是其他语言,或者是编译过的程序集,能在程序中使用;然而,如果针翻译 2014-06-06 15:35:12 · 4210 阅读 · 0 评论 -
解释抽象语法树
解释抽象语法树 创建了抽象语法树之后,有两个选择:解释或编译。解释,简单地说,就是遍历树,同时执行操作;编译,就是改变成其他形式,对于机器执行来说可能更简单,通常可能更快。这一小节先讨论如何解释结果,下面一小节再讨论编译的内容,最后,再讨论何时应该用解释,何时应该用编译的问题。下面的例子是一个很小解释器,解释抽象语法树的主要工作由函数interpret 完成,它遍历树,并同时执行需要的翻译 2014-06-04 14:28:13 · 4202 阅读 · 0 评论 -
抽象语法树(Abstract Syntax Tree)
抽象语法树(Abstract Syntax Tree) 抽象语法树(AST)表示组成程序的结构,可以让程序员更容易使用,F# 适宜这种开发的一个原因就是它的联合类型。这种类型非常适合表示语言,因为它可以用来表示相关而结构不相同的项目。下面就是抽象语法树的例子: type Ast = | Ident of string | Val of System.Double翻译 2014-06-04 10:18:42 · 9152 阅读 · 0 评论 -
为算术语言(Arithmetic-Language)实现编译器和解释器
为算术语言(Arithmetic-Language)实现编译器和解释器 到目前,我们更注重的是语言本身的设计,即前端,没有涉及语言的编译器或解释器的实现,即后端。在这一节,我们将关注后端的实现,由抽象语法树(Abstract Syntax Tree,AST)定义的一种简单的算术语言。第一小节所展示的抽象语法树是基于联合类型的。在下一章“解析文本”,我们还要回到这个示例,来构建这种语言的翻译 2014-06-04 09:37:46 · 984 阅读 · 0 评论 -
基于引用的元编程(Metaprogramming with Quotations)
基于引用的元编程(Metaprogramming with Quotations) 在第六章,我们使用过引用(quotations),它们是被引用的 F# 代码段,引用运算符指示编译器生成表示代码的数据结构,而不是表示代码的中间语言(IL)。即,生成了表示代码的数据结构,而不是可执行代码,这样,就可以很方便地用它做你想做的事情。可以解释,执行一些动作,也可以编译成另一种语言,或者,干脆忽略翻译 2014-06-03 14:59:50 · 1740 阅读 · 0 评论 -
汉字读半边,怎么会错上天?
汉字读半边,怎么会错上天?俗话说,汉字读半边,不会错上天。下面是叶先生的词:浣溪沙 为南开马蹄湖荷作叶嘉莹又到长空过雁时,云天字字写相思。荷花凋尽我未迟,莲实有心应不死。人生易老梦偏痴,千秋犹待发华滋。叶先生是词学大家,不过也有网友说没看出写湖。当然,我不说词,只想说说“浣”的读音。“浣”,原创 2014-05-09 23:09:40 · 7625 阅读 · 0 评论 -
FParsec 库
FParsec 库 FParsec 是一个开源的组合库,用于解析文本。可以从 http://www.quanttec.com/fparsec/ 下载,由 StephanTolksdorf 实现,是基于流行的Haskell 解析库 Parsec,http://www.haskell.org/haskellwiki/Parsec。这 是一个组合库的示例,其思想与我们在前一章所讨论的相似,解翻译 2014-06-18 11:33:18 · 1219 阅读 · 0 评论