⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cifa.cpp

📁 自己做的一个普通词法分析程序c语言环境终结符:e c j t u可扩展
💻 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 + -