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

标签 c++ parsing token

我正在用 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/

相关文章:

parsing - 当不可避免的字符被转义时该怎么办?

c++ - C++中指向函数指针的指针

c++ - 将 std 绑定(bind)传递到函数映射的问题

python - 使用 python 从获取的 HTML 代码中提取特定信息

javascript - 八月错误的 Date.parse javascript

node.js - 如何使用feathersjs-authentication将JWT token 发送到客户端?

token - 如果代币总余额超过代币的总供应量,会发生什么?

javascript - 如何使用访问 token 机制在 angular.js 中重定向用户?

c++ - 创建者中调用的方法是从基类调用的,而不是从派生类调用的

C++ AMP,for 循环到 parallel_for_each 循环