原文地址:
http://www.flipcode.com/articles/scripting_issue04.shtml 作者:Jan Niestadt
译者:Tony Qu
介绍既然我们在上两部分中做了一些有益的事,我们就需要把我们从程序的数据结构中收集的数据保存起来,这就是我们接下来要做的事情,其中有两个相当重要的东西:符号表和文法树
符号表,有点像命名建议,它是一张包含了所有我们的程序中需要用到的符号的表,在我们的案例中,也包括所有的字符串变量和常量字符串。如果你有语言包括函数和类,那么它们也将在符号表中出现。
文法树是我们的程序结构的一种树形的表示形式,看看下面的图。在下一部分中,我们将用这个表示形式来生成中间代码,虽然并没有强制规定一定要生成文法树(因为我们已经从解析器那里获得了所有的程序结构信息),我觉得这使得编译器更加透明,这也是我写这篇文章的原因。
这将是第一个拥有“真正”代码的部分,在你看到它之前,我想澄清一点这些代码是为了更好的理解而写的,但可能结构方面不是很好,它将满足我们正在制作的编译器的需要,但真实的编译器远远不止这些。我会在遇到实际问题时,提到一些真实编译器的东西。
在规则间传递信息很明显,我们不得不向解析器添加功能——当我们找到一个符号时,我们把它添加到符号表中,但是我们也需要“家长”规则来了解符号的描述信息(家长规则是指真正使用唯一标识符的规则)。
当我们构建一棵文法树的时候,一些相似的东西是必须的。我们需要家长规则拥有一个指向孩子规则结点的指针(孩子规则是由家长规则构建而成的)
还记得yylval集吗?Yacc也使用这个集合在规则间传递信息。在yylval集中,每个规则会有一个相关联字段,那是规则的类型。在string.y代码的最上面,你可以看到下面的类型声明
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->%type<symbol>identifierstring
%type<tnode>statementexpression
分享到:
相关推荐
C#_ReoScript脚本引擎Demo-包源代码. 支持.net各版本带源码
NULL 博文链接:https://andilyliao.iteye.com/blog/722249
ASP脚本错误代码---原因对照表 VBScript
实现一个脚本引擎 实现一个脚本引擎 实现一个脚本引擎
本人用C#实现的脚本引擎 支持基本的条件分支 跳转 循环和数学运算,可以扩展自己的控制函数。 主要用作于游戏脚本。 不了解其中的原理和作用的可以参见本人的本站上的技术博文:开发Window Phone 7下的Galgame(一...
爬虫脚本项目源码-搜索引擎
《实现一个脚本引擎》《实现一个脚本引擎》
Node-Lua是一款基于Lua实现的脚本和服务器引擎,它支持构建海量Lua服务(Context_Lua)并以多线程方式运行在多核服务器上,采用了任务多路复用的设计方案,有效利用了多核优势。node-lua致力于构建一个快速、简单易用...
如果kafka-eagle报异常缺表,请使用该建表脚本,如果kafka-eagle报异常缺表,请使用该建表脚本,如果kafka-eagle报异常缺表,请使用该建表脚本,如果kafka-eagle报异常缺表,请使用该建表脚本,如果kafka-eagle报...
类C/C++脚本引擎_AngelScript_2.17.2,VC6编译通过。可以用Lib方式“无缝”融入自己的C/C++/MFC应用。并且框架对新模块的添加相当方便。
使用Kotlin脚本实现gradle-java项目,gradle可以使用goovy和kotlin两种语言实现,此Demo主要是用kotlin脚本实现的gradle项目管理,熟悉kotlin脚本的编写,实现可编程的脚本控制,内附一简单测试代码。
Python脚本项目源码-翻译软件
shell脚本学习指南-中文版shell脚本学习指南-中文版shell脚本学习指南-中文版shell脚本学习指南-中文版shell脚本学习指南-中文版shell脚本
爬虫脚本项目源码-模拟百度搜索引擎
爬虫脚本项目源码-python实现代码雨效果
脚本跨域完美实现-面向对象编程,仿百度、腾讯api实现
Delphi实现脚本引擎,Delphi写的编译器
奔梦向前:学编程其实很简单,html、css、JavaScript、html5、css3、vue、Canvas实现网页特效页面、新手入门学习、了解网页动画的制作、代码实现网页动态画面-表白代码脚本-2020-04-28-1。
多语言自动翻译脚本,支持多语言,中英文自动翻译脚本 python C:\Users\ganwang\Desktop\打车报销票\translatetools.py 请输入翻译文件地址:C:\Users\ganwang\Desktop\打车报销票\紫金集团DHR项目-多语言翻译_...