网站大量收购闲置独家精品文档,联系QQ:2885784924

C语言子集编译器的设计和实现.docx

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

系统软件综合训练

C语言子集编译器

雷宇马新娜编

石家庄铁道大学2010年3月

前言

编译原理是计算机科学与技术专业的一门重要的专业必修课程,又是一门对实践性要求较高的课程。为了学好这门课程,必须在掌握理论知识的同时,加强上机实践。本课程设计的目的就是要达到理论与实际应用相结合,使同学们能够根据编译程序的一般原理和基本方法,通过具体语言的编译程序的编写,掌握编译程序的主要实现技术,并养成良好的程序设计技能。

本课程设计涵盖了编译原理课程主要教学内容。不同层次不同需要的学校可根据本专业教学要求选择,也可自行开发实验内容。

本书由雷宇、马新娜等综合编写,并得到众多师生的大力支持,在此一并感谢。由于编者水平所限,时间仓促,错误及欠缺之处恳请批评指正。

编者

石家庄铁道大学计算机系2010.3

1

C语言子集编译器

一、实验目的

通过本次课程设计,要求在词法分析、语法分析和语义分析等方面加深对课程基本内容的理解。同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。

二、实验要求

对一个C语言的子集(即简化后的C语言)编制一个编译程序,编程工具不限(C/VC++/Java/VB/Delphi等)。主要包括以下步骤:

1.词法分析

设计、编制并调试该C语言子集的词法分析程序,要求显示二元组形式的结果。

2.语法分析

编制一个语法分析程序,分析方法不限,实现对词法分析程序所提供的单词序列进行语法检查和结构分析。

3.语义分析

采用语法制导翻译原理,将语法分析所识别的语法成分变换成四元式形式的中间代码序列,要求显示中间代码结果。

三、时间分配

日期安排

实验内容

备注

第1天

明确题目要求、确定实现方法等

第2-4天

完成程序编制

第5天

上机演示,回答教师提问,准备书写实验报告

实验报告包括总体描述、算法思想描述及程序框图、程序运行情况、使用说明,实习体会心得等;最后将以上文字材料及程序装订。

四、成绩评定

2

平时表现:30%上机演示:40%设计报告:30%

五、参考资料

《编译原理(第2版)》

清华大学出版社

张素琴等编著

《编译程序的设计与实现》

高等教育出版社

刘磊等编著

《程序设计语言编译原理(第3版)》

国防工业出版社

陈火旺等编著

《编译原理课程设计》

机械工业出版社

王雷等编著

六、待分析的C语言子集

1.待分析的C语言的子集文法

(1)程序→main()语句块

(2)语句块→{语句串}

(3)语句串→ε|语句;语句串

(4)语句→赋值语句|条件语句|循环语句

(5)赋值语句→ID=表达式

(6)条件语句→if(条件)语句块

(7)循环语句→while(条件)语句块

(8)条件→表达式关系运算符表达式

(9)表达式→项|表达式+项|表达式-项

(10)项→因子|项*因子|项/因子

(11)因子→ID|NUM|(表达式)

(12)关系运算符→|=||=|==|!=

注:该文法省略了变量说明部分,即标志符可以不经定义而直接使用。

2.待分析的C语言的子集词法

a.关键字

mainifwhile注:关键字必须小写

b..运算符和界符

=+-*/====!=;{}()

c.标志符ID和常数NUM

通过以下正规式定义其他标记:

ID→letter(letter|digit)*NUM→digitdigit*

letter→a|…|z|A|…|Zdigit→0|…|9

3

d.空格由空白、制表符和换行符组成

空格一般用来分隔ID、NUM、专用符号和关键字,词法分析阶段常常被忽略。

e.各种单词符号对应的种别码

单词符号

种别码

单词符号

种别码

main

1

)

27

if

2

{

28

while

3

}

29

ID

10

;

30

NUM

20

31

=

21

32

+

22

=

33

-

23

=

34

*

24

!=

35

/

25

==

36

(

26

3.输出的四元式举例对于程序:

main(){

i=2*3+4;

if(i10){j=3;};

while(j0){k=1;};

}

输出的四元式序列如下:

(1)(*,2,3,T1)

(2)(+,T1,4,T2)

(3)(=,T2,,i)

(4)(j,i,10,6)

(5)(j,,,7)

(6)

文档评论(0)

奋斗 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档