实验1-词法分析_第1页
实验1-词法分析_第2页
实验1-词法分析_第3页
实验1-词法分析_第4页
实验1-词法分析_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

河南工业大学实验报告课程名称编写原则_实验项目实验-词汇分析信息科学与工程系F1402班我姓苏,我在学第一名。讲师侯2017.4.20方慧节更正日期和成就一.实验的目的1.对有限自动机及其应用的透彻理解2.掌握构造有限自动机的方法,根据语言的词汇规则识别单词。3.基本掌握词汇分析程序开发。二。实验内容和要求(问题1)编写一个单词阅读程序,从输入源程序中识别出每个具有独立含义的单词,即五类基本保留单词、标识符、常量、运算符和分隔符。依次输出每个单词的内部代码和单词符号的自身值。(遇到错误时,您可以显示“错误”,然后跳过错误部分继续显示)(有关详细信息,请参考实验指南中的要求)(问题2)根据能够识别一种语言中所有类型的单词的DFA,识别的单词类型可以包括:标识符、数字串、单分隔符、双分隔符等。自动单词识别机根据组合规则,按照类为程序语言的词构造相应的状态转换图将各种单词的状态转换图组合起来,形成一个可以识别语言中所有单词的状态转换图。合并步骤如下:(1)将各个单词的状态转换图的初始状态合并成唯一的初始状态;(2)简化和调整冲突,并将冲突重新编号;(3)如有必要,增加错误状态。用数据中心方法实现有限自动机并生成词法分析程序。注意:状态转换表方法也称为数据中心方法。它将状态转换图视为一种数据结构(状态转换表),在该结构上,字符由控制程序控制以完成词法分析。使用转换表的优点是程序很短,但是占用更多的存储空间。直接转换法的优点和缺点正好相反。(问题3)根据能够识别某种语言中的各种单词的给定DFA:根据能够识别某种语言中的各种单词的给定DFA:所识别的单词类型可以包括:标识符、数字串、单分隔符、双分隔符等。自动单词识别机根据组合规则,按照类为程序语言的词构造相应的状态转换图将各种单词的状态转换图组合起来,形成一个可以识别语言中所有单词的状态转换图。合并步骤如下:(1)将各个单词的状态转换图的初始状态合并成唯一的初始状态;(2)简化和调整冲突,并将冲突重新编号;(3)如有必要,增加错误状态。用直接引导法实现有限自动机并生成词法分析程序注:直接车削法也称为程序中心法。它将状态转移图视为流程图,从状态转移图的初始状态开始,为每个状态节点编译相应的程序。(问题4)编译一个词法分析器,可以分析三个整数,标识符和主要关键字。实验要求1根据下面的形式公式,编写形式语法并画出状态图。标识符字母(字母|数字字符)*十进制整数0 |(1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9)(0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9)*八进制整数0(1 | 2 | 3 | 4 | 5 | 6 | 7)(0 | 1 | 2 | 3 | 4 | 5 | 6 | 7)*十六进制整数0x(0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | a | b | c | d | e | f)(0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | a | b | c | d | e | f)*关键字,如果有的话根据状态图,词法分析函数int scan()旨在完成以下功能:1)从键盘读入数据并分析一个单词。2)返回单词类型(用整数表示),3)返回单词属性(不同的属性可以放在不同的全局变量中)。3编写一个测试程序,反复调用函数scan(),并输出单词类型和属性。三。实验过程3.1词法分析器功能和输出格式词法分析器的功能是输入源程序和输出单词符号。词汇分析器的单词符号通常以下列二进制形式表示(单词类型代码、单词符号的属性值)。在这个实验中,使用了一种符号和一种代码。如果源程序是C语言。输入以下段落:main()int a,b,c=2;a=10b=a20;c=a b/c。#3.2个单词的贝叶斯网络表示标识符-字母数字字符串字母数字字符串-字母数字字符串|数字字母数字字符串|字母数字字符串下划线| 无符号整数-数字字符串数字字符串-数字字符串| 加法运算符-减法运算符-大于关系运算符-大于或等于关系运算符-=由此,我们可以看出词语需要分为五类:关键词1标识符2常数3操作员4分离器5打印函数a0,主要的b1_;intc2*(如果学生3/)然后总额4=其他k5返回m6。7=8=9!=3.3“高级搜索”方法在词法分析中,经常使用高级搜索方法。如果要分析的当前字符串是“a”并且当前字符是“”,分析器是否将其作为大于或等于关系运算符进行分析?显然,只有知道下一个角色是什么才能得出结论。然后解析器读入下一个字符“”,这意味着“应该被解释为大于运算符”。但是此时,我提前读取了一个字符,所以我必须返回一个字符,词法分析器才能正常运行。在分析标识符、无符号整数等时,也存在类似的情况。3.4部分功能描述1.int lookup(char *TOKEN)关键字匹配函数,用于查询程序中的关键字2.void (intc,char * token)输出函数3.void scanner(FILE *fp)扫描程序中的字符串,调用查找函数检查它是否是关键字,然后调用函数输出二进制组4 . f SEK(FP,-1,1)回滚一个字符5.zimu(ch)字母判断函数,如果ch引用字母,则返回非0,否则返回06.shuzi(ch)数字判断函数,如果ch引用一个数字,则返回非0,否则返回07.fgetc(fp)数据流中的下一个字符8 .打开文件打开函数,返回指向文件第一个字符的指针3.5源代码如下:#包括#包括#包括#包括/定义关键字char *table7=continue , main , int , if , then , else , return,TOKEN20,ch;布尔子木(char ch)/判断它是否是一个字母if(ch=ach=z|ch=Ach=Z)返回真;其他返回false/判断它是否是一个数字bool shuzi(char ch)if(ch=0ch=9)返回真;其他返回falseInt查找(char *TOKEN) /关键字匹配函数,用于查询程序中的关键字int m,I;对于(I=0;i6;(I)if(m=strcmp(TOKEN,表I)=0)返回1;返回0;Void out(int c,char *TOKEN) /输出函数 printf(% d,%s)n ,c,TOKEN);无效扫描仪(FILE *fp) /扫描功能char TOKEN20=0char chint I;ch=fgetc(fp)。/获取字符,指针fp并自动指向下一个字符如果(子木(ch) /判断字符是否为字母,如果ch引用字母,返回非0,否则返回0 TOKEN0=ch;ch=fgetc(fp)。/fgetc(fp)数据流中的下一个字符I=1;While(shuzi(ch)|子木(ch) /判断字符是字母还是数字令牌I=ch;ch=fgetc(fp)。我;f SEK(FP,-1,1);If(lookup(TOKEN) /判断它是关键字还是公共标识符out(1,TOKEN);其他out(2,TOKEN);else if(shuzi(ch)令牌0=ch;ch=fgetc(fp)。/fgetc(fp)数据流中的下一个字符I=1;While(shuzi(ch) /判断字符是字母还是数字令牌I=ch;ch=fgetc(fp)。我;f SEK(FP,-1,1);out(3,TOKEN);/判断运算符和输出否则,如果(ch=) TOKEN0=ch;out(4,TOKEN);否则,如果(ch=-) TOKEN0=ch;out(4,TOKEN);否则如果(ch=*) TOKEN0=ch;out(4,TOKEN);否则如果(ch=/) TOKEN0=ch;out(4,TOKEN);否则,如果(ch=) TOKEN0=ch;out(4,TOKEN);否则,如果(ch=) TOKEN0=ch;out(4,TOKEN);否则,如果(ch=) TOKEN0=ch;out(4,TOKEN);否则,如果(ch=) TOKEN0=ch;out(4,TOKEN);否则,如果(ch=) TOKEN0=ch;out(4,TOKEN);否则如果(ch=!=) TOKEN0=ch;out(4,TOKEN);/判断分隔符和输出否则如果(ch=,) TOKEN0=ch;out(5,TOKEN);否则如果(ch=) TOKEN0=ch;out(5,TOKEN);否则,如果(ch=) TOKEN0=ch;out(5,TOKEN);否则,如果(ch=) TOKEN0=ch;out(5,TOKEN);否则如果(ch=() TOKEN0=ch;out(5,TOKEN);否则如果(ch=) TOKEN0=ch;out(5,TOKEN);main()文件*fp。/读取文件内容,并返回指向文件第一个字符的指针。if(FP=fopen( D: su one . txt , r )=NULL)打开时出错。 n );出口(1);做ch=fgetc(fp)。如果(ch=#) /文件以#结束,作为扫描结束条件休息;如果(ch=) /如果是空格,它会自动跳到下一个字符扫描仪(FP);其他f SEK(FP,-1,1);/如果不是空格,则回滚一个字符并扫描扫描仪(FP);同时(ch!=#);返回0;Txt如下:main()int a,b,c=2;a=10b=a20;c=a b/c。#3.6实验结果如下:四.实验总结(经验)通过这个实验,我意识到在做这个实验之前,我必须仔细复习课本内容和老师的要求,以确定什么和如何实现这个实验。每一步都应该按照流程图仔细完成。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论