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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

编译原理词法分析实验报告含可运行源码文档格式.docx

1、10) isNegative整数,是否为负数幂。isNegative为1,则为负数幂,如123E-2。11) scanner()扫描子程序。12) getchar()从控制台读取一个字符数据。13) double pow(double x,double y),计算x的y次幂。14) int strcmp(char *str1,char #str2),字符串比较。三 流程框图 主程序 扫描子程序四 函数相关说明1. 接收用户输入:getchar()和dowhile循环的组合 do ch=getchar(); progp+=ch; while(ch!=#); /输入以号键结束2. 输出到控制台:d

2、owhile循环中,扫描出单词后(扫描程序还会判断种别码syn)输出。 scanner(); /扫描,单词 switch(syn) case 11: if(isDecimal=0)&(isExp=0) /加了1个强制类型转换 printf(%2d,%8d)n,syn,(int)sum); break; if(isExp=1)(%2d,%g)n,syn,sum); isExp=0; isDecimal=0; else if(isDecimal=1)(%2d,%8.4f)n else break; case -1:printf(UNKNOWN ERRORnbreak; case 90:%8s小数格

3、式不正确n,token); case 91:%s指数格式不正确n case 99:/syn=99时即判断为注释 default:(%2d,%8s)n,syn,token); while(syn!=0);3. 浮点数的识别,先识别数字,再识别 . ,再识别数字,再识别E或e,再识别 - ,再识别数字。else if(ch0)&(ch sum=sum*10+ch-; /ch中数字本身是当做字符存放的 tokenk+=ch; ch=progp+; if(ch=.) isDecimal=1; if(!(chch /pow(x,y)计算x的y次幂 temp=(ch-)*pow(0.1,+count);

4、decimal=decimal+temp; /AddToDec(); tokenk+=ch; ch=progp+; sum=sum+decimal; if(ch=e)|(ch=E)&(syn!=90) isExp=1; if(ch!)tokenk+=ch; if(ch=- isNegative=1; ch=progp+; if(ch!+ isNegative=0;)syn=91; while(ch=91) /指数 index=index*10+ch- /10的幂 /123e3代表123*10(3) /sum=sum*pow(10,index);是错误的 if(syn!=91) if(isNeg

5、ative) sum=sum*pow(0.1,index); else sum=sum*pow(10.0,index); if(syn!=90) if(isSignal=1) sum=-sum; isSignal=0;=91)syn=11;p=p-1; if(progp-1=)p=p-1; 4. 注释的识别与过滤,识别到/符号的时候进行判断,如若紧跟*符号则判断为注释,p指针不断后移知道读取到*/为止case /: if(progp!* syn=25; tokenm+=ch; do p+; while(!(progp=(progp+1=); p=p+2; ch=progp; syn=99; b

6、reak;五 输入与输出词法分析程序需具备词法分析的功能:输入:所给文法的源程序字符串。(字符串以“#”号结束)输出:二元组(syn,token或sum)构成的序列。其中:syn为单词种别码; token为存放的单词自身字符串; sum为整型常数。六 程序运行截图七 词法分析器使用说明用户输入待识别字符串(并以“#”结尾,表示字符串输入结束),回车后程序自动输出词法分析结果。八 心得与体会词法分析的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。通过本试验的完成,更加加深了对词法分析原理的理解。九 源程序清单#

7、includestring.hmath.hiostreamchar prog180; /存放所有输入字符char token20; /存放词组char ch; /单个字符int syn,p,m,n;/syn:种别编码double sum; int count;int isSignal; /是否带正负号(0不带,1负号,2正号)int isDecimal; /是否是小数 double decimal; /小数int isExp=0; /是否是指数int index; /指数幂int isNegative; /是否带负号double temp;int temp2;int k;void scanne

8、r();char *rwtab9=mainintfloatdoublecharelsevoid main() p=0; count=0; isDecimal=0; index=0; printf(n Please input string:n system(pausevoid scanner() sum=0; decimal=0; m=0; for(n=0;naz)|(chAZ) /ch是字母字符 while(ch) tokenm+=ch; /ch=token /读下一个字符 tokenm+=0 p-; /回退一格 syn=10; /标识符 /如果是标识符中的一个 for(n=0;9; if(strcmp(token,rwtabn)=0) syn=n+1; else if(chIsNum: k=0; else switch(ch) case syn=33; syn=32; temp2=progp; if(p=1)&(prog1(prog1(progp-2(temp2 syn=23; else if(temp2 /转到数字的识别 else syn=24; syn=21; syn=31;( syn=26;) syn=27; syn=28; syn=29;, syn=30; syn=38; syn=39; case syn=0; p=p-1; syn=-1;

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2