词法分析器-编译原理-C++实现-实验报告.doc
- 文档编号:508785
- 上传时间:2023-04-29
- 格式:DOC
- 页数:7
- 大小:147KB
词法分析器-编译原理-C++实现-实验报告.doc
《词法分析器-编译原理-C++实现-实验报告.doc》由会员分享,可在线阅读,更多相关《词法分析器-编译原理-C++实现-实验报告.doc(7页珍藏版)》请在冰点文库上搜索。
学生实验报告
学院:
软件与通信工程学院
课程名称:
编译原理
专业班级:
姓名:
学号:
学生实验报告
学生姓名
学号
同组人
实验项目
C++实现词法分析器
□必修□选修
□演示性实验□验证性实验□操作性实验□综合性实验
实验地点
实验仪器台号
指导教师
实验日期及节次
周二上午周三下午
一、实验综述
1、实验目的及要求
使用任意语言实现词法分析器
2、实验仪器、设备或软件
VisualC++。
二、实验过程(实验步骤、记录、数据、分析)
代码:
#include
#include
#include
usingnamespacestd;
#defineMAX10//保留字个数
#defineLIST_MAX_LENGTH10
charch='';//存放最新读进的字符
charstrToken[LIST_MAX_LENGTH];//单词符号长度
intlen=0;//单词符号的长度
ints=0;//判断是否多读一位
charkey[30][10]={"if","else","for","while","do","bool","int","char","double","friend","class","struct","return","delete","new","public",
"private","endl","break","const","static","include","endl","auto","iostream","cstring","define","void","cin","cout"};
charGetChar()//读一个字符
{
ch=getchar();
if(ch!
='/n')
returnch;
return'';
}
charGetBC()//检查ch是否为空白
{
while(ch=='')
ch=GetChar();
returnch;
}
voidConcat()//连接
{
strToken[len]=ch;
len++;
}
intReserve(charstrToken[])//判断是否为保留字
{
for(inti=0;i<(sizeof(key)/sizeof(key[0]));i++)
if(strcmp(key[i],strToken)==0)
{
return1;
}
return0;
}
intIsLetter()//判断是否为字母
{
if(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch>='A')))
return1;
else
return0;
}
intIsDigit()//判断是否为数字
{
if(ch>='0'&&ch<='9')
return1;
else
return0;
}
voidInsertId()//插入符号表
{
ofstreamoutfile("symbol.txt",ios:
:
app);
for(inti=0;i { outfile< } outfile< outfile.close(); } voidInsertConst()//插入常数表 { ofstreamoutfile("number.txt",ios: : app); for(inti=0;i { outfile< } outfile< outfile.close(); } intmain() { cout<<"请输入字符串代码: "< if(s! =1) { GetChar(); } while(ch! =10) { //getchar(); // cout< GetBC(); if(IsLetter()) { while(IsLetter()) { Concat(); GetChar(); } s=1; // Retract(); if(Reserve(strToken)) { cout< len=0; memset(strToken,0,sizeof(strToken));//清空数组 } else { cout< InsertId(); len=0; memset(strToken,0,sizeof(strToken)); } } elseif(IsDigit()) { while(IsDigit()) { Concat(); GetChar(); } s=1; // Retract(); cout< InsertConst(); len=0; memset(strToken,0,sizeof(strToken)); } elseif(ch=='#'){cout<<'#'<<" $警号"< elseif(ch==';'){cout<<';'<<" $分号"< elseif(ch=='+'){cout<<'+'<<" $加号"< elseif(ch=='='){cout<<'='<<" $等号"< elseif(ch=='*'){cout<<'*'<<" $乘号"< elseif(ch==';'){cout<<';'<<" $分号"< elseif(ch=='>'){cout<<'>'<<" $大于号"< elseif(ch=='<'){cout<<'<'<<" $小于号"< elseif(ch=='('){cout<<'('<<" $左括号"< elseif(ch==')'){cout<<')'<<" $右括号"< elseif(ch=='{'){cout<<'{'<<" $左中括号"< elseif(ch=='}'){cout<<'}'<<" $右中括号"< elseif(ch=='"'){cout<<'"'<<" $双引号"< elsecout< if(s! =1) { GetChar(); } } return0; } 三、结论 1、实验结果 2、分析讨论 通过本次实验,使我更加了解了词法分析器的工作原理,并基本学会了怎样用程序代码去实现它。 四、指导教师评语及成绩: 评语: 成绩: 指导教师签名: 批阅日期:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 词法 分析器 编译 原理 C+ 实现 实验 报告