- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
TINY语言及其编译器实现
1.7 TINY样本语言与编译器
任何一本关于编译结构的书如果不包括编译过程步骤的示例就不能算完整。本书将会多次
用从现有的语言(如C 、C + + 、P a s c a l和A d a )中抽取的实例来讲解。但是仅用这些实例来描述
编译器的各个部分是如何协调一致的却不够。因此,写出一个完整的编译器并对其操作进行注
释仍是很必要的。
描述真实的编译器非常困难。“真正的”编译器——也就是希望在每天编程中用到的——
内容太复杂而且不易在本教材中掌握。另一方面,一种很小的语言(其列表包括 1 0页左右的文
本)的编译也不可能准确地描述出“真正的”编译器所需的所有特征。
为了解决上述问题,人们在(A N S I )C 中为小型语言提供了完整的源代码,一旦能明白这
第 1章 概 论 15
下载
种技术,就能够很容易地理解这种小型语言的编译器了。这种语言称作 T I N Y ,在每一章的示
例中都会用到它,它的编译代码也很快会被提到。完整的编译代码汇集在附录 B 中。
还有一个问题是:选择哪一种机器语言作为 T I N Y编译器的目标语言?为现有的处理器使
用真正的机器代码的复杂性使得这个选择很困难。但是选择特定的处理器也将影响到执行这些
机器生成的目标代码。相反地,可将目标代码简化为一个假定的简单处理器的汇编语言,这个
处理器称为T M机(tiny machine )。在这里只是简单地谈谈,详细内容将放在第8章(代码生成)
中。附录C有C 的T M模拟程序列表。
1.7.1 TINY 语言
T I N Y 的程序结构很简单,它在语法上与A d a 或P a s c a l 的语法相似:仅是一个由分号分隔开
的语句序列。另外,它既无过程也无声明。所有的变量都是整型变量,通过对其赋值可较轻易
地声明变量(类似 F O RT R A N 或B A S I C )。它只有两个控制语句:i f语句和r e p e a t语句,这两个
控制语句本身也可包含语句序列。 I f语句有一个可选的e l s e部分且必须由关键字e n d结束。除此
之外,r e a d语句和w r i t e语句完成输入/输出。在花括号中可以有注释,但注释不能嵌套。
T I N Y 的表达式也局限于布尔表达式和整型算术表达式。布尔表达式由对两个算术表达式
的比较组成,该比较使用与= 比较算符。算术表达式可以包括整型常数、变量、参数以及 4个
整型算符+ 、-、*、/ ,此外还有一般的数学属性。布尔表达式可能只作为测试出现在控制语
句中——而没有布尔型变量、赋值或I / O 。
程序清单 1 - 1是该语言中的一个阶乘函数的简单编程示例。这个例子在整本书中都会用到。
程序清单1-1 一个输出其输入阶乘的T I N Y语言程序
虽然T I N Y缺少真正程序设计语言所需要的许多特征——过程、数组且浮点值是一些较大
的省略——但它足可以用来例证编译器的主要特征了。
1.7.2 TINY编译器
T I N Y编译器包括以下的 C文件,(为了包含而)把它的头文件放在左边,它的代码文件放
在右边:
g l o b a l s . h m a i n . c
u t i l . h u t i l . c
s c a n . h s c a n . c
p a r s e . h p a r s e . c
1 6 编译原理及实践
下载
s y m t a b . h s y m t a b . c
a n a l y z e . h a n a l y z e . c
c o d e . h c o d e . c
c g e n . h c g e n . c
除了将m a i n . c 放在g l o b a l s . h 的前面之外,这些文件的源代码及其行号都按顺序列在附录
B 中了。任何代码文件都包含了g l o b a l s . h 头文件,它包括了数据类型的定义和整个编译器
均使用的全程变量。m a i n . c 文件包括运行编译器的主程序,它还分配和初始
文档评论(0)