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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

词法分析器实验报告Word文档格式.docx

1、三、程序设计1.总体模块设计/*用来存储目标文件名*/string file_name;/*提取文本文件中的信息。*/string GetText();/*获得一个单词符号,从位置i开始查找。并且有一个引用参数j,用来返回这个单词最后一个字符在str的位置。string GetWord(string str,int i,int& j);/*这个函数用来除去字符串中连续的空格与换行int DeleteNull(string str,int i);/*判断i当前所指的字符就是否为一个分界符,就是的话返回真,反之假*/bool IsBoundary(string str,int i);/*判断i当前

2、所指的字符就是否为一个运算符,就是的话返回真,反之假*/bool IsOperation(string str,int i);/*此函数将一个pair数组输出到一个文件中*/void OutFile(vectorpair v);/*此函数接受一个字符串数组,对它进行词法分析,返回一个pair型数组*/vector analyst(vector vec);/*此函数判断传递的参数就是否为关键字,就是的话,返回真,反之返回假*/bool IsKey(string str);2.各模块设计(1)、首先根据上面单词符号表及ID与NUM的正规定义式,构造出状态转换图;(2)、定义相关的变量与数据结构。关

3、键字作为特殊标识符处理,把它们预先安排在一张表格中(称为关键字表),当扫描程序识别出标识符时,查关键字表。如能查到匹配的单词,则该单词为关键字,否则为一般标识符。关键字表为一个字符串数组,其描述如下:char KEY_WORDS7=main,int,char,if,else,for,while;用以存放单词符号二元式的数据结构可如下定义:class Word_Analyzerpublic: char ContentMAXLENGTH ; int val ; void print(); ;(3)、按照编译程序一遍扫描的要求,把词法分析器Scaner作为一个独立的子程序来设计,通过对Scaner的

4、反复调用识别出所有的单词符号;(4)、当Scaner识别出一个单词符号时,则将该单词符号的二元式写入到输出文件中。若Scaner无法识别出一个单词符号时,则调用错误处理程序PrintError,显示当前扫描到的字符及其所在行、列位置,并跳过该字符重新开始识别单词符号。四、程序代码#include #include fstream using namespace std; /*用来存储目标文件名*/ string file_name; /*提取文本文件中的信息。 string GetText(); /*获得一个单词符号,从位置i开始查找。 /并且有一个引用参数j,用来返回这个单词最后一个字符在s

5、tr的位置。 string GetWord(string str,int i,int& /*这个函数用来除去字符串中连续的空格与换行 /第一个参数为目标字符串,第二个参数为开始位置 /返回值为连续的空格与换行后的第一个有效字符在字符串的位置*/ int DeleteNull(string str,int i); /*判断i当前所指的字符就是否为一个分界符,就是的话返回真,反之假*/ bool IsBoundary(string str,int i); /*判断i当前所指的字符就是否为一个运算符,就是的话返回真,反之假*/ bool IsOperation(string str,int i);

6、/*此函数将一个pair数组输出到一个文件中*/ void OutFile(vector /*次函数将参数str,digit添加到temp中*/ void add(string str,int digit,vector temp); /*此函数接受一个字符串数组,对它进行词法分析,返回一个pair型数组*/ vector /*此函数判断传递的参数就是否为关键字,就是的话,返回真,反之返回假*/ bool IsKey(string str); int main() cout*n; cout*编译原理课程设计-词法编译器ver 1、0*n coutendl; string com1= string

7、 com2=n string fileline=GetText(); int begin=0,end=0; array; do begin=DeleteNull(fileline,begin); string nowString; nowString=GetWord(fileline,begin,end); if(end=-1) break; if(nowString、compare(com1)&nowString、compare(com2) array、push_back(nowString); begin=end+1; while(true); mid_result; mid_result

8、=analyst(array); OutFile(mid_result);*程序已完成词法分析,分析结果已经存储在文件file_namefile_name1; ifstream infile(file_name1、c_str(),ios:in); if (!infile) cerr无法打开文件!file_name1、c_str() ! exit(-1); char f1000; infile、getline(f,1000,EOF); infile、close(); printf(f); return f; /并且有一个引用参数j,用来返回这个单词最后一个字符在原字符串的位置。 j) strin

9、g no_use() , ;n+=*/- j=str、find_first_of(no_use,i); if(j=-1) return if(i!=j) j-; return str、substr(i,j-i+1); /第一个参数为目标字符串,第二个参数为开始位置 /返回值为连续的空格与换行后的第一个有效字符在字符串的位置*/ int DeleteNull(string str,int i) for(;i+) if(stri!= stri!n) return i; bool IsBoundary(string str,int i) int t; char arr7=,(); for (t=0;t7;t+) if(stri=arrt) return true; return false; bool IsOperation(string str,int i) char arr8=+-*/8; /*此函数将一个个字符串数组输出到一个文件中*/ v)请输入目标文件名(包括路径与后缀名):file_name; ofstream outfile(file_name、c_str(),ios:out);outfile)file_name、c_str() int i; for(i=0;iv、size();

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

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