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

📄 function.h

📁 大学期间写的一个简单的词法分析器,通过输入符合自定义语法规则的程序,得到分析的二元组
💻 H
字号:
#include "fstream.h"
#include "iostream.h"
#include "list.h"
#include "resever.h"
#include "stdlib.h"
#include "type.h"
int print=1;
type buffer[100];
void function(char *p,int value){
	getvalue();	
	for(int i=1;;i++){
		value=0;
		if(!*p)break;
	 else if(*p==' '||*p=='\t'||*p=='\n')p=p+1;
	 else if(identifier(p)){
		list<char> s;
		 s.insert(*p);		 
		 p=p+1;	
		 for(; ;){		
         if(identifier(p)||number(p)){
			 s.insert(*p);
			 p=p+1;			 
		 }
		 else break;
		 }
         listnode<char> *m=s.first;
		 while(m!=NULL){
			 value=value+m->data;
			 m=m->link;
		 }		 
		 m=s.first;		 
		 if(match(value)){	
			 int k=match(value)-1;
			 cout<<"  "<<print<<":";
			 cout<<"<关键字,";
			 print=print+1;
			 cout<<p0[k].name;				
		     cout<<">"<<endl;		    
		    buffer[print-2].value=p0[k].value;			 
	}
		 else{	
		cout<<"  "<<print<<":";
		 cout<<"<标志符,";
		 print=print+1;		
		 while(m!=NULL){
			 cout<<m->data;
			 m=m->link;
		 }
		 cout<<">"<<endl;
		 
		 }
	}
	else if(number(p)){
      list<char> s;
		 s.insert(*p);		  
		 for(; ;){
			 p=p+1;			 
			 if(number(p)){
				 s.insert(*p);		        	
			 }
			 else break;
		 }			 
		  listnode<char> *m=s.first;
		  cout<<"  "<<print<<":";
		  cout<<"<整型值,";
		  print=print+1;		
		 while(m!=NULL){
			 cout<<m->data;
			 m=m->link;
		 }
		 cout<<">"<<endl;
		 
	}
	else {
		switch(*p){
		case '>':
		case '<':
		case '=':{
				list<char> s;
			    s.insert(*p);p=p+1;
			    if(*p=='='){
				s.insert(*p);p=p+1;
				}
			    listnode<char> *m=s.first;
				cout<<"  "<<print<<":";
			    cout<<"<比较符,";
				print+=1;				
		        while(m!=NULL)
				{
			    cout<<m->data;
			    m=m->link;
				}
		        cout<<">"<<endl;
				
				 }break;
		case ' ':p=p+1;break;
		case '+':
		case '-':
		case '*':
		case '/':{
				list<char> s;
				s.insert(*p);
				listnode<char> *m=s.first;	
				cout<<"  "<<print<<":";
			    cout<<"<运算符,";
                print+=1;				
		        while(m!=NULL){
			    cout<<m->data;
			    m=m->link;
				}
		        cout<<">"<<endl;
			
				 p=p+1;} break;
		case '{':{
			       list<char> s;
				   s.insert(*p);
				   listnode<char> *m=s.first;
				   while(*p!='}')p=p+1;	
				   cout<<"  "<<print<<":";
				   cout<<"<注释符,";
                   print+=1;			
		        while(m!=NULL){
			    cout<<m->data;
			    m=m->link;
				}
		        cout<<">"<<endl;
			
				 } break;
		case '}':{
			      list<char> s;
				   s.insert(*p);
				   listnode<char> *m=s.first;				  
				   cout<<"  "<<print<<":";
				   cout<<"<注释符,";
				   print+=1;
				
		           while(m!=NULL){
			      cout<<m->data;
			      m=m->link;
				  } 
		         cout<<">"<<endl;
				
				  p=p+1;} break;
		case ';':{
                 list<char> s;
				   s.insert(*p);
				   listnode<char> *m=s.first;				   
				   cout<<"  "<<print<<":";
				   cout<<"<分隔符,";				   
				   print+=1;		
		           while(m!=NULL){
			      cout<<m->data;
			      m=m->link;
				  } 
		         cout<<">"<<endl;
				  p=p+1;} break;

		case ',':{
                 list<char> s;
				   s.insert(*p);
				   listnode<char> *m=s.first;				   
				   cout<<"  "<<print<<":";
				   cout<<"<逗号,";				   
				   print+=1;		
		           while(m!=NULL){
			      cout<<m->data;
			      m=m->link;
				  } 
		         cout<<">"<<endl;
				  p=p+1;} break;
		case ':':{list<char> s;
				   s.insert(*p);
				   p=p+1;
				   if(*p=='='){
					   s.insert(*p);
					   p=p+1;
			          listnode<char> *m=s.first;
					  cout<<"  "<<print<<":";
			          cout<<"<赋值符,";
					  print+=1;			
		             while(m!=NULL)
					 {
			         cout<<m->data;
			         m=m->link;
					 }
		             cout<<">"<<endl;
				   }				 
		     	  else{
					p=p-1;
				    int k=0;
				   k=error(k,p);
				   if (k==1)p=p+1;break;
				  }
				 }break;
		default:{int k=0;
				   k=error(k,p);
				   if (k==1)p=p+1;break;
				}
		}
	}		
	
}
}

⌨️ 快捷键说明

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