您可能需要某种哈希映射的关联数组来存储您的关键字。这基本上是一个由任何类型索引的数组(对您的问题有用的是一个字符串),它包含的值可能是一个函数指针。然后,您将为每个解析的命令调用不同的函数。
假设您正在使用代码片段中的 C++,您可以编写
// map strings to function pointers
// which take a string (maybe the operands) as parameter
map<string, void (*)(string)> commands;
在构造函数或类似的初始化例程中,您需要设置哈希映射(基本上充当跳转表):
init() {
commands["mov"] = cmd_mov;
commands["cmp"] = cmd_cmp;
...
}
void cmd_mov(string operands) {
// generate move instruction
}
void cmd_cmp(string operands) {
// generate cmp instruction
}
您只需通过以下方式调用该函数
string mnemonic = mnemonic_read_cmd();
string operands = mnemonic_read_op();
*(commands[mnemonic])(operands);
如果每个函数需要不同数量的参数,那么functionoid或boost::function
可能是正确的选择,而不是简单的函数指针。