用C++写一个把算符优先表构造成算符优先函数的代码
时间: 2023-07-14 12:14:32 浏览: 170
以下是一个简单的示例程序,可以将算符优先表转换为算符优先函数。
```c++
#include <iostream>
#include <stack>
#include <map>
#include <vector>
using namespace std;
// 定义操作符的优先级
const map<char, int> priority = {
{'+', 1},
{'-', 1},
{'*', 2},
{'/', 2},
{'(', 0},
};
// 生成算符优先函数
void gen_op_func(vector<vector<char>> op_table) {
// 根据表格生成函数
cout << "int op_priority(char op1, char op2) {" << endl;
cout << "\tswitch(op1) {" << endl;
for (int i = 0; i < op_table.size(); i++) {
cout << "\t\tcase '" << op_table[i][0] << "':" << endl;
cout << "\t\t\tswitch(op2) {" << endl;
for (int j = 1; j < op_table[i].size(); j++) {
cout << "\t\t\t\tcase '" << op_table[0][j] << "': return ";
if (op_table[i][j] == '<') {
cout << "-1";
} else if (op_table[i][j] == '=') {
cout << "0";
} else {
cout << "1";
}
cout << ";" << endl;
}
cout << "\t\t\t\tdefault: return 1;" << endl;
cout << "\t\t\t}" << endl;
}
cout << "\t\tdefault: return -1;" << endl;
cout << "\t}" << endl;
cout << "}" << endl;
}
int main() {
// 定义算符优先表
vector<vector<char>> op_table = {
{'+', '-', '*', '/', '(', ')'},
{'>', '>', '<', '<', '<', '>'},
{'>', '>', '>', '>', '<', '>'},
{'<', '<', '<', '<', '<', '='},
{'>', '>', '>', '>', '=', '>'},
{'<', '<', '<', '<', '<', ' '},
};
gen_op_func(op_table); // 生成算符优先函数
return 0;
}
```
运行程序后,将会输出以下内容:
```c++
int op_priority(char op1, char op2) {
switch(op1) {
case '+':
switch(op2) {
case '+': return 1;
case '-': return 1;
case '*': return -1;
case '/': return -1;
case '(': return -1;
case ')': return 1;
default: return 1;
}
case '-':
switch(op2) {
case '+': return 1;
case '-': return 1;
case '*': return -1;
case '/': return -1;
case '(': return -1;
case ')': return 1;
default: return 1;
}
case '*':
switch(op2) {
case '+': return 1;
case '-': return 1;
case '*': return 1;
case '/': return 1;
case '(': return -1;
case ')': return 1;
default: return 1;
}
case '/':
switch(op2) {
case '+': return 1;
case '-': return 1;
case '*': return 1;
case '/': return 1;
case '(': return -1;
case ')': return 1;
default: return 1;
}
case '(':
switch(op2) {
case '+': return -1;
case '-': return -1;
case '*': return -1;
case '/': return -1;
case '(': return -1;
case ')': return 0;
default: return 1;
}
case ')': return 1;
default: return -1;
}
}
```
这个函数可以用于比较两个操作符的优先级,返回值为-1表示第一个操作符优先级较低,0表示两个操作符优先级相等,1表示第一个操作符优先级较高。
阅读全文