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

📄 wordanalysis.h

📁 单词的词法分析程序设计
💻 H
字号:
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;                                                                                                        
#define NN 256
#define N 30   
#define ln 20                                              
char line[NN];   
char liword[N];char word[N][ln];
int fi; char mark;int wordlen,linelen,num;int next;char ch;int fj;


void clear(char *array,int length)
{
	for(int i=0;i<length;i++)
	{array[i]='\0';}
}

void errorr(int etype)
{
if(etype==1)
 {
    if(!isspace(ch)&&ch!='\n'&&ch!='\t')
	fj=fj+1;ch=line[fj];
 }
 else if(etype==2) 
 cout<<"词法出错,赋值符应为:="<<endl;

else if(etype==3)
 cout<<"指数形式错误"<<endl;
}


int IsMath()
{
	if(ch=='+'||ch=='-'||ch=='*'||ch=='/'||ch=='='||ch=='<'||ch=='>'||ch==':')
		return 1;
	
	else return 0;
}


int IsBound()
{
    if(ch==','||ch=='.'||ch==';'||ch=='('||ch==')')
		return 1;
	else return 0;
}

void Alpha()
{       fi=0;
        clear(liword,wordlen);
  	    while(isalpha(ch) || isdigit(ch))
			{
				liword[fi]=ch;
				fi++;fj++;
				ch=line[fj];
			}
        wordlen=fi;
}


void Digit()
{
    fi=0;int eyes; 
	clear(liword,wordlen);
	do{
       liword[fi++]=ch;
       ch=line[++fj];
	}while(isdigit(ch));
if(ch=='.')
{ 
  liword[fi++]=ch;
  ch=line[++fj];
  if(!isdigit(ch)){eyes=1;}
  while(isdigit(ch))
  {  liword[fi++]=ch;
       ch=line[++fj];  }
}

if(ch=='e'||ch=='E')
{  liword[fi++]=ch;
   ch=line[++fj];
   if(ch=='-')
   {liword[fi++]=ch;ch=line[++fj];}
   if(!isdigit(ch)){eyes=1;}
   while(isdigit(ch))
   {  liword[fi++]=ch;
        ch=line[++fj];}
}
    if(eyes==1){errorr(3);}
    
    
    wordlen=fi;
  
	
}




void Math()
{       
	    fi=0;
        clear(liword,wordlen);
	    liword[fi] =ch;
   	    if(ch=='+'||ch=='-'||ch=='*'||ch=='/'||ch=='=')
		{   
			wordlen=1;
		}	
		else if(ch=='>')
		{   fj=fj+1;
			ch=line[fj];
			
			if(ch=='=')
			{liword[1]=ch;wordlen=2;}
			else
			{wordlen=1;fj=fj-1;}
		}
		else if( ch=='<')

		{    fj=fj+1;
		     ch=line[fj];
			
			if(ch=='=')
			{liword[1]=ch;wordlen=2;}
			else
			{wordlen=1;fj=fj-1;}
		}
		else if(ch=':')
		{
             fj=fj+1;
		     ch=line[fj];
			 if(ch=='=')
			 {liword[1]=ch;wordlen=2;}
			 else
			 {errorr(2);wordlen=1;fj=fj-1;errorr(2);}
		}

		fj=fj+1;
		ch=line[fj];
        
        
}



void Bound()
{ 
  fi=0;
  clear(liword,wordlen);
  liword[fi]=ch;
  wordlen=1;
  fj=fj+1;
  ch=line[fj];
}


void anlysis()
{     fj=0;
      ch=line[0];
	 do{ 
         if(isalpha(ch)) 
		 {Alpha();num++;
         for(int w=0;w<=wordlen;w++)
		 {word[next][w]=liword[w];}
		 next++;}

		 else if(isdigit(ch))
		 { Digit();num++;
		 for(int w=0;w<wordlen;w++)
		 {word[next][w]=liword[w];}
		 next++;}

		 else if(IsMath()) 
		 {Math();num++;
		 for(int w=0;w<wordlen;w++)
		 {word[next][w]=liword[w];}
		 next++;}

         else if(IsBound())  
		 {Bound();num++;
		 for(int w=0;w<wordlen;w++)
		 {word[next][w]=liword[w];}
		 next++;}

	     else {errorr(1);}
		 }while(fj<linelen);
	 cout<<"\n词法分析成功!分析得到的单词序列如下:"<<endl;
	 for(int nu=0;nu<num;nu++)
	 {cout<<word[nu]<<"  ";}
	 cout<<endl;
}

⌨️ 快捷键说明

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