S语言词法分析程序.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
S语言词法分析程序

编译原理课程设计 ——S语言词法分析 班别:计算机023班 姓名:范绍森 学号:17号 一、设计任务 本实验的任务是编写一个S语言的词法分析程序,它从左至右逐个字符地对S语言源程序进行扫描,产生一个个的单词符号的机内表示。 在此,将词法分析作为单独的一遍,如下图所示: 具体任务有: 组织源程序的输入。 拼出单词并转换成机内表示形式,形成token文件(单词序列)、符号表文件。 删除注释、空格和无用符号。 发现并定位词法错误。 列表打印错误信息。 二、设计要求 1、能对任何S语言源程序进行分析 为此,在运行词法分析程序时,应用问答方式输入要被扫描的S语言源程序的文件名,然后对该源程序完成词法分析任务。 2、能检查并处理某些词法错误 词法分析程序应给出处理以下三种词法错误(编号分别为1、2、3),其他错误可不必考虑(即认为不会出现): (1)非法字符。处理方式是删去该字符(即不写入token文件)。 (2)不正确的单词,包括以下三种情况: 数字开头的数字、字母串,如3a56。 实数中出现二个小数点,如3.14.15。 实数的小数部分出现字母,如5.26B78。 以上三种情况处理方法是:截去后面出错部分,使其成为一个正确单词(即常数)。如:3a56转换成3,3.14.15转换成3.14,5.26B78转换成5.26。 (3)源程序文件已结束而注释未结束(即程序最后的注释没有结束符*/)。 三、程序数据结构 1、输入 S语言源程序,为文本文件。 2、输出 词法分析程序的运行结果是:产生一个单词序列文件(即token文件)和一个符号表文件,并输出错误信息。 (1)token文件结构 token文件用于存放从S语言源程序中扫描出来的一个个单词符号的机内表示,其文件结构如下: typedef struct token {int label; char name[30]; int code; int addr; }token; 说明: label:单词序号; name[30]:单词本身; code:单词的机内码。 addr:地址,单词为保留字时值为—1,为标识符或常数时为大于0的数值,即该标识符或常数在符号表中的入口地址。 (2)符号表文件结构 符号表用于存放S语言源程序中出现的标识符、实常数、整常数,其文件的结构如下: typedef struct symble { int number; int type; char name[30]; }symble; 说明: number:序号; type:类型; name[30]:名字。 四、程序参考结构及模块说明 这里给出一个程序结构的参考方案,设计思路如下: 1、Scanner() 功能:完成初始化,并循环调用子模块完成单词的识别。 算法描述: Void Scanner() { 调用Scanner()进行初始化; 读取源程序的第一个字符; while(字符!=EOF) {if (字符= =字母) IsAlpha(); else if (字符= =数字) IsNumber(); else if (字符= =’/’) IsAnotation(); else if (字符= =’’’) IsChar(); else IsOther(); } 打印结束信息; 结束操作; } 2、IsAlpha() 功能:识别保留字和标识符。 算法描述: Void IsAlpha() {1、while(字符为字母或数字或’_’号) { 记录当前字符; 读取下一个字符; } 2、判断所记字符串是否为保留字并置标志符h /*为保留字,则标志符h=1;否则为标识符h=0*/ 3、调OutPut()输出保留字或标识符; } 3、IsNumber() 功能:识别整数和实数。 算法描述: Void IsNumber() {int flag=0; while(字符为数字) {记录当前字符; 读取下一字符; if(字符为’.’号) {记录当前字符 flag=1; 读下一字符; 跳出循环; } } 记单词编码为整数的编码(当前token为整数); if(flag) { if(当前字符为数字) { 记录当前字符; whi

文档评论(0)

shenlan118 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档