- 1、本文档共19页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验题目:词法分析设计
我幸苦写的程序,老师竟然认为我可能是抄的。女生就写不出来吗!不能忍啊!既然如此,我就将它放上网吧!(其他两个实验报告,我也会放上网的。请不用客气的下载吧)
Edited by Magic Yang
完成日期:2013-5-22
一、实验目的
通过本实验的编程实践,使学生了解词法分析的任务,掌握词法分析程序设计的原理和构造方法,使学生对编译的基本概念、原理和方法有完整的和清楚的理解,并能正确地、熟练地运用。
二、实验内容
用VC++/VB/JAVA语言实现对C语言子集的源程序进行词法分析。通过输入源程序从左到右对字符串进行扫描和分解,依次输出各个单词的内部编码及单词符号自身值;若遇到错误则显示“Error”,然后跳过错误部分继续显示 ;同时进行标识符登记符号表的管理。
以下是实现词法分析设计的主要工作:
(1)从源程序文件中读入字符。
(2)统计行数和列数用于错误单词的定位。
(3)删除空格类字符,包括回车、制表符空格。
(4)按拼写单词,并用(内码,属性)二元式表示。(属性值——token的机内表示)
(5)如果发现错误则报告出错
(6)根据需要是否填写标识符表供以后各阶段使用。
三、数据结构及生成的算法描述
事先已经构造好的表
k数组------关键字表1,每个数组元素存放一个关键字
s 数组------分界符表 2
m数组------算术运算符表 3
r数组------关系运算符表4
事先定义的表及变量
ci数组------常数表5
id数组------标识符表6
pint------搜索指示器
strtoken------存放构成单词符号的字符串
row------行数
line------列数
ch------存放最新读入源程序字符
instring------存放输入源程序
用到的方法
boolean isdigit(char c)---判断字符c是否是数字
boolean isletter(char c)---判断字符c是否是字母
boolean isline(char c)---判断字符c是否是下划线
boolean remove()---用于在判断关系运算符时,判断是否是要再读一个字符
void getbc()---检查空白直到读入字符非空白
void getchar()---读入下一个字符
void retract()---读入前一个字符
void words()---识别字符串
void num()---识别数字串
void show(int i,String s,char a)---各种输出处理
void change_r_l()---改变行列数
void handle()---输入串处理
int reserve(String s)---判断字符串s是否是保留字
int reseverid(String s)---判断识别的标志符s是否已经在id表中
int reseverci(String s)---判断识别的数字串s是否已经在ci表中
int in_s(char c)---判断字符c是否在分界符表中
int in_m(char c)---判断字符c是否在算术运算符表中
int in_k(char b)---判断字符b是否在关系运算符中
void readstr()---从命令行读入源程序
void readtext()---从文本中读入源程序
算法流程图
生成关键字表k和符号表s,m,r
生成关键字表k和符号表s,m,r
readstr()从命令行读入源程序readtext()从文本中读入源程序
readstr()从命令行读入源程序
readtext()从文本中读入源程序
handle()输入串处理
handle()输入串处理
getchar()得到当前首字符
getchar()得到当前首字符
pint没有越界
pint没有越界
是
是
getbc()---检查空白直到读入字符非空白
getbc()---检查空白直到读入字符非空白
结束
结束
否isletter(ch)
否
isletter(ch)
isdigit(ch)
isdigit(ch)
是是
是
是
words()识别字符串in_s(c)c是否在分界符表中num()识别数字串
words()识别字符串
in_s(c)c是否在分界符表中
num()识别数字串
是
是
否
否
否数字串不空reserve(s)s是否是保留字
否
数字串不空
reserve(s)s是否是保留字
in_m(c)c是否在算术运算符表中
in_m(c)c是否在算术运算符表中
是否
是
否
否是
否
是
是reseverid(s)s是否已经在id表中
是
reseverid(s)s是否已经在id表中
in_k(b)b是否在关系运算符表中resev
文档评论(0)