【发布时间】:2018-08-29 14:38:50
【问题描述】:
我正在用 C++ 构建一个代码解释器,虽然我的整个令牌逻辑都在工作,但我遇到了一个意想不到的问题。
用户在控制台输入一个字符串,程序将所说的字符串解析为不同的对象类型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!
主要目标是让代码将双引号识别为字符串 Token 的开头,并将其整个(从 " 到 ")存储为单个 Token。
因此,如果我输入x = "hello world",它将存储x 作为令牌,然后接下来运行= 作为令牌,然后运行hello world 作为令牌而不是拆分它
【问题讨论】:
-
您到底想完成什么?我猜你想要“世界”而不是“世界!”?
-
@Thebluefish 我希望它能够识别“Hello World!”作为单个标记,而不是用空格分隔符分割它
-
标题似乎与给出的示例不匹配,“Hello world!”如何?与解析双打有关?
-
我认为你应该先用字符'"'分割你的行以提取'真正的字符串',然后用字符''分割其余的。
-
检查是否找到引用,然后忽略所有空格,直到找到另一个引用。