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

📄 程序.txt

📁 软件学院学生编译原理课程实验
💻 TXT
字号:

#include "string.h"
#include "stdio.h"

char syn[10];                                   //文法符号栈
int i_syn;                                      
char sem[10];                                   //运算对象栈
int i_sem;
char exp[50];                                   //算术表达式区
int i;   
char qt[30][15];                                 //四元式区
int j=0;
char temp='q';                               //临时变量,取值为r--z

int E();
int T();
int F();
void quat();                                    //生成四元式函数

int main(int argc, char* argv[])
{
	printf("please input your expression:");
    scanf("%s",exp);                             //输入四元式
	i=0;                                         //read(w)
    E();      
	if (exp[i]=='\0')
		for (i=0;i<j;i++)                        //输出四元式序列
			printf("%s\n",qt[i]);
	else
		printf("err");
	printf("Hello World!\n");
	return 0;
}

int E()
{
	T();
	while ( exp[i]=='+' || exp[i]=='-')
	{
		syn[++i_syn]=exp[i];                      //push(SYN,w)
		i++;                                    //read(w)
		T();
		quat();
	}
	return 1;
}
int T()
{
	F();
	while ( exp[i]=='*' || exp[i]=='/')
	{
		syn[++i_syn]=exp[i];                      //push(SYN,w)
		i++;                                    //read(w)
		F();
		quat();
	}
	return 1;
}
int F()
{
	if ( exp[i]=='(')
	{
		i++;                                       //read(w)
		E();
		if ( exp[i]!=')')
		{
			printf("err");
			return 0;
		}
	}
	else if ((exp[i]>='a' && exp[i]<='p')||(exp[i]>='0' && exp[i]<='9'))
	{
		sem[++i_sem]=exp[i];                     //push(SEM,w)
	}
	else 
	{
		printf("err");
		return 0;
	}
	i++;                                         //read(w)
	return 1;
}
void quat()
{
	
	strcpy(qt[j],"( , , , )");                    //QT[j]:=(SYN[k],SEM[s-1],SEM[s],temp);
	qt[j][1]=syn[i_syn];
	qt[j][3]=sem[i_sem-1];
	qt[j][5]=sem[i_sem];
	qt[j][7]=temp;
	j++;
	i_syn--;                               //pop(SYN);
	i_sem--;                               //pop(SEM);
	i_sem--;                               //pop(SEM);
	sem[++i_sem]=temp;                     //push(SEM,temp);
        temp++;
}

⌨️ 快捷键说明

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