📄 cifa.cpp
字号:
#include <iostream.h>
#include"cifa.h"
void main()
{
int num=0;
char str[80];
int errorpos=0;//跟踪出错情况
//简单界面部分
//----------------------------------------------------------------------------
cout<<" ____________________________________________________________"<<endl;
cout<<" ********************************************************"<<endl;
cout<<" 编译原理上机试验——之词法分析"<<endl;
cout<<" ********************************************************"<<endl;
cout<<" ____________________________________________________________"<<endl;
cout<<endl;
cout<<"合法终结符为'e'、'c'、'j'、't'、'u'"<<endl;
cout<<endl;
cout<<"本文法包含5个非终结符和5个终结符(其中S为初态,Z为终态):"<<endl;
cout<<"S-->eC,S-->cB"<<endl;
cout<<"B-->jD"<<endl;
cout<<"C-->cB"<<endl;
cout<<"D-->cC,D-->tE"<<endl;
cout<<"E-->jB,E-->uZ"<<endl;
cout<<endl;
cout<<"______________________________________________________________________________"<<endl;
//----------------------------------------------------------------------------------
cout<<"请按照上面的提示输入你想要的检验的词法"<<endl;
cin.getline(str,80,'\n');
num=cin.gcount()-1;
cout<<"你输入的词法为"<<endl;
for(int strlong=0;strlong<num;strlong++)//输出用户输入的字符串
cout<<str[strlong];
cout<<endl;
cout<<"有效长度为 "<<num<<endl;//输出字符串长度
int s=0,i=0;//i为数组初始行下表,即指向开始状态
//s跟踪输入终结符在二维数组中的跳变状况
while((i<num)&&(s!=-1))
{
s=jump(s,str[i++]);
errorpos=i;
}
//词法分析遇到终态或者非法输入,退出循环,词法判别结束
if((s==5)&&(i<=num))//单词最终进入终态(并且长度适合),可被接受
{
cout<<"单词";
for(int strlong=0;strlong<num;strlong++)//输出用户输入的字符串
cout<<str[strlong];
cout<<"可以被接受!"<<endl;
}
else //非正常结束,不可接受
{
cout<<"单词";
for(int strlong=0;strlong<num;strlong++)//输出用户输入的字符串
cout<<str[strlong];
cout<<"不能被接受!"<<endl;
cout<<"______________________________________________________________________________"<<endl;
cout<<"********************************************************"<<endl;
cout<<"出错位置为:"<<errorpos<<endl;//判断出错位置和出错的字符
cout<<"出错字符为:"<<str[--errorpos]<<endl;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -