1 / 16
文档名称:

东南大学-编译原理-词法分析器实验报告.docx

格式:docx   大小:1,742KB   页数:16页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

东南大学-编译原理-词法分析器实验报告.docx

上传人:才艺人生 2022/7/12 文件大小:1.70 MB

下载得到文件列表

东南大学-编译原理-词法分析器实验报告.docx

文档介绍

文档介绍:东南大学-编译原理-词法分析器实验报告
词法分析设计
1. 实验目的 
通过本实验的编程实践,了解词法分析的任务,掌握词法分析程序设计的原理和构造方法,对编译的基本概念、原理和方法有完整的和清楚的理解,并能正确地、熟练地ack(t);
}
break;
case 4:
l_it=(s);
if (l_it!=()){
token t={s,"relop",l_it->second};
(t);
}
break;
case 5:
l_it=(s);
if (l_it==())
{
num[s]=nNum;
token t={s,"num",nNum++};
(t);
}else {
token t={s,"num",l_it->second};
(t);
}
break;
default: //error
token t={s,"id",-1};
(t);
break;
}
}
void lexical() 词法分析器,按字符读入文法并对其进行处理。
从状态0开始处理,如果是空白符则一直在状态0,如果第一个字符为字母,继续往后寻找,直至不是字母或是数字结束;若第一个字符为数字,将其拼凑成一个数字,数字可以有小数点等,详细见状态转换图,注意以数字开头容易出现一种例如3a类型的错误,所以以数字开头的一定要往下多找一个,看最后一个数字后面是否为空白符或界符或者其他允许出现的符号,如果后面紧跟着字母则报错。如上同理分析运算符等。注意每次处理完遇到一个字符串都要将其送到addToken()添加到Token表中并回到状态0,继续往下处理。

void lexical()
{
fstream ln("E:\");
char ch,tempch;
int state=0;
string s="",key="";
while(!())
{
switch(state){
case 0: ch=();
s=ch;
if (ch==13||ch==10||ch==32||ch==9) {state=0; s="";}
else if (ch=='<') state=1;
else if (ch=='=') state=6;
else if (ch=='>') state=9;
else if (isLetter(ch)) state=13;
else if (isDigit(ch)) state=15;
else if (ch=='+'||ch=='-'||ch=='*'||ch=='/'||ch=='&'||ch=='|')
{ state=20; tempch=ch;}
else if (ch=='^') state=44;
else if (isSep(ch)!=-1) state=47;
else if (isOp(s)!=-1) state=48;
else if (isRelop(s)!=-1) state=49;
else state=50; //error
break;
case 1: ch=();
if(ch=='='||ch=='>') state=2;
else if(ch=='<') state=4;
else state=5;
break;
case 2:
s+=ch;
addToken(s,4);
state=0;
break;
case 4:
s+=ch;
addToken(s,3);
state=0;
break;
case 5: //*
addToken(s,4);
(