下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验 2 词法分析程序的设计一、实验目的掌握计算机语言的词法分析程序的开发法。二、实验容编制一个能够分析三种整数、标识符、主要运算符和主要关键字的词法分析程序。三、实验要求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|
2、1|2|3|4|5|6|7|8|9|a|b|c|d|e|f) *运算符和界符+- */ ><=() ;关键字ifthenelsewhile do2、根据状态图,设计词法分析函数int scan( ) ,完成以下功能:1) 从文本文件中读入测试源代码,根据状态转换图,分析出一个单词,2) 以二元式形式输出单词< 单词种类,单词属性>其中单词种类用整数表示:0:标识符1:十进制整数2:八进制整数3:十六进制整数运算符和界符,关键字采用一字一符,不编码其中单词属性表示如下:标识符,整数由于采用一类一符,属性用单词表示运算符和界符,关键字采用一字一符,属性为空3、编写测试程序,
3、反复调用函数scan( ),输出单词种别和属性。四、实验环境PC 微机DOS 操作系统或Windows 操作系统Turbo C 程序集成环境或Visual C+ 程序集成环境五、实验步骤1、根据正规式,画出状态转换图;一空白字母.字母或数字*1931758非 17 <x4非0709 或 a09 或 af079非09与af10+或一芈*或/或< 或>或=或(或)或;11then else while do122、根据状态图,设计词法分析算法;观察状态图,其中状态2、4、7、10 (右上角打了星号)需要回调一个字符。声明一些变量和函数:ch:字符变量,存放最新读进的源程序字符。s
4、trToken:字符串变量,存放构成单词符号的字符串。GetChar():子函数,将下一输入字符读到ch中,搜索指示器前移一字符位置。GetBC():子函数,检查 ch中的字符是否为空白。若是,则调用 GetChar()直至ch 中进入一个非空白字符。Concat():子函数,将ch中的字符连接到 strToken之后。IsLetter():布尔函数,判断ch中的字符是否为字母。IsDigit():布尔函数,判断ch中的字符是否为数字。Reserve。:整型函数,对 strToken中的字符串查找保留字表,若它是一个保留字则返回它的编码,否则返回0。SearchOp(): 整型函数,对ch查找
5、运算符和界符,若它是一个运算符或界符,则返回它的编码,否则返回0。Retract():子函数,将搜索指示器回调一个字符位置,将ch置为空白字符。ProError():错误处理函数。关键字保存在字符数组中,定义编码为相对数组首地址的位置+ 1。保留子表顺序如下: if ,then ,else,while, do ,则相应编码为:1, 2, 3, 4, 5。运算符和界符保存在字符数组中,编码定义与关键字相同,顺序如下:+,-,*/ , > , < , = , ( , ) ,; ,编码为:110。二元表单词单词种类属性标识符0单词自身十进制整数1单词自身八进制整数2单词自身十六进制整数3
6、单词自身运算符和界符单词自身-关键字单词自身-算法如下:ch= '' ; strToken=""GetBC();if(IsLetter() while(IsLetter() | IsDigit() Concat(); GetChar(); Retract();If(Reserve() printf( "<%s , ->" , strToken);else printf( "<,0,%s >" , strToken);else if( '1' < =ch &&
7、 ch <=' 9' ) while(IsDigit() Concat(); GetChar(); Retract();printf( "<,1,%s >" , strToken );else if(ch=,0,) GetChar();if(ch >='1' && ch <=7 ) while(ch >='0' && ch <='7') Concat(); GetChar(); Retract();printf( "<,2
8、,%s >" , strToken);else if(ch= ' x' ) GetChar();while(IsDigit() | ch>= 'a' && ch<= ' f') Concat(); GetChar(); Retract();printf( "<,3,%s >" , strToken );else Retract();printf( “<1,0>“);else if(SearchOp() printf( "<%c,- >&q
9、uot; , ch);else ProError();3、采用C或C+语言,设计函数scan(),实现该算法;char GetChar( FILE* fp) /读取文件中的一个字符char ch;ch = fgetc( fp); return ch;char GetBC(FILE* fp) /读取文件的字符直至ch不是空白char ch; do ch = GetChar( fp); while (ch = ' ' | ch ='t'| ch ='n');|return ch;void Concat(char ch ,char strToken )
10、 char str2;str0 = ch;str1 = '0' strcat(strToken ,str);将ch中的字符连接到strToken之后专业资料/布尔函数,判断ch中的字符是否为字/布尔函数,判断ch中的字符是否为数字,是int IsLetter(char ch) 母,是返回1,否则返回0int flag = 0;if (ch >= 'a' && ch <= 'z') flag = 1;return flag; int IsDigit( char ch) 返回1,否则返回0int flag = 0;if (
11、ch >= '0' && ch <= '9') flag = 1;return flag;int Reserve(char strToken 口)/整型函数,对strToken中的字符串查找保留字表,若它是个保留字则返回它的编码,否则返回 0int code = 0,i;char keyWord66 = "if", "then", "else", "while", "do" ;for (i = 0; i < 5; i+) if (
12、strcmp( strToken , keyWordi) = 0) code = i + 1;break; return code;int SearchOP(char ch) /整型函数,又tstrToken中的字符串查找运算符和界符,若它是个运算符或界符,则返回它的编码,否则返回0int code = 0, i;char OP11 = '+','-','*','/','<','>','=','(',')','' ;for
13、(i = 0; i < 10; i+) if (ch = OPi) code = i + 1;break; return code;子函数,将搜索指示器回调一个字符位置,将 ch置为/错误处理函数char Retract(FILE* fp,char ch) 空白字符ch =''fseek(fp, -1L, 1);return ch; void ProError( ) printf("输入错误! n");return ;FILE* scan(FILE* fp) char ch;char strToken10;strToken0 = ''0
14、'ch = GetBC( fp);if (feof( fp) return fp;输出单个二元式置strToken为空串/先读取一个非空白的字符/判断文件尾,是则返回调用程序if (IsLetter(ch) /判断标识符while (IsLetter(ch) | IsDigit(ch) Concat(ch, strToken);ch = GetChar( fp);ch = Retract( fp,ch);if (Reserve(strToken) / 判断关键字printf( "<%s,->n" , strToken);elseprintf( "
15、;<0,%s>n" , strToken);elseif (ch >= '1' && ch <= '9') / 判断十进制整数while (IsDigit(ch) Concat(ch, strToken);ch = GetChar( fp);ch = Retract( fp, ch);printf( "<1,%s>n" , strToken);| elseif (ch = '0') |ch = GetChar( fp);if (ch >= '1'
16、; && ch <= '7') / 判断八进制整数while (ch >= '0' && ch <= '7') Concat(ch, strToken);ch = GetChar( fp);ch = Retract( fp, ch);printf( "<2,%s>n" , strToken); |else if (ch = 'x') /判断十六进制整数ch = GetChar( fp);while (IsDigit(ch) | ch >=
17、9;a' && ch <= 'f') Concat(ch, strToken);ch = GetChar( fp);Ich = Retract( fp, ch);printf( "<3,%s>n" , strToken);else /判断十进制的0ch = Retract( fp, ch); printf( "<1,0>n");elseif (SearchOP(ch) /判断运算符和界符printf( "<%c,->n" , ch);else /出错Pr
18、oError(); return fp; 4、编制测试程序(主函数 main ); #include <iostream> using namespace std; #define NULL 0 nt main( ) FILE* fp;if (fp = fopen( "C:UsersAdministratorDesktopCode.txt" , "r") = NULL) /以只读式打开文件,失败则退出第printf( "file can not open!"); exit(0);printf("词法分析结果如下:
19、n");while (!feof(fp) /若不是文件尾则执行循环fp = scan(fp);/输出单词种类、属性的二元式 fclose(fp);/ 关闭文件fp = NULL;避免指向非法存 5、调试程序:读入文本文件,检查输出结果。C心也txt-记事本京玲(F)编辑旧格式。查毒M 烈助(H),Code.txt -记事本文件旧编辐(E)格式堂看 if data+92>0s3f then data=data+01;elsedata=<da-ta-01;if(flag < 0) then d 口data = data + 01,fl ag = flag + 0x89,
20、 while (dat a)|else<data-dat a1一。1;wx2,PUKAEEEEMa5MQPWM<ru 图糜券s帧出葬姻I $<1 L BWI 力 八 eAtf+Jep'sw 八c人 3EPW> 人入 SEPWA八八八I 0 IMxv.PEOlnlEE<3WS top A K uwlfp八/ I二 Az 八1* AErEPAs入ftfDMP,国 人JTyq人A6GO4EL 八1 41 个;六、测试数据输入数据:编辑一个文本文件 program.txt ,在文件中输入如下容:if data+92>0x3f thendata=data+01;elsedata=data-01;正确结果:<if ,-><0 , data><+ ,-><1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年桩基冲孔作业协议版
- 2024年船舶维修合同样本3篇
- 2024年规范化分包工程协议典范版B版
- 2024年旅游产品销售业绩合作框架合同范本大全3篇
- 2024年新型预制件加工与推广应用合作协议3篇
- 机械课程设计压床设计
- 2024年度销售业绩目标管理与考核合同3篇
- 2024年教育装备采购供货协议(新款)3篇
- 2024年度展览会现场管理与展台租赁服务合同3篇
- 2024年数据中心设施维修施工合同范本6篇
- 初++中数学设计学校田径运动会比赛场地+课件++人教版七年级数学上册
- 2024年秋八年级英语上册 Unit 7 Will people have robots教案 (新版)人教新目标版
- 人教版英语八年级上册Unit 6《Im going to study computer science》说课稿
- 2《永遇乐京口北固亭怀古》同步练习(含答案)统编版高中语文必修上册-3
- 微积分试卷及规范标准答案6套
- 蓝色国家科学基金16.9杰青优青人才科学基金答辩模板
- 自来水的供水环保与生态协调
- 羽毛球馆运营管理指南
- 销售储备培养方案
- 【电动汽车两挡变速器结构设计10000字(论文)】
- 粮油仓储管理员职业等级考试知识题
评论
0/150
提交评论