一个简单的词法分析程序

时间:2020-11-26 16:52:19
这是我们的编译原理课程的第一个实验,蛮简单的,或者说我写得蛮简单。当然会有更好的实现方法呵呵~~
实验名称:词法分析程序设计

目的与要求:
(1)掌握词法分析器的构造过程以及基本方法;
(2)理解正规式、NFA、DFA及最小化DFA的转换过程和方法。

实验内容要点:
给定一个正规式R=XY*|YX*Y|XYX,(*号为上标)请先将此正规式转变为NFA、DFA、最小化,对你所完成最小化DFA进行编程,完成词法分析器工作。

正规式化为最小化的DFA:
一个简单的词法分析程序

程序源代码:
#include<iostream>
#include<string>
using namespace std;

void main()
{
string s;
cout<<"请输入需要判断的字符串:"<<endl;
cin>>s;
s.resize(s.size()+1);
s[s.size()-1]='\0';
if(s[0]=='x')
{
if(s[1]=='\0')
cout<<"能够识别"<<endl;
else if(s[1]=='y')
{
if(s[2]=='y')
{
int j=3;
while(s[j]=='y')
j++;
if(s[j]=='\0')
cout>>"能够识别"<<endl;
else
cout<<"不能识别"<<endl;
}
else if(s[2]=='x')
{
if(s[3]=='\0')
cout<<"能够识别"<<endl;
else
cout<<"不能识别"<<endl;
}
else if(s[2]=='\0')
cout<<"能够识别"<<endl;
else
cout<<"不能识别"<<endl;
}
else
cout<<"不能识别"<<endl;
}
else if (s[0]=='y')
{
int i=1;
while(s[i]=='x')
i++;
if(s[i]=='y')
{
if(s[i+1]=='\0')
cout<<"能够识别"<<endl;
else
cout<<"不能识别"<<endl;
}
else
cout<<"不能识别"<<endl;
}
else
cout<<"不能识别"<<endl;
}

测试用例:
(1)输入x,输出为“能够识别”
(2)输入a,输出为“不能识别”
(3)输入xy,输出为“能够识别”
(4)输入xa,输出为“不能识别”
(5)输入xyyy,输出为“能够识别”
(6)输入xyyya,输出为“不能识别”
(7)输入xyx,输出为“能够识别”
(8)输入yy,输出为“不能识别”
(9)输入xya,输出为“不能识别”
(10)输入yxxxx,输出为“能够识别”
(11)输入ya,输出为“不能识别”
(12)输入yxxxy,输出为“能够识别”