我正在用C++构建一个代码解释器,虽然我已经使所有的Token逻辑工作正常,但我遇到了一个意想不到的问题。
用户在控制台中输入一个字符串,程序将该字符串解析为不同类型的Token对象,但问题是我是通过以下方式实现的:
void splitLine(string aLine) {
stringstream ss(aLine);
string stringToken, outp;
char delim = ' ';
// Break input string aLine into tokens and store them in rTokenBag
while (getline(ss, stringToken, delim)) {
// assing value of stringToken parsed to t, this labes invalid tokens
Token t (readToken(stringToken));
R_Tokens.push_back(t);
}
}
问题在于,如果解析器接收到一个字符串,比如说
Hello World!
,它会将其拆分为两个标记,Hello
和 World!
。主要目标是让代码将双引号识别为字符串标记的起始,并将其作为一个整体存储(从
"
到 "
),作为一个单一的标记。因此,如果输入 x = "hello world"
,它将把 x
存储为一个标记,然后把下一个运行符 =
存储为一个标记,最后将 hello world
存储为一个标记,而不是拆分成多个标记。