Parser für Strings in C gesucht

OP #668654
Moin,

ich suche einen Parser in C, mit dem ich einen String der Form:

< get="L" dat="1" id="42" />

in die einzelnen enthalten Tokens zerlegen kann. Insgesamt gibt es 9 
verschiedene Token, die unterschieden werden müssen.

Hat jemand so etwas "fertig" liegen oder kann mir ein einfache Gerüst 
zur verfügung stellen? Wenn nicht müßte ich mich wieder in meine alten 
Unterlagen zum Compilerbau einarbeiten und das wollte ich, wenn es geht, 
vermeiden

Mike
Gast
Auf welcher Plattform soll das laufen? Auf einem normalen PC würde ich 
einfach einen der gängigen OpenSource-XML-Parser nehmen, da deine 
Sprache ja stark an einen XML-Dialekt angelehnt zu sein scheint. Da 
gibts auch recht leichtgewichtige Lösungen auch in C (tinyXML).

Wenn es aber (davon gehe ich aus) hier um ein Programm auf einem µC 
geht, dann würde ich fast dazu raten, keinen kompletten Zerlegungsparser 
zu bauen, sondern mit einfachen Stringoperationen zu arbeiten, wie z.B. 
in einem ersten Schritt den String durch die Leerzeichen zu zerlegen, 
dann die Tokens analysieren (Name und Wert) und so fort...Ein richtiger 
TopDown-Parser wäre hier denke ich ziemlich oversized und braucht auch 
ordentlich Speicher, Power und hat große Sourcen.

Hast du denn eine formale Definition der Sprache? Ich mag das ja sonst 
nicht so sehr (Experimentieren macht mehr Spaß :-) ) aber hier kann es 
doch ganz hilfreich sein...

Grüße,
phlo
OP
@phlo: Du gehst von richtigen aus, das ganze soll ein Parser für RS232 
Kommandos werden, wobei die Syntax stark an XML angeleht sein soll. Und 
das ganze soll/muß auf einem µC laufen.

Ein kompletter TopDown Parser braucht es auf jeden fall nicht werden. 
Ich habe nur die folgenden Schlüsselwerte, die im String vorkommen 
können:

"get", "set", "dat", "id", "cmd", "val", "att", "res", "sys"

Jeder dieser Schlüsselwerte kann einen Parameter ( set="L" ) haben, 
wobei die Länge des Parameters variabel sein kann. Die Position des 
Schlüsselwortes im Gesamtstring spielt keine Rolle.
Die einfache Zerlegung und dann folgende Analyse kahm mir zwar auch 
schon in den Sinn, ich weiß nur nicht, ob das von der Geschwindikeit und 
dem Aufwand das schnellste ist.

Deshalb habe ich hier erst einmal nachgefragt, da ich einfach davon 
ausgehe, daß viele von euch schon vor dem Problem gestanden haben ihrem 
Conrtoller vom PC aus Befehle zu senden.

Ich werde mir den Link / die Vorschhläge mal ansehen.

Natürlich bin ich weiter dankbar für Lösungsstrategien / Ansätze.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.