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

📄 chenbo.txt

📁 编译原理词法分析 通过对DFA模拟程序实验
💻 TXT
字号:
#include <iostream.h>
char word[][3]={
{'U','V','0'},
{'Q','V','0'},
{'U','Q','0'},
{'Q','Q','1'}};//矩阵表示
char K[]={'S','U','V','Q'};//状态集
char E[]={'a','b'};//有穷字母表
char string[10];
int result =0;
 int v(char b)
    {
      int num=0;
      for(int i=0;i<2;i++)
      {
      	if(b==E[i]&&b!='#')num=i;
		else if(b=='#')break;
      }	
      return num;
    }
 int h(char b)
    {
      int num=0;
      for(int i=0;i<4;i++)
      {
      	if(b==K[i]) 
      	  num=i;
      }	
      return num;
    }
void DFA(char a[],int length)
{
        int i=0;
        char st=K[i];//初态开始
        for(int j=0;j<length;j++)
        {
        	
        	int k=v(a[j]);//索引值0或1
            st=word[i][k];
			if(st=='Q')	{result =1;break;}
            else  if(k==0)//代表a
            {
            	if(word[i][k+2]=='0')
            	{
               	i=h(st);
            	result =0;
            	}
            	else if(word[i][k+2]=='1')
            	result =1;
            	
            }
            else if(k==1)//代表b
            {
            	if(word[i][k+1]=='0')
            	{
            	i=h(st);
            	result =0;
            	}
            	else if(word[i][k+1]=='1')
            	result =1;            	
            }
		}
	if (result == 0) {
		cout <<a<<"不属于该语言!"<<endl;
	
		} 
	else if (result ==1) {result=0;
		cout <<a<<"属于该语言"<<endl;
	 
	}
	      }

void main()
{  
	int length=0,flag=1,m=0;
	cout<<"G[S]:\n";
	cout <<" S→aU|bV \n";
	cout <<" U→bV|aQ \n";
	cout <<" V→aU|bQ \n";
	cout <<" Q→aQ|bQ|e \n";
	while(flag==1)
	{
           // cout <<result;
			cout <<"请输入字符串: \n";
			cin >>string;
			while (string[length]!=0)length++;
	 	for(int i=0;i<length;i++)
			{
			if (string[i] == 'a' || string[i] =='b'||string[i] =='#'){m=1;}
			else{cout <<"请输入字母a或b或#"<<endl;}
			}
			
		   if(m==1)DFA(string,length); 
		   cout <<"按1继续或0退出"<<endl;
		  	
			cin >>flag;
	}	
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -