西安交大编译原理实验词法分析器Word格式文档下载.docx
- 文档编号:19844240
- 上传时间:2023-01-10
- 格式:DOCX
- 页数:16
- 大小:118.13KB
西安交大编译原理实验词法分析器Word格式文档下载.docx
《西安交大编译原理实验词法分析器Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《西安交大编译原理实验词法分析器Word格式文档下载.docx(16页珍藏版)》请在冰豆网上搜索。
3.提交报告,报告阐述清楚。
五、程序工作说明:
(以C0语言为例)
程序的输入文件是任何一个目录下的文件格式的C0语言程序段。
程序的输出文件是以xml格式表示的词法分析的结果。
该输出将作为下个实验语法分析的输入文件。
(注意:
也可以自定义格式,但需要在报告中给出格式说明)
词法分析结果输出成xml文件格式为
<
root>
Tokenlineno=xxtype=’…’string=’…’>
/Token>
Tokenlineno=xxtype=’…’string=’…’>
…
/root>
程序输入/输出示例:
如源程序为如下:
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<
b){
12.f1(a,b);
13.}
14.}
则要求得到如下输出文件:
?
xmlversion="
1.0"
>
<
tokenline="
1"
type="
VOID"
string="
void"
/>
ID"
f1"
LPAREN"
("
INT"
int"
a"
COMMA"
"
b"
RPAREN"
)"
LBRACE"
{"
2"
ASSIGN"
="
NUMBER"
SEMI"
;
"
3"
ADD"
+"
4"
RBRACE"
}"
5"
main"
6"
7"
LSQUAR"
["
100"
RSQUAR"
]"
8"
9"
FLOAT"
float"
c"
10"
11"
IF"
if"
LT"
12"
13"
14"
六、相关知识:
词法分析器任务:
输入源程序;
扫描、分解字符串,识别出一个个单词(定义符、标识符、运算符、界符、常数)。
单词符号的表示:
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<
iostream>
fstream>
string>
cstdlib>
usingnamespacestd;
stringjudge1(chara[],intn)
{
stringstr;
str.assign(a,n);
if(!
pare("
))
return"
elseif(!
else"
ELSE"
while"
WHILE"
return"
RETURN"
char"
CHAR"
}
stringjudge2(chara[],intn)
PLUS"
-"
MINUS"
*"
STAR"
/"
SLASH"
EQ"
LTEQ"
GT"
GTEQ"
!
NEQ"
=="
DEQ"
…"
/*"
LCOMMENT"
*/"
RCOMMENT"
voidprint(chara[],intn,intsign,intlin)
stringTokenType;
cout<
tokenline=\"
lin<
\"
type=\"
if(sign==1)
TokenType=judge1(a,n);
if(TokenType=="
)
TokenType="
TokenType<
string=\"
for(inti=0;
i<
n;
i++)
a[i];
endl;
elseif(sign==2)
elseif(sign==3)
TokenType=judge2(a,n);
{system("
cls"
);
cout<
somesignerroroccurred!
Online:
_exit(0);
intmain()
intlin=0,sign,t=0;
char*check,word[100];
charcontent[100];
fstreamout;
out.open("
ios:
:
in);
xmlversion=\"
1.0\"
while(!
out.eof())
lin++;
out.getline(content,100,'
\n'
sign=0;
check=content;
while
(1)
if(sign==0)
if((*check>
='
a'
&
*check<
z'
)||(*check>
A'
Z'
sign=1;
word[t]=*check;
t++;
elseif((*check>
0'
9'
sign=2;
elseif(*check=='
+'
||*check=='
-'
*'
/'
'
'
('
)'
['
]'
{'
}'
…'
sign=3;
elseif(sign==1)
print(word,t,sign,lin);
t=0;
'
sign=0;
variableerroroccurred!
online"
return0;
elseif(*check>
if(*check=='
\0'
if(t>
0)
break;
check++;
out.close();
cin.get();
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 西安 交大 编译 原理 实验 词法 分析器