版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、现在在学编译原理,做了个简单的词法分析器。可以自定义关键字、界 符以及运算符。效果如下:请输入要解析的文件名template, txt请输入该编程语言的关键字if while else return请输入该编程语言的运算符,格式为符号名称 符号+ jia - jian * cheng / chu = fuzhi = deng请输入该编程语言的界符,格式为符号名称 符号(left ) right $ comma ; fengao dakuohao xiaokuohao 辽azint$标识符main$标识符($界符left)$界 fright$ 界符 dakuohaoint$柿识符a$棕识符;$
2、界符 f engaoint$袜识符b$棕识符;$ 界符 f engaoint$袜识符c$棕识符;$ 界符 f engaoc$袜识符+$运算待jiac$标识符=$运算符fuzhia$标识符;$ 界符 f engaowhile$关讎字、1($界符leftc$袜识符=$运算符fuzhi=$运負持fuzhi1$整型)$界 fright$ 界符 dakuohaoa$棕识符有一点不满意的地方是必须输入两次ctrl+z,原来打算的是按下回车就结束输入的 还有一点想法是不输入这些设置,而是读取一个配置文件,识别关键字, 界符以及运算符 代码如下:#include<iostream>#include
3、<vector>#inelude <map>#include<iterator>#i nclude<sstream>#includcstring>#includefstream> using namespace std;vector <string> keywords;vector <pair<string, string> > symble;vector <pair<string,string> > bound; char ch;int iskeyword(const st
4、ring& s, int& n)if(keywords empty ()for(vector<string>:iterator it = keywordsbegin();it !二 keywords end() ;it+, n+)if(s = *it)return 1;return t;int issymble(const string& s, string& result)for(vector<pair<string, string> >:i terator i t 二symble. begin ();it !二 symbl
5、e. encl() ;it+)if(s = (*it).first)result 二(*it)second; return 0;int isbound(const string& s, string& result)!for(vector<pair<string, string> >:iterator it 二 bound. begin ();it !二 bound.end();it+)if (s = (*it) first)result = (*it)second;return 1;retum 0;void analyse (file *fp)stri
6、ng temp 二string str 二string result 二 ;int id = 0;while(ch = fgetc(fp) != eof) temp =;str = ch;id 二 0;if (ch 二二,| | ch 二二t,| | ch 二二n ch 二二,r ) while (ch 二二i ch 二二t' | | ch 二二n'| ch 二二')ch = fgetc(fp);;fseek(fp,-ll, seek_cur);else if(isalpha(ch)while(i salpha(ch) | | isdigi t (ch)temp 二 t
7、emp + ch;ch 二 fgetc (fp);fscek(fp,-ll, seek_cur);if(iskeyword(temp, id) = 1)endl;cout << temp << t$关键字,"idelsecout << temp << 七$标识符 « endl:else if(isdigit (ch)while(isdigit (ch)temp = temp + ch;ch = fgetc (fp);fscck(fp,-ll, seek_cur);cout << temp << “t$整
8、型 << endl:else if(issymble (str, result)cout << ch << t$ << 运算符"<< result << endl;/*case '+' :cout « ch << “t$add << endl;break;case: cout « ch « t$subtractendl;break;case:cout « ch << t$divide << endl;break
9、;case:cout « ch << t$assign << endl;break;case,(':cout << ch << t$lpar << endl;break;case:cout << ch << t$rpar << endl;break;case:cout << ch « “t$lsb << endl;break;case:cout << ch << “t$rsb << endl:break;case
10、:cout << ch « t$semicolon << endl;break;case:cout << ch << “t$dot << endl:break;case:cout << ch << t$c0mma << endl;break;case,':cout << ch << t$lbrace << endl; break:case:cout ch << “t$rbrace << endl;break;: cout
11、« ch « t$multiplyendl;break;case:cout << ch « t$unknow << endl;*/defaultelse if(isbound(str, result)cout << ch t$ « 界符 << result « endl;el secout << ch << t$未知 « endl;int mainostring line,symbelline, boundline, word, filename, symblen
12、ame, symbleld, boundn ame, boundld;cout请输入要解析的文件名endl:cin > filename;cout « 请输入该编程语言的关键字 endl;whi le(getline(cin, 1 ine)istringstream stream (line);while(stream >> word)keywords. push back(word);cin. clear();cout « 请输入该编程语言的运算符,格式为符号名称 符号 « endl;while(get1ine(cin, symbelline)
13、istringstream stream(symbelline);while(stream >> symblename >> symbleld)symble push back(pair<string, string> (symblename, s ymbleld);cin. clear ();cout请输入该编程语言的界符,格式为符号名称符号 « endl;while(getline(cin, boundline)istringstream stream (boundline);whilc(stream >> boundxamo >> boundtd)bound, push-back(pair<string, str
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 制氧制氮设备商业发展计划书
- 珠宝首饰定制加工合同
- 工业与民用建筑测量
- 2024版网络商城加盟合同
- 2024版室内空气污染治理委托合同
- 江西省吉安市四校2025届高一数学第一学期期末学业水平测试模拟试题含解析
- 举一反三系列高考高中数学同步及复习资料人教A版必修2专题6.15 平面向量及其应用全章综合测试卷(提高篇)(含答案及解析)
- 通史版2025届高考历史一轮复习模块1第7单元第17讲辛亥革命课时跟踪含解析
- 办公家具订货合同协议
- 江苏省无锡市普通高中2025届高二上生物期末调研模拟试题含解析
- 必修二第七章第四节基本营养物质-糖类(说课)
- 基于单片机的智能循迹小车-答辩课件
- 2022年医学专题-咯血讲课幻灯
- 五上数学《钉子板上的多边形》公开课课件
- DB22T 370-2014 建筑逃生缓降器设置技术规范
- 新概念英语入门级AUnit3课件
- 报告厅会议室装饰工程施工方案
- 2023届湖南省长沙市麓山国际实验学校高三上学期入学考试数学试题(解析版)
- 初一年级建队仪式校领导讲话稿
- 六年级上册数学课件-3 树叶中的比丨苏教版 (共17张PPT)
- 生物钟基因图解
评论
0/150
提交评论