finden tut ich eine kleine Programmiersprache schreibe, die nur ein Schlüsselwort hat, die write
ist Ich habe nicht einen Parser aber Lexer getan Es funktioniert gut, bis es zu "
Token bekommtSchreibe eine Lexer. Lexer "
main.cpp:
#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>
#include <vector>
using namespace std;
int main(int argc, char* argv[2])
{
char text;
string tok = "";
string str = "";
vector <string> tokens;
fstream inFile(argv[1]);
while (inFile >> noskipws >> text)
{
tok += text;
if (tok == "write")
{
tokens.push_back(tok);
tok = "";
}
else if(tok == "\"")
{
str += text;
tokens.push_back("String:"+str);
str = "";
tok = "";
tok += text;
}
for (auto const& c : tokens)
std::cout << c << ' ';
}
return 0;
}
test.txt:
write "hello"
Ausgang ist:
write write write write write write write ...
statt,
String:hello
Was kann ich tun? Irgendwelche Ideen?
Das richtige Werkzeug, um solche Probleme zu lösen, ist Ihr Debugger. Sie sollten Schritt für Schritt durch Ihren Code * gehen, bevor Sie auf Stack Overflow nachfragen. Für weitere Hilfe lesen Sie bitte [Wie kleine Programme zu debuggen (von Eric Lippert)] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). Zumindest sollten Sie Ihre Frage so bearbeiten, dass sie ein [minimales, vollständiges und verifizierbares] (http://stackoverflow.com/help/mcve) Beispiel enthält, das Ihr Problem zusammen mit den Beobachtungen, die Sie im Debugger gemacht haben, reproduziert . –
Debugger gibt keinen Fehler –
Und was sind die Variablenwerte, wenn Sie den Code Zeile für Zeile durchlaufen? Auch 'string tokens [];' sieht falsch aus, hat das überhaupt kompiliert? –