mikrocontroller.net

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


Autor: Mike R. (thesealion)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Arc Net (arc)
Datum:

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

Autor: phlo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Mike R. (thesealion)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.