如何将输入字符串读入调车场算法计算器?

How should an input string be read into a shunting yard algorithm calculator?

我已经实现了 shunting yard algorithm 的基本结构,但我不确定如何读入多位数或函数的值。这是我目前要阅读的值:

string input;
getline(cin, input);
input.erase(remove_if(input.begin(), input.end(), ::isspace), input.end());
//passes into function here
for (int i = 0; i < input.length(); ++i) {
    string s = input.substr(i, 1);
//code continues
}

如您所见,该方法一次只能解析一个字符,缺陷极大。我也尝试过搜索阅读值或解析它们,但没有找到与此处相关的结果。

完整代码:https://pastebin.com/76jv8k9Y

为了 运行 调车场,您需要先标记您的字符串。也就是把12+4变成{'12','+','4'}。然后你就可以用代币去运行调车场了。一个朴素的中缀词法分析算法可能是这样的:

lex(string) {
    buffer = ""
    output = {}
    for character in string {
        if character is not whitespace {
            if character is operator {
                append buffer to output
                append character to output
                buffer = ""
            } else {
                append character to buffer
            }
        }
     append buffer to output
     return output
}

真正的词法分析器要复杂得多,并且是编译器设计的主要研究领域。