- 1、本文档共26页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理课设 (中版).doc
编译原理课程设计
简单编译器
学 院(系):电子信息与电气工程学部
学 生 姓 名:李梦珂
学 号:201181216
班 级:电计1101
同 组 人 :宫丽迪 电计1101 201181306
陈笛 电计1101 201181326
大连理工大学
Dalian University of Technology
目 录
1 词法分析 2
1.1 实验目的 2
1.2 实验要求 2
1.2.1待分析的简单的词法 2
1.2.2 各种单词符号对应的种别码: 2
1.2.3 词法分析程序的功能: 3
1.3 词法分析程序的算法思想: 3
1.3.1 主程序示意图: 3
1.3.2 扫描子程序的算法思想: 4
1.3.3 词法分析程序的C语言程序源代码: 6
1.3.4 结果分析: 6
1.3.5 总结: 7
2 语法分析 8
2.1 实验目的 8
2.2实验要求 8
2.2.1 待分析的简单语言的语法 8
2.2.2 实验算法结构 8
语法分析程序的算法思想 8
2.3 结果分析: 13
2.4 总结: 15
3 语义分析程序 16
3.1 实验目的: 16
3.2 实验要求: 16
3.3 算法思想: 16
3.3.1 程序结构图 16
3.3.2 设置语义过程 20
3.3.3 函数lrparser 在原来语法分析的基础上插入相应的语义动作:将输入串翻译成四元式序列。在实验中我们只对表达式、赋值语句进行翻译。 21
3.3.4 简单赋值语句的翻译文法 21
3.4 结果分析 22
3.5 总结: 25
1 词法分析(李梦珂 201181216 负责)
1.1 实验目的
设计、编制并调试一个词法分析程序,加深对词法分析原理的理解。
1.2 实验要求
设计、编制并调试一个词法分析程序,三人一组。
1.2.1待分析的简单的词法
(1)关键字:
int if then else while do read write
所有的关键字都是小写。
(2)运算符和界符
: := = + - ++ -- * / = != = = ; ( ) { } #
(3)其他单词是标识符(ID)和整型常数(SUM),通过以下正规式定义:
ID = letter (letter | digit)*
NUM = digit digit*
空格有空白、制表符和换行符组成。空格一般用来分隔ID、SUM、运算符、界符和关键字,词法分析阶段通常被忽略。
1.2.2 各种单词符号对应的种别码:
表1.1 各种单词符号对应的种别码
单词符号 种别码 单词符号 种别码 int 1 ++ 17 If 2 -- 18 Then 3 := 19 else 4 20 while 5 != 21 do 6 = 22 read 7 23 write 8 = 24 lettet(letter|digit)* 10 == 25 dight dight* 11 ; 26 = 12 ( 27 + 13 ) 28 - 14 \ 30 * 15 ! 31 / 16 : 32 , 33 { 35 } 36
1.2.3 词法分析程序的功能:
输入:所给文法的源程序字符串。
输出:二元组(syn,token或sum)构成的序列。
其中:syn为单词种别码;
token为存放的单词自身字符串;
sum为整型常数。
例如:对源程序输入如下:
{
Int x,y;
X:=2*y;
If(x5)
Then x:=2*x+2/3;
}#
后经词法分析输出如下序列:({ 35} (int 1)(x 10)(, 33)(y 10) (;26)(x 10)……
1.3 词法分析程序的算法思想:
算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。
1.3.1 主程序示意图:
主程序示意图如图1.1所示。其中初始包括以下两个方面:
⑴ 关键字表的初值。
关键字作为特殊标识符处理,把它们预先安排在一张表格中(称为关键字表),当扫描程序识别出标识符时,查关键字表。如能查到匹配的单词,则该单词为关键字,否则为一般标识符。关键字表为一个字符串数组,其描述如下:
Char *rwtab[6]
文档评论(0)