我正在用 C++ 编写一个标记器。它要做的是在文件中搜索包含在“”中的字符串字符以及符号 [ 和 ]。它将为其创建一个标记对象,并将其存储在一个向量中。它应该通过调用 input.get() 来忽略所有空白字符以跳过它们,但我不确定这是执行此操作的正确方法。我也觉得我可能犯了愚蠢的错误,比如 == 而不是 =。这是我当前的代码
vector<Token> tokenize(wstring file)
{
ifstream input = ifstream(file);
vector<Token> tokens;
while(input.peek() != std::char_traits<char>::eof())
{
wchar_t ch = (wchar_t) input.peek();
if (isspace(ch))
{
input.get();
}
else if(ch == '[' || ch == ']')
{
input.get();
wstring str(&ch);
tokens.push_back(Token(SYMBOL, str));
}
else if (ch == '"')
{
wstringstream accum;
input.get();
while(input.peek() != '"')
{
if(input.peek() == std::char_traits<char>::eof())
endProgram(L"Unterminated String Literal");
accum<<input.peek();
input.get();
}
tokens.push_back(Token(STRING, accum.str()));
}
}
for(int i = 0; i < tokens.size(); i++)
{
wcout<<tokens.at(i).getData()<<endl;
}
return tokens;
}
但是,当我在这样的文件上运行此代码时
] ]
"ddsd"
"sdsd"
[[]]]]][[
我收到错误 UnterminatedStringLiteral 我做错了什么?顺便说一句,我是 C++ 的新手,所以一个简单的解释会很好。