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
Mit strtok passend zerlegen und mit atoi/sscanf etc. umwandeln funktioniert nicht? U.U. Sonderzeichen, Klammern etc. vorher entfernen/umwandeln.
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
@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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.