ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:17.04KB ,
资源ID:7606191      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7606191.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(编译原理词法分析实验报告.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

编译原理词法分析实验报告.docx

1、编译原理词法分析实验报告编译原理词法分析实验报告一 实验题目:设计基于 C 语言词法分析器 二 实验目的:通过设计编制调试 C 语言的词法分析程序,加深对词法分析原理的理解。并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。编制一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本字、标识符、常数、运算符、分隔符五大类。并依次输出各个单词的内部编码及单词符号自身值。三 词法分析器的算法分析:(可用 N-S 图或流程图)四 程序代码 程序开始运行 读取文件中的程序且分析读到的字符 是字母 识别保留字和标识符 是 是数字 识别整数 是 否 否 是否是下划线

2、 否 是 识别其他的符号 识别注释的内容 输出程序的数字和标识符 程序结束!#includeusing namespace std; string keywords20 = “include”,“void”,“main”,“int”,“char”,“float”,“double”,“if”,“else”,“then”,“break”,“continue”,“for”,“do”,“while”,“printf”,“scanf”,“begin”,“end”,“return” ; char rz99999 = “ ”; string id10000; int pp = 0; string nu100

3、00; int qq = 0;int isLetter(char a)/判断是否是字母 if(a=a;a=A;a=0;(a-0)=9) return 1;/_添加了判断是否为数字的函数_/else return 0; int alpha(int st)/识别保留字和标识符,给此函数的的语句加上注释。char wordbuf20 = “ ”;/定义一个字符数组,用来存放需要得判断字符。int n = 0;/指针只向第一位。for (;)wordbufn = rzst;/吧要判断的字符赋值给字符数组。st+;/指针往下一位指。n+;/指针往下一位指。if (isDigit(rzst) = 1) |

4、 (isLetter(rzst) = 1) | (rzst = _)/判断是否符合首字母为字母,数字或下划线。wordbufn = rzst;/符合就赋值,继续匹配。elsebreak;/不符合就跳出函数。int flag = 0;for (int k = 0; k 20; k+)/判断上步所匹配的字符串是否为关键字。是的话则将 flag 置 1,否则继续匹配if (strcmp(keywordsk.c_str,wordbuf) = 0) /判断字符串是否相等。flag = 1;/相等将 flag 赋值为 1。if (flag = 0)int flagg = -1;for (int t = 0

5、; t pp; t+)/判断是否重复出现过,并且标记 flag。if (strcmp(idt.c_str, wordbuf) = 0)/判断字符串是否相等。flagg = t; if (flagg != -1)/如果不存在直接输出。printf(“ (id,%d) ”, flagg);elseidpp = wordbuf;/若存在输出原编号printf(“ (id,%d) ”, pp);pp+;/下表加一。Else/输出匹配到的关键字。printf(“ (”);for (int i = 0; i n; i+)printf(“%c”, wordbufi);printf(“,-) ”);retur

6、n st;/返回下标 int number(int st)/识别整数 char numbuf20 = “ ”;/定义一个数组存数字int n = 0;int k = 0;int flag = 0;for (;)numbufn = rzst;st+;n+;if (isDigit(rzst) = 1)/如果是数字存入数组numbufn = rzst;else if (k = 0) ; (rzst = .)/否则numbufn = rzst;k+;else if (isLetter(rzst) = 1) numbufn = rzst;flag = 1;continue;elsebreak;if (f

7、lag = 0)int flagg = -1;for (int t = 0; t qq; t+)if (strcmp(nut.c_str, numbuf) = 0)flagg = t;if (flagg != -1)printf(“ (nu,%d) ”, flagg);elsenuqq = numbuf;printf(“ (nu,%d) ”, qq);qq+; else printf(“ (”);for (int i = 0; i n; i+)printf(“%c”, numbufi);printf(“,error digital!) ”);return st; int anotation(i

8、nt st)/处理除号/和注释,给此函数的语句加上注释char tabuf9999 = “ ”;/定义字符数组,用来存放需要判断的字符。int n = 0;/指针指向第一位st+;/指针指向第一位if (rzst = /)/形成单行注释printf(“(/,-)”);/将其输出st+;/指针指向下一位while (rzst != 10)/当遇到换行符时跳出,否则持续赋值注释内容 tabufn = rzst; /赋值st+;/指针指向下一位n+;/指针指向下一位printf(“ n 注释”);for (int i = 0; i n; i+)/输出注释的信息printf(“%c”, tabufi)

9、;else if (rzst = _)/形成多行注释printf(“(/_,-)”);st+;/指针指向下一位int stt = st + 1;while (1)if (rzst = _ ; rzst + 1 = /)/遇到_/跳出循环break;tabufn = rzst;/赋值st+;/指针指向下一位n+;/指针指向下一位 if (rzst + 1 = 0)/空格就报错!printf(“(/_error!n)”);return st + 1;/返回printf(“ n 注释”);for (int i = 0; i :st+;if (rzst = =)st+;printf(“ (rlop,=

10、)”);else printf(“ (rlop,)”);break;case:st+;if (rzst = =)st+; printf(“ (rlop,=)”);elseprintf(“ (rlop,)”);break;case%:st+;if (rzst = =)st+;printf(“(%=,-) ”);elseprintf(“(%,-)”);break;case!:st+;if (rzst = =)st+;printf(“(!=,-)”); elseprintf(“(!,wrong thing!)”);break;case;:st+;if (rzst = ;)st+;printf(“ (

11、;,-)”);else printf(“ (;,worng word!)”);break;case|:st+;if (rzst = |)st+;printf(“(|,-)”);elseprintf(“( |,worng word ! )”);break; case:st+;printf(“(,-)”);break;case:st+;printf(“(,-)”);break;case(:st+;printf(“(,-)”);break;case):st+;printf(“,-)”);break;case:st+;printf(“(,-)”);break;case:st+; printf(“(,-

12、)”);break;case:st+;printf(“(:,-)”);break;case#:st+;printf(“(#,-)”);break;case;:st+;printf(“(;,-)”);break;case.:st+;printf(“(.,-)”);break;case,:st+;printf(“(,-)”);break;case : st+;break;case :st+;break;case 10:st+;printf(“n”);break;case34:st+;printf(“ (”,-)“);break;case39:st+;printf(”(,-)“);break;def

13、ault:printf(”(%c,worngthing) “, rzst);st+;return st; int choice(int st)/根据读入的单词的第一个字符确定调用不同的单词识别函数 if (isLetter(rzst) = 1)st = alpha(st);else if (isDigit(rzst) = 1)st=number(st); /_调用函数_/else if (rzst = /)st=anotation(st);/_调用函数_/elsest=other(st);/_调用函数_/return st; int main int i = 0;FILE_fp;char na

14、me10;printf(”请输入文件名:n“);scanf(”%s“, ;name);if (fp = fopen(name, ”r“) = NULL) printf(”Open error!“);e_it(0);char ch = fgetc(fp);while (ch != EOF)rzi = ch;i+;ch = fgetc(fp);fclose(fp);int j = 0;while (rzj != 0)j = choice(j);cout endl ”程序中标示符如下 “ endl;for (i = 0; i pp; i+)cout i ”“ idi endl;cout ” 程序中数字如下“ endl;for (j = 0; j qq; j+)cout j ”“ nuj endl;system(”pause;); 五 运行结果及分析六 实验心得

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1