版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、大连理工大学软件学院编译技术课程一一词法分析上机实验注意:需要建立test文档,文档内为输入实验目的:对循环语句和条件判断语句编写词法分析编译程序,只能通过一遍扫描完成。(用c+实现)实验要求:关键字:for if then else while do所有关键字都是小写。(2)运算符和分隔符::=+-*/<><=<>>=;( )#其他标识符(id)和整型常数(num),通过以下正规式定义:id=letter(letter | digit)*num=digit digit*(4)空格由空白、制表符和换行符组成。空格一般用来分隔id、num、运算符、分隔符和关键
2、字,词法分析阶段通常被忽略。各种词法单元对应的词法记号如下:词法单元词法记号词法单元词法记号for1:17if2:=18then3<20else4<>21while5<二22do6>23letter(letter+digit)*10>=24digit digit*11=25+13;26-14(27*15)28/16#0词法分析程序的功能输入:源程序输出:二元组(词法记号,属性值/其在符号表中的位置)构成的序列例如:对源程序x:=5; if (x>0) then x:=2*x+1/3; else x:=2/x; #经词法分析后输出如下序列:(10,
3、9;x' )(18, :二) (11,5)(26,;) (2, if)(27,()1) 几点说明:( 1)关键字表的初值。关键字作为特殊标识符处理,把它们预先安排在一张表格中(称为关键字表) ,当扫描程序识别出标识符,查关键字表。如能查到匹配的单词,则该单词的关键字, 否则为一般标识符。 关键表为一个字符串数组, 其描述如下:char *keyword6= ”for”, ”if”, ” then ” ,”else”,”while ”, ”do” ;2) ) 程序中需要用到的主要变量为 token , id 和 num.1 ) id 用来存放构成词法单元的字符串;2 ) num 用来存放
4、整数(可以扩展到浮点数和科学计数法表示) ;3 ) token 用来存放词法单元的词法记号。可以参考下面的代码:dolexical(); /将词法单元对应的记号保存到 token 中,属性值保存到 num 或者 id中switch(token) case 11: printf ("(token, %dn) ", num); break;case -1: printf("error!n");break;default: printf("(%d,%s)n", token, id);while (token!=0);#include<
5、iostream>#include<string>#include<fstream>#include<queue>#include<cstdlib>using namespace std;string keyword6="for","if","then","else","while","do"bool isletter(char temp)if(temp>='a' && temp<
6、;='z')return true;elsereturn false;bool isdigit(char temp)if(temp>='0' && temp<='9')return true;elsereturn false;bool isid(string temp)bool flag=true;if(!isletter(temp0)flag=false;for(int i=1;i<temp.length() && flag;i+)if(!(isletter(tempi) | isdigit(t
7、empi) flag=false;return flag;bool isnum(string temp)bool flag=true;for(int i=0;i<temp.length() && flag;i+)if(!(tempi>='0' && tempi<='9')flag=false;return flag;)void getkey(string temp,int & key)(if(temp="for")key=1;else if(temp="if") k
8、ey=2;else if(temp="then")key=3;else if(temp="else")key=4;else if(temp="while") key=5;else if(temp="do") key=6;else if(isid(temp)key=10;else if(isnum(temp)key=11;else if(temp="+")key=13;else if(temp="-")key=14;else if(temp="*")key=
9、15;else if(temp="/")key=16;else if(temp=":")key=17;else if(temp=":=")key=18;else if(temp="<")key=20;else if(temp="<>")key=21;else if(temp="<=")key=22;else if(temp=">")key=23;else if(temp=">=")key=24;els
10、e if(temp="=")key=25;else if(temp="")key=26;else if(temp="(")key=27;else if(temp=")")key=28;else if(temp="#")key=0;else key=-1;int main()string temp;char a;int key;queue<string> aqueue;char *array=new char20;bool flag=true;ifstream file;file.op
11、en("test.txt");if(!file)cout<<"can't open 'test.txt' "<<endl;exit(1);a=file.get();while(!file.eof() )while(a=' ')a=file.get();flag=true;int i=0;arrayi+=a;while(isdigit(a)a=file.get();if(isdigit(a)arrayi+=a;elseflag=false;if(isletter(a) && f
12、lag)while(isletter(a)|isdigit(a)a=file.get();if(isletter(a)|isdigit(a)arrayi+=a;elseflag=false;if(flag)switch(a)case ':' : a=file.get();if(a='=')arrayi+=a;a=file.get(); break;case '<' : a=file.get();if(a='>' | a='=')arrayi+=a;a=file.get();break;case '
13、;>' : a=file.get();if(a='=')arrayi+=a;a=file.get();break;default : a=file.get(); break;string t(array,i);aqueue.push(t);while(!aqueue.empty()temp=aqueue.front();aqueue.pop();getkey(temp,key);switch(key)(case -1: cout<<"error!"<<endl; break;/case 0:cout<<"("<<
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年中医酒馆项目投资计划书
- 2026年UTM(空中交通管理)项目投资计划书
- 2026辽宁对外经贸学院电商与物流学院招聘专任教师备考题库及1套完整答案详解
- 2026年农林植保项目公司成立分析报告
- 2026江西南昌大学附属康复医院(第四附属医院)高层次人才招聘33人备考题库附答案详解(研优卷)
- 2026福建电子口岸股份有限公司社会招聘2人备考题库带答案详解(培优)
- 2026年宠物互动玩具项目公司成立分析报告
- 2026湖南邵阳隆回县紫阳中学春季学期实习、见习教师招聘备考题库及答案详解(新)
- 2026年工业区块链溯源系统项目可行性研究报告
- 2026湖北恩施州恩施市福牛物业有限公司招聘工作人员7人的备考题库附参考答案详解(a卷)
- 离婚协议书(2026简易标准版)
- 终末期患者恶心呕吐的护理干预策略优化研究
- 2026年数字化管理专家认证题库200道及完整答案(全优)
- 2025年内蒙古林草执法笔试及答案
- 承包打包装车合同范本
- 2025年邮政社招笔试题库及答案
- 2026届安徽省合肥市一中、六中、八中高三英语第一学期期末经典模拟试题含解析
- 个税挂靠协议书
- 重症科患者的康复护理
- 2025年矿山提升机闸瓦检测题库(附答案)
- 田地种菜出租合同范本
评论
0/150
提交评论