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

📄 自顶向下.txt

📁 自顶向下语法分析
💻 TXT
字号:
#include<iostream.h>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define al 10

void factor();		//F → P F1
void factor_1();        //F1 → ^F F1 |  ε
void power();		//P → n|(E)
void term_1();		//T1 → *T T1 | /T T1 | ε
void term();		//T → F T1
void expr_1();
void expr();
void statement();

// 定义全局数据结构用于计算
char *p;            
double  stack[100] ;
int  top=0 ; 
// var用于记录要赋值的变量字符串
char var[al+1];

void expr()    //  E → T E1
{
	term();
	expr_1();

}

void error()   // error
{
	printf("error!!!\n");
}
	
int getsym()   // 读取数字
{
	int num;
	if( *p<='9' && *p>='0' )
	{	// 整常数的处理
		num=0; 
		do{
			num=10 * num + *p - '0' ;
			p++;
		}while( *p<='9' && *p>='0' ) ;
	}
	return num;
}

void power()		  //P → n|(E)
{
	
	if( *p<='9' && *p>='0' )
	{
		int num=0;
		//读入的数压入栈中
		num=getsym();
		stack[top++]=num ;
	}
	else if(*p == '(')
		{
			p++;
			expr();
			if(*p != ')' ) 
				error();
				p++;
		}
		else error();
	
}

void factor()		  //F → P F1
{
	power();
	factor_1();
}

void factor_1()       //F1 → ^F F1 |  ε
{
	if( *p== '^' )
	{
		p++;
		factor();
		stack[top-2]=pow(double(stack[top-2]),int(stack[top-1]));  // ^运算
		top-- ;   // 调整栈指针
		factor_1();
	}	
}

void term_1()		//T1 → *T T1 | /T T1 | ε
{
	if(*p=='*' )
	{
		p++;
		term() ;
		stack[top-2]=stack[top-2]*stack[top-1];  //  * 运算
		top-- ;   // 调整栈指针
		expr_1() ;
	}
    else  if( *p=='/' )
		{
			p++;
			term() ;
			stack[top-2]=stack[top-2]/stack[top-1];  //  / 运算
			top-- ;   // 调整栈指针
			expr_1() ;
		}

}

void term()		//T → F T1
{
	factor();
	term_1();

}

void expr_1()
{
	if(*p=='+' )
	{
		p++;
		term() ;
		stack[top-2]=stack[top-2] + stack[top-1];    // + 运算
		top-- ;   // 调整栈指针
		expr_1() ;
	}
    else  if( *p=='-' )
		{
			p++;
			term() ;
			stack[top-2]=stack[top-2] - stack[top-1];   // - 运算
			top-- ;   // 调整栈指针
			expr_1() ;
		}

}

void statement()
{
	expr();
}

void main()
{
  
	char *s;
	p=(char *)malloc(100*sizeof(char));
	printf("输入表达式:\n");
	cin>>p;
	s=p;
	statement();
	printf( "%s=%f\n", s,stack[0] ) ; 
}

⌨️ 快捷键说明

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