我正在用C++寫一個tokenizer。它要做的是在文件中搜索「」中包含的字符串字符,以及符號[和]。它將創建一個令牌對象,並將其存儲在一個向量中。它應該通過調用input.get()忽略所有空白字符來忽略它們,但我不確定這是否是正確的方法。我也覺得我可以做出愚蠢的錯誤,如==而不是=。這裏是我當前的代碼編寫tokenizer時遇到困難
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++很陌生,所以簡單的解釋會很好。
請注意,失敗結果in.peek()'拼寫'std :: char_traits :: eof()'而不是'-1'。雖然通常使用的是'-1',但並不要求該值爲'-1'。 –
oh生病改變 – Popgalop
我還是得到錯誤 – Popgalop