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

📄 maincode.cpp

📁 中间代码生成器设计(4学时) 1.实验目的 熟悉算术表达式的语法分析与中间代码生成原理。 2.实验类型 综合性。 3.实验基本要求 (1) 设计语法制导生成表达式的四元式的算法; (2
💻 CPP
字号:
#include <iostream>
#include <string>
#include <stack>

using namespace std;


string s;
string::size_type i = 0;
stack<char> SEM;
stack<char> SYN;
int j = 0;
char syn = ' ';
char sem0 = ' ';
char sem1 = ' ';
void e();

char newtemp[10] = {'0','1','2','3','4','5','6','7','8','9'};
struct temp
{
	char syn;
	char sem0;
	char sem1;
	char str;
};
struct temp qt[10];

void read()
{
	i++;
}

void quat()
{
	syn = SYN.top();
	sem1 = SEM.top();
	
	qt[j].syn = SYN.top();
	qt[j].sem1 = SEM.top();
	SEM.pop();
	qt[j].sem0 = SEM.top();
	qt[j].str = newtemp[j];

	SYN.pop();
	SEM.pop();
	SEM.push(newtemp[j]);
	j++;
}

void f()
{
	if(s[i] == '(')
	{
		read();
		e();
		if(s[i] == ')')
		{
			read();
		}
		else
			cout << "f_err0" << endl;
	}
	else
	{
		if(s[i] <= 'z' && s[i] >= 'a')
		{
			SEM.push(s[i]);
			read();
		}
			
		else
			cout << "f_err1" << endl;
	}	
}

void t()
{
	bool t_falg = true;
	f();
	while(t_falg)
	{
		if(s[i] == '*' || s[i] == '/')
		{
			SYN.push(s[i]);
			read();
			f();
			quat();
		}
		else
			t_falg = false;
	}

}

void e()
{
	bool e_falg =  true;
	t();
	while(e_falg)
	{
		if(s[i] == '+' || s[i] == '-')
		{
			SYN.push(s[i]);
			read();
			t();
			quat();
		}
		else
			e_falg = false;
	}
}
void main()
{
	cout << "请输入字符串: " << endl;

	cin >> s;

	e();

	if(s[i] == '#')
	{
		for(i = 0; i < j; i++)
		{
			cout << "(" << qt[i].syn << " " << qt[i].sem0  << " "
				 << qt[i].sem1 << " " << qt[i].str << ")" << endl;
		}
	}
	else
		cout << "z_err" << endl;

}

⌨️ 快捷键说明

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