Ich schreibe einen Übersetzer aus meiner Programmiersprache, die ein einfaches C++ ist, und ich habe Fragen zum Parsen einer Zeile. In C++ definieren wir einen Gegenstand wie:C++, eine Zeichenkette mit Leerzeichen als eine Einheit analysieren
class Item{
string Item;
string Item2;
};
ich das gleiche Objekt in meiner Sprache erstellen möchte das Schlüsselwort add
:
add "Item Item", "Item2 Item2";
Wie Sie sehen, das string
Variable "Item *" may Sei eine Linie mit Leerzeichen.
Aber ich muss es analysieren und einen Befehlsstapel von Arrays machen. In dem Beispiel möchte ich die Zeile analysieren, um ein Array von 3 wie folgt zu erstellen: [add, Item Item, Item2 Item2]
. Ich muss also den Abstand zwischen "Item Item" speichern und ihn beim Parsen als eine String-Zeile zählen, aber immer noch Leerzeichen als Trennzeichen zwischen add
und dem ersten "Item *" verwenden. Wie mache ich das?
Eröffnen und Schließen von Anführungszeichen zählen. Wenn ein Zitat geöffnet ist, werden Leerzeichen an die letzte Zeichenfolge angehängt. Wenn ein Zitat nicht geöffnet ist, sind Leerzeichen Begrenzer und werden übersprungen. –
Lesen Sie es als eine einzige Zeile (mit z. B. ['std :: getline]] (http://en.cppreference.com/w/cpp/string/basic_string/getline)) dann müssen Sie die Zeichenfolge in einigen anderen analysieren Weg. Das Entfernen des ersten durch Leerzeichen begrenzten Wortes und des abschließenden Semikolons sollte einfach sein. Dann spalte einfach den Rest auf das Komma und entferne alle Zeichenketten in Anführungszeichen. –
Versuchen Boost.Spirit. Es hilft dir sicher. –