用C++写一个将算符优先表转换成算符优先函数的代码
时间: 2023-07-14 08:14:30 浏览: 121
以下是一个简单的示例代码,可以将算符优先表转换成算符优先函数:
```cpp
#include <iostream>
#include <stack>
#include <vector>
#include <map>
using namespace std;
// 定义运算符优先级
int priority(char op) {
if (op == '*' || op == '/') {
return 2;
} else if (op == '+' || op == '-') {
return 1;
} else {
return 0;
}
}
// 将算符优先表转换成算符优先函数
void generateFunction(const vector<vector<char>>& table) {
map<char, int> pri;
pri['#'] = 0;
pri['+'] = 1;
pri['-'] = 1;
pri['*'] = 2;
pri['/'] = 2;
cout << "int getPriority(char a, char b) {" << endl;
cout << " map<char, int> pri;" << endl;
cout << " pri['#'] = 0;" << endl;
for (auto c : table[0]) {
cout << " pri['" << c << "'] = " << pri[c] << ";" << endl;
}
cout << " if (a == '#' || b == '#') {" << endl;
cout << " return 0;" << endl;
cout << " } else {" << endl;
cout << " return pri[a] >= pri[b];" << endl;
cout << " }" << endl;
cout << "}" << endl;
}
int main() {
vector<vector<char>> table = {
{'#', '+', '-', '*', '/', '(', ')', 'i'},
{'+', '>', '>', '<', '<', '<', '>', '<'},
{'-', '>', '>', '<', '<', '<', '>', '<'},
{'*', '>', '>', '>', '>', '<', '>', '<'},
{'/', '>', '>', '>', '>', '<', '>', '<'},
{'(', '<', '<', '<', '<', '<', '=', '<'},
{')', '>', '>', '>', '>', ' ', '>', ' '},
{'i', ' ', ' ', ' ', ' ', ' ', ' ', ' '}
};
generateFunction(table);
return 0;
}
```
这里的算符优先表使用一个二维字符数组来表示,每一行代表一个运算符,每一列代表另一个运算符或终结符,单元格中的字符表示两个运算符之间的优先级关系。
代码中,我们首先定义了一个 `priority` 函数,用于返回运算符的优先级。接着,我们定义了一个 `generateFunction` 函数,该函数接受一个算符优先表作为参数,并将其转换成一个 `getPriority` 函数。最后,我们在 `main` 函数中定义了一个算符优先表的示例,并调用 `generateFunction` 函数将其转换成 `getPriority` 函数的代码。
阅读全文