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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

西安交大编译原理实验词法分析器文档以及代码最后.docx

1、西安交大编译原理实验词法分析器文档以及代码最后实验一:词法分析器一、 实验目的:1强化对系统软件综合工程实现能力的训练;2加强对词法分析原理、方法和基本实现技术的理解;二、 实验内容:用C语言或者其他的高级语言作为宿主语言完成C1语言的词法分析器的设计和实现。 三、 实验要求:1. 编写C0语言的词法分析器的源程序并调试通过。其中词法分析程序既可以自己手动去完成,也可以利用LEX自动生成。2. 通过测试程序的验收; 3.实验报告按照提供的模板填写:(1)功能描述:该程序具有什么功能?(2)程序结构描述:函数调用格式、参数含义、返回值描述、函数功能;另外可以附加函数之间的调用关系图、程序总体执行

2、流程图。(3)实验总结:你在编程过程中花时多少?多少时间在纸上设计?多少时间上机输入和调试?多少时间在思考问题?遇到了哪些难题?你是怎么克服的?你对你的程序的评价?你的收获有哪些?四、 评判标准: 1. 输出正确的实验结果; 2. 代码清晰,格式良好; 3. 提交报告,报告阐述清楚。五、 程序工作说明:(以C0语言为例)程序的输入文件是任何一个目录下的文件格式的C0语言程序段。程序的输出文件是以xml格式表示的词法分析的结果。该输出将作为下个实验语法分析的输入文件。(注意:也可以自定义格式,但需要在报告中给出格式说明)词法分析结果输出成xml文件格式为程序输入/输出示例:如源程序为如下:1vo

3、id f1(int a,int b) 2 a = 1;3 b = a+b;45void main() 67 int a100;8 int b;9 float c;10 ab=a;11 if(cb)12 f1(a,b);13 14则要求得到如下输出文件: token line=11 type=LT string= 六、 相关知识:词法分析器任务:输入源程序;扫描、分解字符串,识别出一个个单词(定义符、标识符、运算符、界符、常数)。单词符号的表示:1) 需要对单词分类,每一个识别出来的单词都属于不同的类型 public enum TokenType /关键字 IF,ELSE,WHILE,RETUR

4、N,VOID,INT, /运算符 + - * / = = != PLUS,MINUS,STAR,SLASH, LT,LTEQ,GT,GTEQ,EQ,NEQ,ASSIGN, /界符 ; , ( ) /* */ SEMI,COMMA,LPAREN,RPAREN,LSQUAR,RSQUAR,LBRACE,RBRACE, LCOMMENT,RCOMMENT, ID, /标识符 NUMBER, /数字常量 IDletter(letter|didit)* NUMBERdigit digit * lettera|b|z|A|B|Z digit0|9 NONTOKEN,ERROR,ENDFILE / 其它 ;

5、2) 单词符号的数据结构设计public class Token string str; /单词字符串 TokenType ttype; /单词的类型 int line; /所在行号信息 3) 词法分析 状态转换图运行结果:程序代码:#include#include#include#includeusing namespace std;string judge1(char a,int n) string str; str.assign(a,n); if(!pare(if) return IF; else if(!pare(else) return ELSE; else if(!pare(whi

6、le) return WHILE; else if(!pare(return) return RETURN; else if(!pare(void) return VOID; else if(!pare(int) return INT; else if(!pare(float) return FLOAT; else if(!pare(char) return CHAR; return ;string judge2(char a,int n) string str; str.assign(a,n); if(!pare(+) return PLUS; else if(!pare(-) return

7、 MINUS; else if(!pare(*) return STAR; else if(!pare(/) return SLASH; else if(!pare(=) return EQ; else if(!pare() return LT; else if(!pare() return GT; else if(!pare(=) return GTEQ; else if(!pare(!=) return NEQ; else if(!pare(=) return DEQ; else if(!pare() return ASSIGN; else if(!pare(;) return SEMI;

8、 else if(!pare(,) return COMMA; else if(!pare() return LPAREN; else if(!pare() return RPAREN; else if(!pare() return LSQUAR; else if(!pare() return RSQUAR; else if(!pare() return LBRACE; else if(!pare() return RBRACE; else if(!pare(/*) return LCOMMENT; else if(!pare(*/) return RCOMMENT; return ;void

9、 print(char a,int n,int sign,int lin) string TokenType; cout token line=lin type=; if(sign=1) TokenType=judge1(a,n); if(TokenType=) TokenType=ID; coutTokenType string=; for(int i=0;in;i+) coutai; coutendl; else if(sign=2) TokenType=NUMBER; coutTokenType string=; for(int i=0;in;i+) coutai; coutendl;

10、else if(sign=3) TokenType=judge2(a,n); if(TokenType=) system(cls);coutsome sign error occurred! On line:linendl;_exit(0); coutTokenType string=; for(int i=0;in;i+) coutai; coutendl; int main() int lin=0,sign,t=0; char *check,word100; char content100; fstream out; out.open(file1.txt, ios:in); coutendl; cout=a&*check=A&*check=0&*check|*check=a&*check=A&*check=0&*check|*check=a&*check=A&*check=Z) coutvariable error occurred! on line lin=0&*check|*check=a&*check=A&*check=0&*check|*check=0) print(word,t,sign,lin); t=0; sign=0; break; check+; out.close(); coutendl; cin.get(); return 0;

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

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