Forum: Mikrocontroller und Digitale Elektronik Parser für Strings in C gesucht


von Mike R. (thesealion)


Lesenswert?

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

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?


von Arc N. (arc)


Lesenswert?

Mit strtok passend zerlegen und mit atoi/sscanf etc. umwandeln 
funktioniert nicht?
U.U. Sonderzeichen, Klammern etc. vorher entfernen/umwandeln.

von phlo (Gast)


Lesenswert?

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

von Mike R. (thesealion)


Lesenswert?

@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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.