解释器例子代码,脚本语言使用c++
时间: 2023-10-24 12:12:38 浏览: 37
好的,下面是一个简单的解释器例子代码,使用 C++ 实现:
```c++
#include <iostream>
#include <string>
#include <vector>
#include <map>
using namespace std;
class Interpreter {
private:
map<string, int> variables;
public:
Interpreter() {}
void interpret(string code) {
vector<string> tokens = tokenize(code);
for (int i = 0; i < tokens.size(); i++) {
if (tokens[i] == "PRINT") {
i++;
cout << evaluate(tokens[i]) << endl;
} else if (tokens[i] == "LET") {
i++;
string var_name = tokens[i];
i++;
int value = evaluate(tokens[i]);
variables[var_name] = value;
}
}
}
int evaluate(string token) {
if (is_number(token)) {
return stoi(token);
} else {
return variables[token];
}
}
vector<string> tokenize(string code) {
vector<string> tokens;
string token = "";
for (int i = 0; i < code.size(); i++) {
if (code[i] == ' ') {
tokens.push_back(token);
token = "";
} else {
token += code[i];
}
}
tokens.push_back(token);
return tokens;
}
bool is_number(string s) {
for (int i = 0; i < s.length(); i++) {
if (isdigit(s[i]) == false) {
return false;
}
}
return true;
}
};
int main() {
Interpreter interpreter;
interpreter.interpret("LET x 10");
interpreter.interpret("LET y 20");
interpreter.interpret("PRINT x+y");
return 0;
}
```
这个例子实现了一个简单的解释器,可以解释类似于 LET x 10 和 PRINT x+y 这样的语句。它会将输入的代码分解成一系列的 token,然后根据 token 的类型执行对应的操作。
在这个例子中,我们使用一个 map 来存储变量和它们的值,并在 evaluate 函数中根据 token 的类型返回相应的值。在 interpret 函数中,我们根据每个 token 的类型执行不同的操作,比如 LET 就是将变量存储到 map 中,而 PRINT 就是将 token 的值打印到控制台上。
当我们运行这个程序时,它会输出 30,因为 x 的值是 10,y 的值是 20,所以 x+y 的值就是 30。