2015-2016学年第一学期《编译原理》实验一 实验报告
13计科3 夏以彬 [1**********]3
一、实验目的
1、构造一个《科学计算器》的词法分析程序,程序要求能对输入的字符串流进行词法分析。
2、在实验的过程中,学会应用词法分析的方法——构造NFA和DFA。
二、token的正规式描述
数字:(0|1|2...|8|9)*.( 0|1|2...|8|9)*
分隔符:(=|^|!|%|+|-|*|/|(|))
字符串:(a|b|…|y|z)+
因为在实现中,特殊字符串是先取的普通字符串的token,然后与存储的特殊字符表比对,因此这里只给出普通字符串的token。
三、有限状态机状态图
四、词法分析器的数据结构与算法
主要数据结构包括:
主要的算法:根据有限状态机状态图构造类如下二维表格
然后根据表格构造各个事件的处理方法,以及各个动作的处理方法。当然,也需要添加一个辅助方法,以根据输入判断触发的是哪个事件。
源代码:
#include
#include
using namespace std;
int main(){
stringst,st_num="";
charch[100];
doubleresult,point;
cout
cin>>st;
strncpy(ch,st.c_str(),st.length());
//cout
for(int i=0;i
if(ch[i]=='+'){
cout
cout
//point=atof(st_num);
//result=result+point;
st_num="";
}
else if(ch[i]=='-'){
cout
cout
st_num="";
}
else if(ch[i]=='*'){
cout
cout
st_num="";
} else if(ch[i]=='/'){ cout
cout
st_num="";
}
}
else{
st_num=st_num+ch[i];
}
}
}
五、token的输出
输入1.0+2*3=
输出
输入1.0+(2*3+cos3)/3.6-6=
输出
输入tan(1.0+(sin2*3+cos3)/3.6-6)=
输出
输入4.0log(1.0+(sin2*3+cos3)/3.6-6)=
输出
六、思考题:
程序设计中哪些环节影响词法分析的效率?如何提高效率?
对于特殊字符的词法分析,采用了先接收再对比识别,略影响了分析效率。如果可以在完全接受之前就做出判断,则可提高效率。
2015-2016学年第一学期《编译原理》实验一 实验报告
13计科3 夏以彬 [1**********]3
一、实验目的
1、构造一个《科学计算器》的词法分析程序,程序要求能对输入的字符串流进行词法分析。
2、在实验的过程中,学会应用词法分析的方法——构造NFA和DFA。
二、token的正规式描述
数字:(0|1|2...|8|9)*.( 0|1|2...|8|9)*
分隔符:(=|^|!|%|+|-|*|/|(|))
字符串:(a|b|…|y|z)+
因为在实现中,特殊字符串是先取的普通字符串的token,然后与存储的特殊字符表比对,因此这里只给出普通字符串的token。
三、有限状态机状态图
四、词法分析器的数据结构与算法
主要数据结构包括:
主要的算法:根据有限状态机状态图构造类如下二维表格
然后根据表格构造各个事件的处理方法,以及各个动作的处理方法。当然,也需要添加一个辅助方法,以根据输入判断触发的是哪个事件。
源代码:
#include
#include
using namespace std;
int main(){
stringst,st_num="";
charch[100];
doubleresult,point;
cout
cin>>st;
strncpy(ch,st.c_str(),st.length());
//cout
for(int i=0;i
if(ch[i]=='+'){
cout
cout
//point=atof(st_num);
//result=result+point;
st_num="";
}
else if(ch[i]=='-'){
cout
cout
st_num="";
}
else if(ch[i]=='*'){
cout
cout
st_num="";
} else if(ch[i]=='/'){ cout
cout
st_num="";
}
}
else{
st_num=st_num+ch[i];
}
}
}
五、token的输出
输入1.0+2*3=
输出
输入1.0+(2*3+cos3)/3.6-6=
输出
输入tan(1.0+(sin2*3+cos3)/3.6-6)=
输出
输入4.0log(1.0+(sin2*3+cos3)/3.6-6)=
输出
六、思考题:
程序设计中哪些环节影响词法分析的效率?如何提高效率?
对于特殊字符的词法分析,采用了先接收再对比识别,略影响了分析效率。如果可以在完全接受之前就做出判断,则可提高效率。