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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

编译原理实验词法分析器的设计.docx

1、编译原理实验词法分析器的设计集美大学计算机工程学院实验报告课程名称:编译原理班级:指导教师: : 实验项目编号:实验一学号:实验项目名称:词法分析器的设计实验成绩:一、实验目的 通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解。并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。二、实验内容编写一个词法分析器,从输入的源程序(编写的语言为C语言的一个子集)中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。并依次输出各个单词的内部编码及单词符号自身值。(遇到错误时可显示“Error”,然后跳过错误部分继续显示) 三、实验要

2、求 1、 词法分析器的功能和输出格式词法分析器的功能是输入源程序,输出单词符号。词法分析器的单词符号常常表示成以下的二元式(单词种别码,单词符号的属性值)。单词示例单词种别码要求保留字if、else、int、while、do每个保留字的单词种别都单独为一种标识符以字母开头且包含字母和数字的字符串标识符作为一种常数(只识别无符号整数)123、343无符号整数作为一种运算符+、-、*、/、=、= = 、!=、 、=、 、4分隔符,、;、(、)5本实验所使用的开发语言是C语言,在Test2类中定义了以下几个函数: 2.程序流程图: Y N Y N N Y Y N Y N Y Y N N N Y Y

3、N N N Y Y Y N Y N3、实验程序#include#include#include#include/判断读入的字符是否为字母bool isLetter(char c) if(c = a & c = A & c =0 & c = 9) return true; else return false; /判断是否为关键字bool isKey(char *string) if(!strcmp(string,void) | !strcmp(string,if)| !strcmp(string,for)| !strcmp(string,while) | !strcmp(string,do)|

4、!strcmp(string,return)| !strcmp(string,break) | !strcmp(string,main)| !strcmp(string,int)| !strcmp(string,float)| !strcmp(string,char) | !strcmp(string,double)| !strcmp(string,String) return true; else return false;bool isError(char ch) if(ch = | ch = $ | ch = & | ch = # | ch = | ch = ) return true;

5、 else return false;void main() char string500=;/存放文件中读出来的字符串 char str10=;/存放需要对比的字符串 char ch,c;/ch存放文件中的单个字符(翻译时用),c存放文件中的单个字符(从文件中提取信息时用) char filename20;/文件名 int j=0; printf(请输入文件名进行词法翻译:); scanf(%s,filename); FILE *cfPtr; if(cfPtr=fopen(filename,r)=NULL) printf(文件未找到!); else while(!feof(cfPtr) if

6、(isspace(c=fgetc(cfPtr)/判断是否是字符串 ; else stringj=c;/从文件中一一提取字符 j+; int m = 0,k=0;/m翻译时用,k是str数组的下标 stringj= ; j+; bool check=true,error=false;/用于判断标识 for(int i = 0;i | ch = ) if(error) printf(%s,此字符无法是识别!n,str); error=false; check=true; else if(!check) printf(2,%s)标示符n,str); check=true; m = 4; else i

7、f(ch = , | ch = ; | ch = | ch = | ch = ( | ch = ) if(error) printf(%s此字符无法识别n,str); error=false; check=true; else if(!check) printf(2,%s)标示符n,str); check=true; m = 5; else if ( isDigit(ch =stringi) ) ) if(check) memset(str, 0, strlen(str);/清空 k=0; strk=ch; k+; m = 3; check=false; else strk=ch; k+; e

8、lse if ( isLetter(ch = stringi) ) if(check) check=false; memset(str, 0, strlen(str); k=0; strk=ch; k+; else strk=ch; k+; if(isKey(str) printf(1,%s)关键字n,str); check=true; else if(isError(ch = stringi) if(check) memset(str, 0, strlen(str);/清空 k=0; strk=ch; k+; check=false; error=true; else strk=ch; k+

9、; error=true; else break; case 3: if(isLetter(ch =stringi) printf(程序有错误!n); strk = ch; k+; error=true; m = 0; break; if(isError(ch = stringi) printf(程序有错误!n); strk = ch; k+; error=true; m = 0; break; if (isDigit(ch =stringi ) ) strk = ch; k+; else if(ch=.) strk=ch; k+; else printf( 3,%s) 数字n,str); i -; m = 0; check=true; break; case 4: i-; printf( 4 ,%c) 运算符n,ch); m = 0; break; case 5: i -; printf( 5 ,%c) 分隔符n,ch); m = 0; break; return;五、实验结果 六、实验小结本次实验中,运用C语言进行实验,实验刚开始的时候,能够对输入的字符进行判断,但是却不能排错以及只能识别全是字母的标识符,后来经过修改程序代码和编程的逻辑最终实现了,既能排错又能分析句子;通过实验掌握了词法分析,能实现对普通程序的语法分析翻译。

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

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