gpt4 book ai didi

c++ - 解释器开发期间解析 token 问题

转载 作者:太空狗 更新时间:2023-10-29 20:51:35 25 4
gpt4 key购买 nike

我正在用 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!,它会将其拆分为 2 个标记 HelloWorld!

代码的主要目标是将双引号识别为字符串 token 的开头并将其整个存储(从 "")作为单个 token 。因此,如果我输入 x = "hello world",它会将 x 存储为标记,然后接下来运行 = 作为标记,然后hello world 作为标记而不是拆分它

最佳答案

您可以使用 C++14 quoted操纵器。

#include <string>
#include <sstream>
#include <iomanip>

#include <iostream>

void splitLine(std::string aLine) {

std::istringstream iss(aLine);
std::string stringToken;

// Break input string aLine into tokens and store them in rTokenBag
while(iss >> std::quoted(stringToken)) {
std::cout << stringToken << "\n";
}
}

int main() {

splitLine("Heloo world \"single token\" new tokens");
}

关于c++ - 解释器开发期间解析 token 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49390024/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com