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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

词法分析文档 1.docx

1、词法分析文档 1词法分析1、程序流程图: 是 是 否 字母 数字 其他 运算符、 符号 界符等符号 否 是 图 3-2 2、设计过程:/*需要的库和全局变量、函数及主程序*/#include /*包含库所用的某些宏和变量*/#include /*包含字符串处理库*/#define _KEY_WORD_END waiting for your expanding /*定义关键字结束标志*/typedef struct /*单词二元组的结构*/ int typenum; char * word;WORD;char input255; /*输入缓冲区*/char token255=; /*单词缓冲区

2、*/int p_input; /*输入缓冲区指针*/int p_token; /*单词缓冲区指针*/char ch; /*当前读入字符*/char * rwtab=begin,if,then,while,do,end,_KEY_WORD_END; /*关键字数组*/*需要用到的自编函数参考实现*/char m_getch() /*从输入缓冲区读取一个字符到ch中*/ ch=inputp_input; p_input=p_input+1; return (ch);void getbc() /*去掉空白符号*/ while(ch= |ch=10) ch=inputp_input; p_input=

3、p_input+1; void concat() /*拼接单词*/ tokenp_token=ch; p_token=p_token+1; tokenp_token=0;int letter() /*判断是否是字母*/ if(ch=a&ch=A&ch=0&ch=9)return 1; else return 0;int reserve() /*检索关键字表格*/ int i=0; while(strcmp(rwtabi,_KEY_WORD_END) if(!strcmp(rwtabi,token) return i+1; i=i+1; return 10;void retract() /*回退

4、一个指针*/ p_input=p_input-1;WORD Tokenize() /*词法扫描程序*/ WORD lexical; lexical.typenum=10; lexical.word=; p_token=0; m_getch(); getbc(); if(letter() while(letter()|digit() concat(); m_getch(); retract(); lexical.typenum=reserve(); lexical.word=token; return lexical; else if(digit() while(digit() concat()

5、; m_getch(); retract(); lexical.typenum=11; lexical.word=token; return lexical; else switch(ch) case+: lexical.typenum=13; lexical.word=+; return lexical; break; case-: lexical.typenum=14; lexical.word=-; return lexical; break; case*: lexical.typenum=15; lexical.word=*; return lexical; break; case/:

6、 lexical.typenum=16; lexical.word=/; return lexical; break; case:m_getch(); if(ch=) lexical.typenum=18; lexical.word=:=; return lexical; retract(); lexical.typenum=17; lexical.word=:; return lexical; break; case:m_getch(); if(ch=) lexical.typenum=22; lexical.word=) lexical.typenum=21; lexical.word=;

7、 return lexical; retract(); lexical.typenum=20; lexical.word=:m_getch(); if(ch=) lexical.typenum=24; lexical.word=; return lexical; retract(); lexical.typenum=23; lexical.word=; return lexical; break; case=: lexical.typenum=25; lexical.word=; return lexical; break; case;: lexical.typenum=26; lexical

8、.word=; return lexical; break; case(: lexical.typenum=27; lexical.word=(; return lexical; break; case): lexical.typenum=28; lexical.word=); return lexical; break; case0:lexical.typenum=1000; lexical.word=OVER; return lexical; break; default: lexical.typenum=-1; lexical.word=ERROR; return lexical; vo

9、id main() /*主函数*/ int over=1; WORD lexical; printf(Enter Your words (end with #):); scanf(%#s,input); /指针回退为0 p_input=0; printf(Your words:n%sn,input); while(over1000&over!=-1) /*对源程序进行分析,直至结束符#*/ lexical=Tokenize(); /*获得一个新单词*/ if(lexical.typenum1000) printf(%d,%s),lexical.typenum,lexical.word); /*打印种别码和单词自身的值*/ over=lexical.typenum; printf(npress # to exit:); /*按#退出*/ scanf(%#s,input);输入为数字时,结果为:输入为字符时,结果为:3、写程序过程中遇到的问题:1,主函数内,在判断万用户输入的字符串后,没有将prog的数组下标p赋值为0,所以程序不是从字符串的最开始执行,所以运行出不正确的结果,后来注意到添加的注释(从头扫描源程序),修改后运行成功。2,刚开始不了解:=、=等符号等如何判断,尝试几次后皆失败,后来又仔细阅读了术中所给的程序才了解了具体过程。

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

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