欢迎来到课桌文档! | 帮助中心 课桌文档-建筑工程资料库
课桌文档
全部分类
  • 党建之窗>
  • 感悟体会>
  • 百家争鸣>
  • 教育整顿>
  • 文笔提升>
  • 热门分类>
  • 计划总结>
  • 致辞演讲>
  • 在线阅读>
  • ImageVerifierCode 换一换
    首页 课桌文档 > 资源分类 > DOC文档下载  

    编译原理实验-词法分析资料报告器地设计.doc

    • 资源ID:11207       资源大小:82.50KB        全文页数:9页
    • 资源格式: DOC        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    编译原理实验-词法分析资料报告器地设计.doc

    word集美大学计算机工程学院实验报告课程名称:编译原理班级:指导教师:实验项目编号:实验一学号:实验项目名称:词法分析器的设计实验成绩:一、实验目的通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解。并掌握在对程序设计语言源程序进展扫描过程中将其分解为各类单词的词法分析方法。二、实验容编写一个词法分析器,从输入的源程序编写的语言为C语言的一个子集中,识别出各个具有独立意义的单词,即根本保存字、标识符、常数、运算符、分隔符五大类。并依次输出各个单词的部编码与单词符号自身值。遇到错误时可显示“Error,然后跳过错误局部继续显示三、实验要求1、  词法分析器的功能和输出格式词法分析器的功能是输入源程序,输出单词符号。词法分析器的单词符号常常表示成以下的二元式(单词种别码,单词符号的属性值)。单词示例单词种别码要求保存字if、else、int、while、do每个保存字的单词种别都单独为一种标识符以字母开头且包含字母和数字的字符串标识符作为一种常数只识别无符号整数123、343无符号整数作为一种运算符+、-、*、/、=、= = 、!=、> 、<、 >=、 <=每符一种,也可以每一类符号一种分隔符,、;、(、)每符一种2、上述要求仅为根本要求,可以在此根底上扩大,例如删除注释,增加识别单词的类型,将标识符和常量分别插入到相应的符号表中,增加错误处理等。3、编程语言不限。四、实验设计方案1、数据字典本实验用到的数据字典如下表所示:单词示例标识ID保存字void、if、else、for、while、do、return、break、main、int、float、char、double、String1标识符以字母开头且包含字母和数字的字符串2常数只识别无符号整数无符号整数和小数3运算符+、-、*、/、=、> 、<、4分隔符,、;、(、)5本实验所使用的开发语言是C语言,在Test2类中定义了以下几个函数:开始2.程序流程图:读入文件,把内容存入string中,m=0,check=ture,error=falsech是分隔符?check=false?error=ture?check=false?输出str,标识为标示符check=ture输出str,标识为运算符从string中读出一个字符放入ch中完毕ch是最后一个字符? Ych是运算符? N Y Nerror=ture? N输出str,标识为无法识别的串check=ture,error=false Y Y N输出str,标识为无法识别的串check=ture,error=false Y N Y Y 输出str,标识为标示符check=ture输出str,标识为分隔符 N Nch是数字? NCh是字母?check=ture?check=ture? Y Y N N N打印出错清空str,ch加到str中,check=falsech加到str中清空str,ch加到str中,check=false Y Ych加到str中ch是关键字?ch是数字? Y 输出str,标识为关键字,check=true N Y Nch加到str中,error=true3、实验程序#include<stdio.h>#include<string.h>#include<ctype.h>#include<windows.h>/判断读入的字符是否为字母bool isLetter(char c)if(c >= 'a' && c <= 'z') | (c >= 'A' && c <= 'Z')return true;elsereturn false;/判断读入的字符是否为数字bool isDigit(char c)if(c >='0' && c <= '9')return true;elsereturn false;/判断是否为关键字bool isKey(char *string) if(!strcmp(string,"void") | !strcmp(string,"if")| !strcmp(string,"for")| !strcmp(string,"while") | !strcmp(string,"do")| !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;elsereturn 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("文件未找到!");elsewhile(!feof(cfPtr)if(isspace(c=fgetc(cfPtr)/判断是否是字符串;elsestringj=c;/从文件中一一提取字符j+;int m = 0,k=0;/m翻译时用,k是str数组的下标stringj=' 'j+;bool check=true,error=false;/用于判断标识for(int i = 0;i < j;i+)/实现语法翻译器switch (m)case 0:ch = stringi;if(ch = '+' | 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 = 4;else if(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; elsestrk=ch;k+;else if ( isLetter(ch = stringi) )if(check)check=false;memset(str, 0, strlen(str);k=0;strk=ch;k+;elsestrk=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;elsestrk=ch;k+;error=true;elsebreak;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语言进展实验,实验刚开始的时候,能够对输入的字符进展判断,但是却不能排错以与只能识别全是字母的标识符,后来经过修改程序代码和编程的逻辑最终实现了,既能排错又能分析句子;通过实验掌握了词法分析,能实现对普通程序的语法分析翻译。9 / 9

    注意事项

    本文(编译原理实验-词法分析资料报告器地设计.doc)为本站会员(夺命阿水)主动上传,课桌文档仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知课桌文档(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-1

    经营许可证:宁B2-20210002

    宁公网安备 64010402000986号

    课桌文档
    收起
    展开