[翻译]脚本引擎实现 - 第四部分 符号表和文法树
来源:互联网 发布:js数组排序方法速度 编辑:程序博客网 时间:2024/06/08 07:38
原文地址:http://www.flipcode.com/articles/scripting_issue04.shtml
作者:Jan Niestadt
译者:Tony Qu
介绍
既然我们在上两部分中做了一些有益的事,我们就需要把我们从程序的数据结构中收集的数据保存起来,这就是我们接下来要做的事情,其中有两个相当重要的东西:符号表和文法树
符号表,有点像命名建议,它是一张包含了所有我们的程序中需要用到的符号的表,在我们的案例中,也包括所有的字符串变量和常量字符串。如果你有语言包括函数和类,那么它们也将在符号表中出现。
文法树是我们的程序结构的一种树形的表示形式,看看下面的图。在下一部分中,我们将用这个表示形式来生成中间代码,虽然并没有强制规定一定要生成文法树(因为我们已经从解析器那里获得了所有的程序结构信息),我觉得这使得编译器更加透明,这也是我写这篇文章的原因。
这将是第一个拥有“真正”代码的部分,在你看到它之前,我想澄清一点这些代码是为了更好的理解而写的,但可能结构方面不是很好,它将满足我们正在制作的编译器的需要,但真实的编译器远远不止这些。我会在遇到实际问题时,提到一些真实编译器的东西。
在规则间传递信息
很明显,我们不得不向解析器添加功能——当我们找到一个符号时,我们把它添加到符号表中,但是我们也需要“家长”规则来了解符号的描述信息(家长规则是指真正使用唯一标识符的规则)。
当我们构建一棵文法树的时候,一些相似的东西是必须的。我们需要家长规则拥有一个指向孩子规则结点的指针(孩子规则是由家长规则构建而成的)
还记得yylval集吗?Yacc也使用这个集合在规则间传递信息。在yylval集中,每个规则会有一个相关联字段,那是规则的类型。在string.y代码的最上面,你可以看到下面的类型声明
作者:Jan Niestadt
译者:Tony Qu
介绍
既然我们在上两部分中做了一些有益的事,我们就需要把我们从程序的数据结构中收集的数据保存起来,这就是我们接下来要做的事情,其中有两个相当重要的东西:符号表和文法树
符号表,有点像命名建议,它是一张包含了所有我们的程序中需要用到的符号的表,在我们的案例中,也包括所有的字符串变量和常量字符串。如果你有语言包括函数和类,那么它们也将在符号表中出现。
文法树是我们的程序结构的一种树形的表示形式,看看下面的图。在下一部分中,我们将用这个表示形式来生成中间代码,虽然并没有强制规定一定要生成文法树(因为我们已经从解析器那里获得了所有的程序结构信息),我觉得这使得编译器更加透明,这也是我写这篇文章的原因。
这将是第一个拥有“真正”代码的部分,在你看到它之前,我想澄清一点这些代码是为了更好的理解而写的,但可能结构方面不是很好,它将满足我们正在制作的编译器的需要,但真实的编译器远远不止这些。我会在遇到实际问题时,提到一些真实编译器的东西。
在规则间传递信息
很明显,我们不得不向解析器添加功能——当我们找到一个符号时,我们把它添加到符号表中,但是我们也需要“家长”规则来了解符号的描述信息(家长规则是指真正使用唯一标识符的规则)。
当我们构建一棵文法树的时候,一些相似的东西是必须的。我们需要家长规则拥有一个指向孩子规则结点的指针(孩子规则是由家长规则构建而成的)
还记得yylval集吗?Yacc也使用这个集合在规则间传递信息。在yylval集中,每个规则会有一个相关联字段,那是规则的类型。在string.y代码的最上面,你可以看到下面的类型声明
%type <symbol> identifier string
%type <tnode> statement expression
%type <tnode> statement expression
- [翻译]脚本引擎实现 - 第四部分 符号表和文法树
- [翻译]脚本引擎实现 - 第四部分 符号表和文法树
- [翻译]脚本引擎实现 - 第四部分 符号表和文法树
- [翻译]脚本引擎实现 - 第一部分 总揽
- [翻译]脚本引擎实现 - 第一部分 总揽
- [翻译]脚本引擎实现 - 第一部分 总揽
- [翻译]脚本引擎实现 - 第三部分 解析器
- [翻译]脚本引擎实现 - 第三部分 解析器
- [翻译]脚本引擎实现 - 第三部分 解析器
- [翻译计划]脚本引擎实现
- [翻译计划]脚本引擎实现
- [翻译计划]脚本引擎实现
- 脚本引擎实现 - 第一部分 总揽 [中文翻译]
- WMI 脚本入门:第四部分
- kinect脚本部分翻译/注释
- 第四部分:IDropSource实现
- Prism文档翻译(第一章 第四部分)
- 实现一个脚本引擎
- 招聘乐事
- Calculator.NET 2.3发布
- Javascript:检测FlashPlayer版本的函数
- 关于VS2005中的Code Snippets Manager的问题及解决
- aspnetdb.mdf数据字典
- [翻译]脚本引擎实现 - 第四部分 符号表和文法树
- [winform入门级好书]c# Windows Forms程序设计
- 关于asp.net Session丢失问题的总结
- firefox下几个实用的免费开发插件
- [翻译]脚本引擎实现 - 第三部分 解析器
- 随想——程序员与测试员
- 从MSN Messenger看软件行为
- [翻译]脚本引擎实现 - 第一部分 总揽
- [翻译计划]脚本引擎实现
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
夏都西宁吧
夏都西宁
夏都
夏都故事
二里头夏都博物馆
二里头夏都遗址博物馆
夏门小鱼网
夏门小鱼冈
夏门找工作
夏门有那些景点
汉末卫公子 夏门
夏门在哪个省
夏门是哪个省
夏门旅游景点
厦门哪好玩
厦门同城网
厦门民宿排行
厦门特色民宿推荐
福建夏门
厦门简称
厦门有多少人口
厦门房子网
厦门民宿价格
厦门房
厦门中山路步行街民宿
厦门旅游景点介绍
厦门国际旅行社
厦门旅游公司
青岛交友
西安交友
厦门相亲活动
厦门岛外
夏阳
夏阳图片
夏阳县
超级小农民夏阳
夏阳街道
夏雨
春风夏雨
夏雨荷
夏雨雨人