- 1、本文档共14页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译课程设计报书 马聪敏
课程设计报告
( 2011 -- 2012年度第 1 学期)
名 称:编译技术课程设计B
题 目:词法分析器设计
算符优先分析程序设计
基于算符优先分析方法的语法制导翻译程序设计
院 系:计算机系一、课程设计《》1所示,单词符号中标识符由一个字母后跟多个字母、数字组成,常数由多个十进制数字组成。单词符号的内部表示,即单词的输出形式为二元式:(种别编码,单词的属性值)。
表1-1 单词符号及其内部表示
单词符号 种别编码 单词的属性值 BEGIN
IF
THEN
ELSE
END
标识符
整型常数
+
*
**
(
) 1
2
3
4
5
6
7
8
9
10
11
12 —
—
—
—
—
在名字表中的地址
十进制整数
—
—
—
—
— 算符优先分析程序设计的目的与要求
2.1 算符优先分析程序设计的目的
本实验是为计算机科学与技术专业的学生在学习《》”结尾),如果输入串是句子则输出“YES”,否则输出“NO”和错误信息。
算符优先分析过程与非终结符号无关,当由文法产生了优先关系之后文法也就失去了作用,本题目给出文法的目的是为了便于对语法分析结果进行验证。
(1)文法 设算符优先文法为:
说明:i为整型常数或者为标识符表示整型变量;使用中↑用**表示。
(2)优先关系表 设优先关系表如表1-2所示。
表1-2 优先关系表
+ * ↑ i ( ) # + * ↑ i ( ) #
基于算符优先分析方法的语法制导翻译程序的设计的目的和要求
3.1 基于算符优先分析方法的语法制导翻译程序的设计的目的
本实验是为计算机科学与技术专业的学生在学习《》”结尾),如果输入符号串是句子,则按照其语义进行翻译,输出等价的四元式序列(作为练习应显示输出)。
二、课程设计正文
词法分析器设计
1.1 设计思想
对输入的字符串逐个分类处理,若所取字符为字母,检验其是关键字或标识符,返回其种别码,标识符还要记录其在名字表中地址并输出;若所取字符为数字,记录其在常数表中的位置,返回种别码及其位置;若所取字符是运算符,返回其相应的种别码。
1.2 使用的相关函数及变量
(1)void scanner() 在这个函数部分进行单词符号的识别,开始进行第一次扫描的时候,对数组token进行初始化,然后ch得到输入的字符串的第一个字符,对ch进行判断。
若ch是字母,则将ch存入token数组,然后指针p和指针m向后移动,ch一直在变化,一直将ch存入token直到ch不是字母或者数字的时候,然后分析token存入的单词,将该单词和关键字进行比较,若是关键字,则输出(关键字在table中的的位置,—),若不是关键字则当做标识符来处理;
若ch是数字,则当做常数处理;
若ch是“=”,“+”,“*”,“**”,“,”,“(”,“)”,则单独处理。
(2)isdigit(ch) 用来判断ch中存放的是否是数字型字符。
(3)isalpha(ch) 用来判断ch中存放的是否是字母型字符。
(4)void main()用来输入要进行识别的语句
(5)token[8]字符数组,存放构成单词符号的字符串。
(6)prog[80]字符数组,存放所有用户输入的字符。
(7)syn整数,存放当前单词的种别码。
(8)sum 存放无符号整数 。
算符优先分析程序设计
2.1设计思想
(1)首先建立char Terminal[7]={+,*,,i,(,),#}用来存放文法的终结符(其中**用来表示),然后根据设计报告中的文法和其对应的预先关系表用char Table[7][7]来表示,其中两个终结符无优先关系的话用’!’表示。
(2)建立符号栈,并首先将’#’号置于栈中;从当前输入符号和栈顶元元素来确定优先关系表的下标值。
(3)根据优先关系表中的优先关系,定义”移进”和”规约”的函数,来进行对输入符号串的处理。最后当输入符号串的字符未’’#”时,表示符号串规约完毕。其中处理到输入的符号串不合法时,立即给以报错处理。
2. 2使用的相关函数及变量
(1)char Terminal[7] 终结符集合;
(2)char Table[7][7] 算符优先关系表;
(3)Is_Vt(char ch) 判断当前输入符号是否为终结符,是返回其所在位置i,否则返回-1;
(4)char cmp_syn(char ch1,char ch2) 获得算符优先
文档评论(0)