抽象语法树(Abstract Syntax Tree)
抽象语法树(AST)表示组成程序的结构,可以让程序员更容易使用,F# 适宜这种开发的一个原因就是它的联合类型。这种类型非常适合表示语言,因为它可以用来表示相关而结构不相同的项目。下面就是抽象语法树的例子:
type Ast =
| Ident of string
| Val of System.Double...
分类:
其他好文 时间:
2014-06-20 11:33:28
阅读次数:
200
为算术语言(Arithmetic-Language)实现编译器和解释器
到目前,我们更注重的是语言本身的设计,即前端,没有涉及语言的编译器或解释器的实现,即后端。在这一节,我们将关注后端的实现,由抽象语法树(Abstract Syntax Tree,AST)定义的一种简单的算术语言。第一小节所展示的抽象语法树是基于联合类型的。
在下一章“解析文本”,我们还要回到这个示例,来构建这种语言的...
分类:
其他好文 时间:
2014-06-20 10:48:39
阅读次数:
203
解释抽象语法树
创建了抽象语法树之后,有两个选择:解释或编译。解释,简单地说,就是遍历树,同时执行操作;编译,就是改变成其他形式,对于机器执行来说可能更简单,通常可能更快。这一小节先讨论如何解释结果,下面一小节再讨论编译的内容,最后,再讨论何时应该用解释,何时应该用编译的问题。
下面的例子是一个很小解释器,解释抽象语法树的主要工作由函数interpret 完成,它遍历树,并同时执行需要的...
分类:
其他好文 时间:
2014-06-20 09:58:50
阅读次数:
240
淘宝数据库OceanBase SQL编译器部分 源码阅读--生成逻辑计划
SQL编译解析三部曲分为:构建语法树,生成逻辑计划,指定物理执行计划。第一步骤,在我的上一篇博客淘宝数据库OceanBase SQL编译器部分
源码阅读--解析SQL语法树里做了介绍,这篇博客主要研究第二步,生成逻辑计划。 ....
分类:
数据库 时间:
2014-06-08 18:45:52
阅读次数:
509
编译抽象语法树
对大多数开发人员来说,编译就意谓着产生本地代码,给人感觉就是一个字,难。但是,并不一定要产生本地代码,对于 DSL,通常产生其他更加通用的编程语言。.NET 框架提供几个把抽象语法树编译成程序的功能。
技术的选择取决于几个因素。例如,如果语言针对的是开发人员,那么,生成文本文件就足够了,内容可以是 F#,也可以是其他语言,或者是编译过的程序集,能在程序中使用;然而,如果针...
分类:
其他好文 时间:
2014-06-08 14:43:58
阅读次数:
213
OceanBase是阿里巴巴集团自主研发的可扩展的关系型数据库,实现了跨行跨表的事务,支持数千亿条记录、数百TB数据上的SQL操作。在阿里巴巴集团下,OceanBase数据库支持了多个重要业务的数据存储,包括收藏夹、直通车报表、天猫评价等。截止到2013年4月份,OceanBase线上业务的数据量已经超过一千亿条。
看起来挺厉害的,今天我们来研究下它的源代码。关于OceanBase的架构...
分类:
数据库 时间:
2014-06-08 08:16:44
阅读次数:
376
语法树的作用 一棵语法树不仅包括了词性(part of speech),
还包括了短语(如名词短语, 动词短语)和结构化的信息(如主语, 谓语和宾语). 这些信息是进行机器翻译所必须的, 例如机器翻译中就需要使用到结构化信息,
来根据不同的语言规定调整主谓宾的顺序.上下文无关语法 上下文无关语法.....
分类:
其他好文 时间:
2014-05-17 20:48:48
阅读次数:
189
首先,如果从AST(抽象语法树)的角度来看,两者的AST是一模一样的,最终结果都是一次函数调用。因此,就解析器产生的结果论而言,两者是没有区别的。其次
,从作用上看,前文已经说了,两者的作用都是创建一个函数并调用之。那么为什么要创建一个函数并立即调用呢,我想大多数是因为javascript的代码默认...
分类:
编程语言 时间:
2014-05-07 10:44:18
阅读次数:
396