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

📄 compiler.cpp

📁 一个很一般的编译程序 有词法分析
💻 CPP
📖 第 1 页 / 共 3 页
字号:
						 vn_stack[vn_stack_top-1].t_val, t_num,false );
					B->head = vn_stack[vn_stack_top-1].head ;
					vn_stack[vn_stack_top-1].tail->next = f1 ;
					B->tail = f1 ;
					pop_vn( 1);
				}
			}
			else{
				if( vn_stack[vn_stack_top-1].isTmp == false ){
					f1->join("|", vn_stack[vn_stack_top-2].t_val,
						vn_stack[vn_stack_top-1].ch, t_num,false );
					B->head = vn_stack[vn_stack_top-2].head ;
					vn_stack[vn_stack_top-2].tail->next = f1 ;
					B->tail = f1 ;
				}
				else{
					f1->join("|", vn_stack[vn_stack_top-2].t_val ,
						 vn_stack[vn_stack_top-1].t_val, t_num,false );
					B->head = vn_stack[vn_stack_top-2].head ;
					vn_stack[vn_stack_top-2].tail->next = vn_stack[vn_stack_top-1].head;
					vn_stack[vn_stack_top-1].tail->next = f1 ;
					B->tail = f1 ;
				}
			}
			B->t_val = t_num ;
			B->isTmp = true ;
			fourexpHead = B->head ;//链成用fourexpHead传回到主函数中。
			pop_vn( 2);
			push_vn( vn_stack ,   B );
			break;
			} 
			

		case 10 ://B->i>i
			{
			t_num++ ;
			Vn * B = new Vn;//生成新的终极符结点
			fourexp * f1 = new fourexp;
			f1->next = NULL ;
			f1->join(">",word[j-3].name,word[j-1].name, t_num,false);
			B->head = f1 ;
			B->tail = f1 ;
			B->t_val = t_num ;
			B->isTmp = true ;
			fourexpHead = B->head ;//链成用fourexpHead传回到主函数中。
			push_vn( vn_stack ,   B );
			break;
			}

		case 11 ://B->i<i
			{
			t_num++ ;
			Vn * B = new Vn;//生成新的终极符结点
			fourexp * f1 = new fourexp;
			f1->next = NULL ;
			f1->join("<",word[j-3].name,word[j-1].name, t_num,false);
			B->head = f1 ;
			B->tail = f1 ;
			B->t_val = t_num ;
			B->isTmp = true ;
			fourexpHead = B->head ;//链成用fourexpHead传回到主函数中。
			push_vn( vn_stack ,   B );
			break;
			}
			
		case 12 ://B->i=i
			{
			t_num++ ;
			Vn * B = new Vn;//生成新的终极符结点
			fourexp * f1 = new fourexp;
			f1->next = NULL ;
			f1->join("=",word[j-3].name,word[j-1].name, t_num,false);
			B->head = f1 ;
			B->tail = f1 ;
			B->t_val = t_num ;
			B->isTmp = true ;
			fourexpHead = B->head ;//链成用fourexpHead传回到主函数中。
			push_vn( vn_stack ,   B );
			break;
			}

		case 13 ://true
			{
			Vn * B = new Vn;//生成新的终极符结点
			B->head = NULL ;
			B->tail = NULL ;
			fourexpHead = B->head ;//链成用fourexpHead传回到主函数中。
			B->ch = word[j-1].name ;
			B->isTmp = false ;
			push_vn( vn_stack ,   B);
			break;
			}
			
		case 14 ://B->false
			{
			t_num++ ;
			Vn * B = new Vn;//生成新的终极符结点
			B->head = NULL ;
			B->tail = NULL ;
			fourexpHead = B->head ;//链成用fourexpHead传回到主函数中。
			B->ch = word[j-1].name ;
			B->isTmp = false ;
			push_vn( vn_stack ,   B);
			break;
			}
			
		case 15 ://E->E+E
			{
			t_num++ ;
			Vn * E = new Vn;//生成新的终极符结点
			fourexp * f1 = new fourexp;
			f1->next = NULL ;
			if( vn_stack[vn_stack_top-2].isTmp == false ){
				if( vn_stack[vn_stack_top-1].isTmp == false ){
					f1->join("+",vn_stack[vn_stack_top-2].ch ,
						vn_stack[vn_stack_top-1].ch ,  t_num, false);
					E->head = f1 ;
					E->tail = f1 ;
				}
				else{
					f1->join("+",vn_stack[vn_stack_top-2].ch ,
						 vn_stack[vn_stack_top-1].t_val, t_num,false );
					E->head = vn_stack[vn_stack_top-1].head ;
					vn_stack[vn_stack_top-1].tail->next = f1 ;
					E->tail = f1 ;
				}
			}
			else{
				if( vn_stack[vn_stack_top-1].isTmp == false ){
					f1->join("+", vn_stack[vn_stack_top-2].t_val ,
						vn_stack[vn_stack_top-1].ch ,  t_num , false);
					E->head = vn_stack[vn_stack_top-2].head ;
					vn_stack[vn_stack_top-2].tail->next = f1 ;
					E->tail = f1 ;
				}
				else{
					f1->join("+", vn_stack[vn_stack_top-2].t_val ,
						 vn_stack[vn_stack_top-1].t_val,  t_num , false);
					E->head = vn_stack[vn_stack_top-2].head ;
					vn_stack[vn_stack_top-2].tail->next = vn_stack[vn_stack_top-1].head;
					vn_stack[vn_stack_top-1].tail->next = f1 ;
					E->tail = f1 ;
				}
			}
			E->t_val = t_num ;
			E->isTmp = true ;
			fourexpHead = E->head ;//链成用fourexpHead传回到主函数中。
			pop_vn( 2);
			push_vn( vn_stack ,   E );
			break;
			}
			
		case 16 ://E->E*E
			{
			t_num++ ;
			Vn * E = new Vn;//生成新的终极符结点
			fourexp * f1 = new fourexp;
			f1->next = NULL ;
			if( vn_stack[vn_stack_top-2].isTmp == false ){
				if( vn_stack[vn_stack_top-1].isTmp == false ){
					f1->join("*",vn_stack[vn_stack_top-2].ch ,
						vn_stack[vn_stack_top-1].ch ,  t_num , false);
					E->head = f1 ;
					E->tail = f1 ;
				}
				else{
					f1->join("*",vn_stack[vn_stack_top-2].ch ,
						 vn_stack[vn_stack_top-1].t_val, t_num,false );
					E->head = vn_stack[vn_stack_top-1].head ;
					vn_stack[vn_stack_top-1].tail->next = f1 ;
					E->tail = f1 ;
				}
			}
			else{
				if( vn_stack[vn_stack_top-1].isTmp == false ){
					f1->join("*", vn_stack[vn_stack_top-2].t_val ,
						vn_stack[vn_stack_top-1].ch ,  t_num , false);
					E->head = vn_stack[vn_stack_top-2].head ;
					vn_stack[vn_stack_top-2].tail->next = f1 ;
					E->tail = f1 ;
				}
				else{
					f1->join("*", vn_stack[vn_stack_top-2].t_val ,
						 vn_stack[vn_stack_top-1].t_val ,  t_num, false);
					E->head = vn_stack[vn_stack_top-2].head ;
					vn_stack[vn_stack_top-2].tail->next = vn_stack[vn_stack_top-1].head;
					vn_stack[vn_stack_top-1].tail->next = f1 ;
					E->tail = f1 ;
				}
			}
			E->t_val = t_num ;
			E->isTmp = true ;
			fourexpHead = E->head ;//链成用fourexpHead传回到主函数中。
			pop_vn( 2);
			push_vn( vn_stack ,   E );
			break;
			}
			
		case 17 ://E->(E)
			{
			Vn * E = new Vn;//生成新的终极符结点
			E->head = vn_stack[vn_stack_top-1].head ;
			E->tail = vn_stack[vn_stack_top-1].tail ;
			fourexpHead = E->head ;//链成用fourexpHead传回到主函数中。
			E->isTmp = true ;
			E->t_val = vn_stack[vn_stack_top-1].t_val ;
			pop_vn( 1);
			push_vn( vn_stack ,   E );
			break;
			}
						
		case 18 ://E->i
			{
			Vn * E = new Vn;//生成新的终极符结点
			E->head = NULL ;
			E->tail = NULL ;
			fourexpHead = E->head ;//链成用fourexpHead传回到主函数中。
			E->ch = word[j-1].name ;
			E->isTmp = false ;
			push_vn( vn_stack ,   E );
			break;
			}

		case 19 ://E->n
			Vn * E = new Vn;//生成新的终极符结点
			E->head = NULL ;
			E->tail = NULL ;
			fourexpHead = E->head ;//链成用fourexpHead传回到主函数中。
			E->ch = word[j-1].name ;
			E->isTmp = false ;
			push_vn( vn_stack ,   E );
			break;
			



		}



	}
	else {
		error1();
	}

	
//	i = table[i][word[j].id];
}while(!isEmpty(_stack));
}//syntax语法分析




int main(int argc, char* argv[])
{
	int length=10;//文件名不能太长,要小于10个字符
    char *strbuf;
	int i;
	fourexpHead=NULL;
 //	char * filename;
	FILE* p;
 //	if(argc ==2 )
//	{
//	 length = strlen(argv[1]);
//	 filename = new char[length+1];
//	 strcpy(filename,argv[1]);
//	 	filename[length] = '\0';
		sourceFile = fopen("c1.txt","r");//
		if(sourceFile == NULL)
		{
			cout<<"打开文件失败"<<endl;
			return -1;
		}
	 p = sourceFile;
	 strbuf = new char[BUFLINE*5];
	 for(i=0;i<BUFLINE*5;i++) strbuf[i] = 0;
	 i = 0;
	 while(!feof(p)){
		 strbuf[i]=(char)fgetc(p);
		 i++;
}
		 strbuf[i-1] = '\0';
		 //fclose(p);
		 
		lex(strbuf);//词法分析
		syntax();//语法分析
		add_fourexp();
		fourexp *q = fourexpHead;
		while( q ){
		q->Display();
		q = q->next;
	}

getchar();

//	}//if


	return 0;
}

⌨️ 快捷键说明

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