实现 LISP 加法表达式的求值。 3)测试数据: 6,(+45),(+(+25)8),(+2(+58)),(+(+(+12)(+34))(+(+56)(+78))) 4)实现提示: 写一个递归函数: int Evaluate(FILE * CharFile) 字符文件 CharFile 的每行是一个如上定义的表达式。每读入 CharFile 的一行,求出并返回表达式的值。
时间: 2023-06-27 10:06:29 浏览: 117
Java实现简单 LISP 加法算术表达式
以下是实现 LISP 加法表达式求值的 C++ 代码,其中包括了对测试数据的测试:
```c++
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int Evaluate(string s, int& i) {
int sum = 0;
int sign = 1;
while (i < s.length()) {
char c = s[i];
if (c == '+') {
sign = 1;
i++;
} else if (c == '-') {
sign = -1;
i++;
} else if (isdigit(c)) {
int num = c - '0';
i++;
while (i < s.length() && isdigit(s[i])) {
num = num * 10 + s[i] - '0';
i++;
}
sum += num * sign;
} else if (c == '(') {
i++;
sum += Evaluate(s, i) * sign;
} else if (c == ')') {
i++;
return sum;
} else {
i++;
}
}
return sum;
}
int main() {
ifstream file("test.txt");
string line;
while (getline(file, line)) {
int i = 0;
int result = Evaluate(line, i);
cout << "Expression: " << line << endl;
cout << "Result: " << result << endl;
}
return 0;
}
```
其中,Evaluate 函数采用递归的方式对 LISP 表达式进行求值。在每次递归中,函数读入一个字符,判断其类型,然后进行相应的操作,直到读取完整个表达式。最后返回表达式的值。
对于测试数据,程序从文件中读入每行表达式,调用 Evaluate 函数进行求值,并输出表达式和求得的结果。
阅读全文