合肥工业大学编译原理实验 词法分析的设计.doc

合肥工业大学编译原理实验 词法分析的设计.doc

  1. 1、本文档共19页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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)

189****6140 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档