Ich schreibe eine Konsolenanwendung in C++ und ich brauche Benutzer shell-like-Befehlssystem, um Optionen in Anwendungen zu konfigurieren. Zum Beispiel, Benutzer so etwas schreiben könnte:Wie analysiert man den Befehlsbaum in C++?
RegisterName
Verbindungoffen[telnet | SSH]
VerbindungSchaltertelnet
sendenText
VerbindungSchalterSSH
Text
... und so weiter ...
Also, offensichtlich haben wir einige Befehlsbäume, in wir haben obiges Beispiel senden:
--register
|
--connetion
| |--open
| |--switch
|
--send
Jeder Befehl kann eine unterschiedliche Anzahl von Parametern haben.
FRAGE:
- Wie solche Befehlsstruktur analysieren?
Jetzt parse ich es mit regulären Ausdrücken, aber diese Lösung ist wirklich hässlich. Ich habe über YACC und LEX gelesen, aber ich bin mir nicht sicher, ob das wirklich eine gute Idee ist.
Gibt es einen weit verbreiteten Ansatz zur Syntaxanalyse von Befehlsstrukturen? Ich bin nicht cool in der Theorie der lexikalischen Analyse, also würde ich mich freuen, wenn Sie nicht auf akademische Weise antworten.
Vorschlag: eine Zustandsmaschine verwenden, die einen (Staat, char) hat -> (Zustand, optional>) Übergangsfunktion. –
lorro