西安交大编译原理实验词法分析器.docx
- 文档编号:27605525
- 上传时间:2023-07-03
- 格式:DOCX
- 页数:18
- 大小:118.99KB
西安交大编译原理实验词法分析器.docx
《西安交大编译原理实验词法分析器.docx》由会员分享,可在线阅读,更多相关《西安交大编译原理实验词法分析器.docx(18页珍藏版)》请在冰豆网上搜索。
西安交大编译原理实验词法分析器
实验一:
词法分析器
一、实验目的:
1.强化对系统软件综合工程实现能力的训练;
2.加强对词法分析原理、方法和基本实现技术的理解;
二、实验内容:
用C语言或者其他的高级语言作为宿主语言完成C1语言的词法分析器的设计和实现。
三、实验要求:
1.编写C0语言的词法分析器的源程序并调试通过。
其中词法分析程序既可以自己手动去完成,也可以利用LEX自动生成。
2.通过测试程序的验收;
3.实验报告按照提供的模板填写:
(1)功能描述:
该程序具有什么功能?
(2)程序结构描述:
函数调用格式、参数含义、返回值描述、函数功能;另外可以附加函数之间的调用关系图、程序总体执行流程图。
(3)实验总结:
你在编程过程中花时多少?
多少时间在纸上设计?
多少时间上机输入和调试?
多少时间在思考问题?
遇到了哪些难题?
你是怎么克服的?
你对你的程序的评价?
你的收获有哪些?
四、评判标准:
1.输出正确的实验结果;
2.代码清晰,格式良好;
3.提交报告,报告阐述清楚。
五、程序工作说明:
(以C0语言为例)
程序的输入文件是任何一个目录下的文件格式的C0语言程序段。
程序的输出文件是以xml格式表示的词法分析的结果。
该输出将作为下个实验语法分析的输入文件。
(注意:
也可以自定义格式,但需要在报告中给出格式说明)
词法分析结果输出成xml文件格式为
…
程序输入/输出示例:
如源程序为如下:
1.voidf1(inta,intb){
2.a=1;
3.b=a+b;
4.}
5.voidmain()
6.{
7.inta[100];
8.intb;
9.floatc;
10.a[b]=a;
11.if(c
12.f1(a,b);
13.}
14.}
则要求得到如下输出文件:
xmlversion="1.0"?
>
六、相关知识:
词法分析器任务:
输入源程序;扫描、分解字符串,识别出一个个单词(定义符、标识符、运算符、界符、常数)。
单词符号的表示:
1)需要对单词分类,每一个识别出来的单词都属于不同的类型
publicenumTokenType
{
//关键字
IF,ELSE,WHILE,RETURN,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,//数字常量
『ID→letter(letter|didit)*
NUMBER→digitdigit*
letter→a|b|…|z|A|B|…|Z
digit→0|…|9』
NONTOKEN,ERROR,ENDFILE//其它
};
2)单词符号的数据结构设计
publicclassToken
{
stringstr;//单词字符串
TokenTypettype;//单词的类型
intline;//所在行号信息
}
3)词法分析状态转换图
运行结果:
程序代码:
#include
#include
#include
#include
usingnamespacestd;
stringjudge1(chara[],intn)
{
stringstr;
str.assign(a,n);
if(!
pare("if"))
return"IF";
elseif(!
pare("else"))
return"ELSE";
elseif(!
pare("while"))
return"WHILE";
elseif(!
pare("return"))
return"RETURN";
elseif(!
pare("void"))
return"VOID";
elseif(!
pare("int"))
return"INT";
elseif(!
pare("float"))
return"FLOAT";
elseif(!
pare("char"))
return"CHAR";
return"";
}
stringjudge2(chara[],intn)
{
stringstr;
str.assign(a,n);
if(!
pare("+"))
return"PLUS";
elseif(!
pare("-"))
return"MINUS";
elseif(!
pare("*"))
return"STAR";
elseif(!
pare("/"))
return"SLASH";
elseif(!
pare("="))
return"EQ";
elseif(!
pare("<"))
return"LT";
elseif(!
pare("<="))
return"LTEQ";
elseif(!
pare(">"))
return"GT";
elseif(!
pare(">="))
return"GTEQ";
elseif(!
pare("!
="))
return"NEQ";
elseif(!
pare("=="))
return"DEQ";
elseif(!
pare("…"))
return"ASSIGN";
elseif(!
pare(";"))
return"SEMI";
elseif(!
pare(","))
return"COMMA";
elseif(!
pare("("))
return"LPAREN";
elseif(!
pare(")"))
return"RPAREN";
elseif(!
pare("["))
return"LSQUAR";
elseif(!
pare("]"))
return"RSQUAR";
elseif(!
pare("{"))
return"LBRACE";
elseif(!
pare("}"))
return"RBRACE";
elseif(!
pare("/*"))
return"LCOMMENT";
elseif(!
pare("*/"))
return"RCOMMENT";
return"";
}
voidprint(chara[],intn,intsign,intlin)
{
stringTokenType;
cout<<" if(sign==1) { TokenType=judge1(a,n); if(TokenType=="") TokenType="ID"; cout< for(inti=0;i cout< cout<<"\"/>"< } elseif(sign==2) { TokenType="NUMBER";
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 西安 交大 编译 原理 实验 词法 分析器