C语言词法分析器.doc

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
南华大学计算机科学与技术学院 实验报告 实验目的及要求 目的 通过设计、编制、调试一个具体的词法分析程序,加深对词法分析原理的理解,并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。 要求 根据具体情况,由同学们自己选取C语言的一个适当大小的子集(可取一类典型单词,也可以尽可能使各种类型的单词都兼顾到);在实习前一定要制出相应的表。 实验时间:4-8学时 检查内容及时间:A)完整的实验报告。 B)在机器上调试成功的源程序。 软件、硬件环境 Visual studio 2010 ,Windows 7操作系统 计算机一台 2.实验步骤 分析 对于单词符号我们将其分成四类:保留字K、标识符I、常数C和界符P,每类单词符号均可使用一张表格表示.在词法分析过程中,保留字K和界符P这两个表格的内容是固定不变的(由语言确定),源程序字符串只能从其中选取,而标识符I、常数C这两表是在分析过程中不断形成的.   对于一个具体源程序而言,在扫描字符串时识别出一个单词,若这个单词的类型是K、I、C或P中之一,那么就以单词的二元式形式输出.每次调用词法分析程序,它均能自动继续扫描下去,形成下一个单词,直到整个源程序全部扫描完毕,从而形成相应的单词串.   各类单词的二元式表述均具有相同的结构与长度,形式如下: (单词种别t,单词自身的值i) t是单词种别,而单词种别共分为K、I、C、P四类且每类对应一张表格.因此,t实际上就是一个指向这四类中某一类对应表格的指针.i则为指向该类表格中一个特定项目的指针.   所以整个的词法分析过程就是从源程序中获得一个个的单词符号,将这些符号分别填入四张类表中,并且有一个二元式序列构成一个索引,这个索引为以后的语法分析提供处理上的方便.   为了减少实习量,可以适量地选取K,P中的一个子集来进行.如下表: 表1 保留字K表 内部地址 1 2 3 4 5 6 7 8 9 10 保 留 字 for while DO ELSE  IF STATIC INT SIZEOF BREAK CONTINUE 表2 界符P表 内部地址 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 界 符 + - * / = = != == = ( ) , : ; { } 表3 单词符号的编码 单词符号 类别编码 标识符 1 常数 2 保留字 3 + 4 - 5 * 6 / 7 8 = 9 10 = 11 != 12 == 13 = 14 ( 15 ) 16 , 17 : 18 ; 19 { 20 } 21 保留字表包括10个有代表性的保留字,界符表包括关系运算符,算术运算符,分隔符三种,一对圆括号,加上赋值号,花括号,分号,引号.这两表的内容表明C语言的条件语句,赋值语句,WHILE型循环语句,复合语句,过程及变量说明均可作为源程序例子输入给词法分析程序,标识符表I中的每一项包含一个标识符,常数表C中的每一项包含一个整常数,后两表的内容都是在词法分析过程中产生的.   如何从源程序中识别出一个个的单词符号呢?图1中的流图清晰地反映出这一过程. 图1中,双圆圈的状态表示终态,即能到达终态就代表识别出一个单词符号,而带有*号的终态是指处理时应回退一字符. 算法 词法分析器在扫描过程中,依次从源程序中取出源字符,根据图1的扫描过程状态转换图,当碰到终态时,即双圆圈的状态时就得到一个单词符号,此时可以根据第一个字符判断单词属于K,I,C,P中哪一个类,从而确定单词的“单词种别”和“单词自身的值”。 2 2 字母 非字母与数字 1 字母与数字 0 空白 4 数字 非数字 3 数字 + 6 ; 5 8 : 非= 7 = 9 ( 10 , 11 ) 12 其它 17 14 非= 13 15 16 = 图1 扫描程序的状态转换图 说明:这个图只是大概表达一个词法分析的思路,由于不知道加入,所以并不完全准确。 实验内容 流程图 、程序 其它 其它 界符 数字 字母 出错处理 有 C表有此单词否? 形成一项 无 形成(C,i) 十进制数转化成二进制数 K表有此单词否? 形成(I,i) 形成(K,i) 有 无 查界符表 形成(P,i) 源程序完否? 输出二元式 开始 开始 对源程序扫描 扫描到的单词符号 首字母是什么? 完 未完 图2词法分析算法流图 源程序 #include stdio.h #include string.h #include ctype.h #include stdlib.h #inc

文档评论(0)

a13355589 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档