[翻译]脚本引擎实现 - 第四部分 符号表和文法树

news/2024/7/3 4:59:34
原文地址: http://www.flipcode.com/articles/scripting_issue04.shtml
作者:Jan Niestadt
译者:Tony Qu

介绍


既然我们在上两部分中做了一些有益的事,我们就需要把我们从程序的数据结构中收集的数据保存起来,这就是我们接下来要做的事情,其中有两个相当重要的东西:符号表和文法树

符号表,有点像命名建议,它是一张包含了所有我们的程序中需要用到的符号的表,在我们的案例中,也包括所有的字符串变量和常量字符串。如果你有语言包括函数和类,那么它们也将在符号表中出现。

文法树是我们的程序结构的一种树形的表示形式,看看下面的图。在下一部分中,我们将用这个表示形式来生成中间代码,虽然并没有强制规定一定要生成文法树(因为我们已经从解析器那里获得了所有的程序结构信息),我觉得这使得编译器更加透明,这也是我写这篇文章的原因。


这将是第一个拥有“真正”代码的部分,在你看到它之前,我想澄清一点这些代码是为了更好的理解而写的,但可能结构方面不是很好,它将满足我们正在制作的编译器的需要,但真实的编译器远远不止这些。我会在遇到实际问题时,提到一些真实编译器的东西。

在规则间传递信息

很明显,我们不得不向解析器添加功能——当我们找到一个符号时,我们把它添加到符号表中,但是我们也需要“家长”规则来了解符号的描述信息(家长规则是指真正使用唯一标识符的规则)。

当我们构建一棵文法树的时候,一些相似的东西是必须的。我们需要家长规则拥有一个指向孩子规则结点的指针(孩子规则是由家长规则构建而成的)

还记得yylval集吗?Yacc也使用这个集合在规则间传递信息。在yylval集中,每个规则会有一个相关联字段,那是规则的类型。在string.y代码的最上面,你可以看到下面的类型声明
% type  < symbol >  identifier string
% type  < tnode >   statement expression




http://www.niftyadmin.cn/n/3656336.html

相关文章

关于VS2005中的Code Snippets Manager的问题及解决

Code Snippets Manager是VS2005专门用来管理代码块智能感知的工具。然而&#xff0c;使用它并没有预想中的那么顺利&#xff0c;特别是在做过多次目录添加和删除之后&#xff0c;可能出现添加在列表中的目录无法在智能感知列表中显示出来的情况&#xff1b;甚至会出现列表当中明…

控制台界面控制(九):读取键盘操作

本文为转载文档&#xff0c;原文链接为&#xff1a;http://blog.csdn.net/bnb45/article/details/8035346 读取键盘操作指的是&#xff0c;当我们输入什么的时候&#xff0c;控制台可以通过函数截获&#xff0c;这时候可以在里面写下要进行的操作。因为键盘的操作是连续的&…

[翻译]脚本引擎实现 - 第三部分 解析器

原文地址&#xff1a;http://www.flipcode.com/articles/scripting_issue03.shtml 作者&#xff1a;Jan Niestadt译者&#xff1a;Tony Qu介绍第二部分的程序运行得很好&#xff0c;它把程序转换为符号(token)&#xff0c;所有的关键字、操作符、标点符号、标识符和常数都马上被…

控制台界面控制(十):读取鼠标操作

本文为转载文档&#xff0c;原文链接&#xff1a;http://blog.csdn.net/bnb45/article/details/8042819 我在看到这一章之前一直不知道控制台也能通过鼠标来操作。控制台的鼠标操作需要得到鼠标位置信息&#xff0c;左右键信息&#xff0c;单双击等等。 效果 当鼠标在控制台范围…

firefox下几个实用的免费开发插件

今天在看Ajax基础教程&#xff0c;看到书中推荐了几个不错的工具WebDeveloper提供了许多开发中十分有用的环境模拟工具&#xff0c;如禁用JavaScript&#xff0c;描出页面中的隐藏表单等&#xff0c;对于web脚本开发人员特别有用&#xff0c;而且它是firefox插件下载地址&#…

键盘按键数字对照表

本文为转载文档&#xff0c;原文地址&#xff1a;http://blog.csdn.net/bnb45/article/details/8035291 扫描码和虚拟码有对应的关系&#xff0c;但它们是不同的。键盘扫描码和具体的硬件有关&#xff0c;不同的厂商对同一个按键的扫描码可能不同。计算机先获得扫描码&#xff…

关于asp.net Session丢失问题的总结

更完整的关于asp.net session 丢失问题的帖子请见下文&#xff1a;理解Session State模式ASP.NET SESSION丢失FAQ [翻译] asp中Session的工作原理&#xff1a;asp的Session是具有进程依赖性的。ASP Session状态存于IIS的进程中&#xff0c;也就是inetinfo.exe这个程序。所以当i…

从MSN Messenger看软件行为

软件行为从一定意义上讲&#xff0c;就是为了保证软件的可用性和用户界面友好&#xff0c;这段时间在使用msn时发现了一些很有意思的小细节&#xff0c;拿出来和大家探讨一下。当然可能有些朋友会认为这些软件行为是应该的&#xff0c;其实软件行为的意义并不在于行为本身&…