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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

编译原理实验词法分析Word文件下载.docx

1、运算符 :+ - * / ( )常数:十进制实数十进制整数十六进制实数十六进制整数八进制实数八进制整数1. 实验目的 实现一个词法分析程序,将输入字符串流分解成单词流供语法分析使用。2. 实验要求 输入算术运算式,输出分解后的单词流,例如: 输入(0124.3+0x35a.4f)*12 输出:运算符 (八进制实数 0124.3运算符 +十六进制实数 0x35a.4f运算符 )运算符 *十进制整数 12注意: 输入可以是键盘输入,也可以是文件输入 如果单词输入错误,必须有提示,例如:输入 12a+45*013468-0x23a3输出 错误数据12a 运算符 + 十进制整数 45 运算符 * 错误

2、数据 0123468 运算符 - 十六进制整数 0x23a3/如(0124.3+0x35a.4f)*12/如a+45*013468-0x23a3 #includestdio.h/#include stdafx.hunion chars /联合,可存储字符串,整型和浮点型 char pro_char15; int pro_number; float real;struct data /将每个单元用一个结构来存储,其内容包括:类型,所属的具体类型,以及属性值 char kind7; int id; union chars pro; ;int scan(char *a); /对每个用空格打断的单元进

3、行进一步的分析,对其进行进一步的分类void Prints(char a15,int id,int a_long); /将分析后的每个token输出void save(char *a,int id,int x); /将分析后的结果保存到一个结构数组中char nowChar15; /临时的存储单元,用来存储被空格打断以后单元char kinds118= ,INT10INT8INT16IDNREAL10REAL8REAL16 /单词的不同种别struct data link100; /用来存放词法分析以后的结果的结构数组int link_long=0; /全局变量 int scan(char *

4、a) /int id; int a_long=0; int doc=0;while(*a!=NULL) nowChar0=0; a_long=0; doc=0; /对数值的判断及处理 if(0=*a&*a case() Prints(nowChar,5,a_long); /将其具体的类型属性定义为 default: break; /判断输入的第一个字符是否为字母if(=nowChar0&nowChar0zZ while(*a!)|(*a=_) /一直将此字符串完全读入 /判断输入的字符串是否为特殊的标识符,若是,则将其具体类型值定义为 /判断输入的字符串是否为特殊的字符串if if(a_lon

5、g=2&strcmp(nowChar,if)=0) Prints(nowChar,6,a_long);/判断输入的字符串是否为特殊的字符串then if(a_long=4&then/判断输入的字符串是否为特殊的字符串else else/判断输入的字符串是否为特殊的字符串while if(a_long=5&while/判断输入的字符串是否为特殊的字符串dodo)=0) Prints(nowChar,6,a_long);/若输入的字符串不符合以上几种情况,则输入的为变量/若输入的字符串为变量,则将其具体属性值定义为Prints(nowChar,4,a_long);/如果输入的既不是数值也不是字符串

6、,则输入错误,将其具体类型之定义为else Prints(nowChar,7,a_long);return 0; return 1;main() char buf100; /用来存储从键盘上输入一串字符 char *tokenPtr; /用来存储用空格打断后的单元 int id=1; /用来存储具体的类型号 link_long=0;while(id) gets(buf); /从键盘上输入一串字符tokenPtr=strtok(buf,); /用空格将字符串打断while(id&*tokenPtr!=NULL) /分割出来的单元不为空 id=scan(tokenPtr); /将此单元进行继续分析

7、,并返回其具体的类型值 tokenPtr=strtok(NULL, /将字符串继续用空格进行分割 printf(nn getchar(); /将所分解后的单元存入结构数组中void save(char *a,int id,int x,float y) int i; if(link_long=5) if(id=8) /id=8,9,10 /若为浮点型的数值,则将浮点型的y值(转换后的)存入其属性当中且存入单词的种别 for(i=0;i9&kindsidi!i+) linklink_long.kindi=kindsidi; linklink_long.pro.real=y; /id=5,6,7 /

8、若为标识符,则将单词种别定为自身,属性值定为空for(i=0;15&ai!linklink_long.kindi=ai;linklink_long.pro.pro_char0=linklink_long.pro.pro_char1=link_long+; /id=1,2,3,4 else8& /若分解后的token为变量或者整型数值,则将其单词种别直接输出 if(id=4) /若token为变量,则将其属性值设为自身 for(i=0; linklink_long.pro.pro_chari=ai; linklink_long.pro.pro_chari= else /若token为整型数值,则

9、将其相应的十进制数值赋给其属性值 linklink_long.pro.pro_number=x; /继续存入下一个token else Full 100n /结构数组已经存满return; /将词法分析器分解后的结果输出出来void Prints(char a15,int id,int a_long) int x=0; float y=0; /int float1; /char *c; if(id=1) /若为十进制整数 for(i=1;a_long&i+) x=x*10+(ai-48); printf(INT10t%sn,a); save(a,id,x,y); /存入结构数组 return;

10、 if(id=2) /若为八进制整数 x=x*8+(ai-48); /换算为十进制数INT8t%dn,x); return; if(id=3) /若为十六进制整数 for(i=2;i+) if(=ai&ai=0&i-) y=(y+(ai-48)/10; y=y+x; /整数部分与小数部分换算后相加REAL10t%fn,y); if(id=9) /若为八进制浮点型 y=(y+(ai-48)/8;REAL8t%fn if(id=10) /若为十六进制浮点型i+) /将整数部分与小数部分分割开,并进行相应的换算 x=x*16+(ai-48); for(i=strlen(a)-1; y=(y+(ai-48)/16; y=y+x; printf(REAL16t%fn save(a,id,x,y);Wrong Enter /所得的具体类型值为,则输入有错误

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

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