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

📄 main.cpp

📁 一个实现词法分析的程序 VC++环境 所需的efile.pas rfile.pas和头文件 仅供参考
💻 CPP
字号:

#include "main.h"
void main()
{
    char *buf,*p;
	char tm[100];
	char temp;
	int point=0;
	int num;
    int line=1,row=1;
	int n=0,i;
	int flag;
	char filename[255];
	ENote *e1=(ENote *)malloc(sizeof(ENote));
	table t1;  
	stack s;   
	duality d1; 
	e1[0].num=0;
	readfile("date.ls",CodeingList); 
	printf("请输入文件名:\n");
	scanf("%s",filename);
	readfile(filename,codebuf);
	p=Mygetline(line);   
	while(SumLine)
    {
        temp=getword(p,row);  
		s.push(temp);      
        flag=Translate(temp); 
			switch(flag)
			{
			case WORD:                   
				while(Translate(temp)==WORD)
				{
					temp=getword(p,row);
					s.push(temp);
				}
				s.Pop(temp);  
				row--;
				Getstackcontent(tm,s);
				if(i=judge(tm))              
				{                        
					d1.fillduality(i,0);     
					break;    
				}
			    
				 num=t1.exame(tm,WORD);        	                         
				 
				 d1.fillduality(34,num);                      
				
				break;
			case NUMERIC:               
				point=0;
				while(Translate(temp)==NUMERIC||temp=='.')
					
				{
					if(temp=='.')
					{
						if(!point) 
						{point++;}
					    else  
						{	e1=(ENote *)realloc(e1,(e1[0].num+1)*sizeof(ENote));
						    e1[e1[0].num].line=line;
						    e1[e1[0].num].row=row-1;
						    e1[e1[0].num].kind=2;  
						    e1[0].num++;
						    break;
						}
					}
					temp=getword(p,row);
					s.push(temp);
				}
				if(Translate(temp)==WORD)  
				{
                    e1=(ENote *)realloc(e1,(e1[0].num+1)*sizeof(ENote));
				    e1[e1[0].num].line=line;
				    e1[e1[0].num].row=row-1;
					e1[e1[0].num].kind=3;  
				    e1[0].num++;
				}
				row--;       
				s.Pop(temp);
				Getstackcontent(tm,s);
				if(checkreal(tm))
				{
					num=t1.exame(tm,NUMERIC);        
					d1.fillduality(35,num);      	
				}
                else
				{
					 num=t1.exame(tm,NUMERIC);        
					d1.fillduality(36,num);       	
				}
				break;
            case COMMENTS:              
			    temp=getword(p,row);
				if(temp=='*')  
				{
                    while((temp=getword(p,row))!='\0')   
					{
						if((getword(p,row)=='/')&&temp=='*')
						{break;}
						row--;
					}
					if(temp=='\0')         
					{
                  
						e1=(ENote *)realloc(e1,(e1[0].num+1)*sizeof(ENote));
						e1[e1[0].num].line=line;
						e1[e1[0].num].row=row-1;
						e1[e1[0].num].kind=1;  
						e1[0].num++;
						s.Pop(temp);
					    break;
					}
                    
					s.Pop(temp);
				}
				else        
				{
                   d1.fillduality(48,0);  
				   s.Pop(temp);
				   row--;
				}
				break;
			case INTERIEAVE:            
				switch(temp)
				{
				case ':':                 
					if(getword(p,row)=='=')   
					{ d1.fillduality(51,0);}  
					else        
					{row--;
					d1.fillduality(50,0);}  
					break;
				case '<':
					if(getword(p,row)=='=')
					{d1.fillduality(54,0);
					break;} 
					row--;
					if(getword(p,row)=='>')
					{d1.fillduality(55,0);
					break;}
					row--;
                    d1.fillduality(53,0);
					break;
				case '>':
                    if(getword(p,row)=='=')
					{d1.fillduality(58,0);}
					else 
					{row--;
					d1.fillduality(57,0);}
					break;
				case '.':
					if(getword(p,row)=='.')
					{d1.fillduality(47,0);}
					else 
					{row--;}
					break;
				default:         
				   Getstackcontent(tm,s);
                   if(num=judge(tm)) 
				   {d1.fillduality(num,0);}
				}
				s.Pop(temp);  
				break;
			case CONSTANT:              
				s.Pop(temp);              
				while((temp=getword(p,row))!='\0')   
				{
					if(temp=='\'')
					{break;}
				    s.push(temp);
				}
				if(temp=='\0')         
				{
                  
						e1=(ENote *)realloc(e1,(e1[0].num+1)*sizeof(ENote));
						e1[e1[0].num].line=line;
						e1[e1[0].num].row=row-1;
						e1[e1[0].num].kind=4;  
						e1[0].num++;
				}
               
			    Getstackcontent(tm,s);
				num=t1.exame(tm,CONSTANT);        
				d1.fillduality(37,num);  
				break;
			case ILLEGAL:       
                e1=(ENote *)realloc(e1,(e1[0].num+1)*sizeof(ENote));
				e1[e1[0].num].line=line;
				e1[e1[0].num].row=row-1;
				e1[e1[0].num].kind=5;  
				e1[0].num++;
				s.Pop(temp);
				break;
			default:
				s.Pop(temp);     
	 		}
		  if(temp=='\0') 	                
		  {SumLine--;
		   line++;
		   row=1;
		   p=Mygetline(line);   
		  }  
	     
	}
	
	t1.display();
	d1.displayduality();
	d1.writedualityfile();
	t1.writefile();
	printerror(e1);
}

⌨️ 快捷键说明

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