mikrocontroller.net

Forum: Compiler & IDEs Einfacher php-artiger Parser ?


Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tach miteinander,

ich möchte mir für einen µC-Webserver (läuft bereits) einen einfachen 
Parser programmieren, der nach Tags in einer Templatedatei sucht und 
diese entsprechend interpretiert.
Hier mal einfach eine Template-Beispiel, was der Parser dann können 
sollte (Pseudocode)
<? //Leitet einen zu interpretierenden Code ein
ECHO "Kanal 1:"; //Textausgabe zum Browser
ECHO GETINPUT(1); //Schreibt den Wert von Input 1 zum Browser

IF (GETADC(5) > 100) SETOUTPUT(2); //Schaltet Ausgang 2 ein, wenn ADC 5 > 100

IF (GETPARAM("TEST") == "EIN") CLEAROUTPUT(1); //Schaltet Ausgang 1 aus, wenn in der URL der Parameter "TEST" = "EIN"
?> //Ende des zu interpretierenden Codes

Kann mir jemand "konzeptionelle Hilfestellung" geben, wie man sowas (in 
C++) realisieren kann ?

Schöne Grüße
Stefan

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan wrote:

> Kann mir jemand "konzeptionelle Hilfestellung" geben, wie man sowas (in
> C++) realisieren kann ?

Compilerbautechniken anwenden.

Im einfachsten Fall benutzt man Werkzeuge wie Lex/Yacc
oder andere CompilerCompiler um sich den Parser erzeugen
zu lassen.

Autor: Bri (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Speziell für C++ gibt es das hier:

http://boost.org/libs/spirit/index.html

Hab ich schon benutzt. Funktioniert super.

Aber Vorsicht, das ist nichts für Weicheier, die vor template meta 
programming zurückschrecken. ;-)

Autor: Stevinger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin!

Habe mal auf beide Sachen ("Lex/Yacc" und "Spirit") angesehen. Also mit 
Lex/Yacc kann ich leider überhaupt kein Land gewinnen, da steh' ich 
völlig im Wald und weiß nicht wo oben und unten ist. Mit Spirit habe ich 
ein wenig (mit dev-cpp unter win) experimentiert, und konnte wohl ein 
paar "rules" erstellen, die erfolg reich geparst wurden. Beim Einbinden 
von Funktionsobjekten happerts aber dann wieder, das geht ja in Richtung 
"Psychopaten-C++" ;-)

>Aber Vorsicht, das ist nichts für Weicheier, die vor template meta
>programming zurückschrecken. ;-)

Davor schrecke ich nicht zurück, weil ich nicht weiß was "template meta 
programming" ist :-[ (aber ich weiß inzwischen dass man davon Kopfweh 
bekommt)
Dann stellt sich schließlich noch die Frage wie groß meine Applikation 
mit so einem Monsterkoboldalien wird, es soll auf einem Beck-IPC SC12 
laufen. So vom Gefühl her ist der Apparat eher für die Abteilung PC 
gedacht ?

Stevinger

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Persönlich steh ich auf COCO
http://www.ssw.uni-linz.ac.at/Coco/

Im Gegensatz zu Lex/Yacc erzeugt COCO einen rekursiven
Abstieg (eine Parsertechnik) und ich finde die einfacher
zu debuggen als die Tabellen, die Yacc erzeugt.

Aber natürlich kann man einen rekursiven Abstieg auch
mit der Hand noch gut ausprogrammieren.

Autor: Εrnst B✶ (ernst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Noch so als Tip:

Dein µC wird warscheinlich nicht genug Speicher haben um das alles 
selbst zu machen. (Scanner, Parse-Tables, Parse-Baum im RAM halten, 
Ausführen des Parse-Baums, etc)

Ich würde (bzw werde, sobald den Mega16 in meinem Webserver duch nen 
32er ausgetauscht habe) das so machen:
Auf dem PC mit einem Mini-compiler (mit lex/flex/yacc/bison, antLR, ...) 
schreiben, der die HTML-Seite (mit den Script-Elementen) in einen 
Byte-Code umsetzt, der dann auf der µC seite in einer kleinen 
Stack-Maschine (Forth-like) ausgeführt wird.

Da gehen dann auch Funktionsdeklarationen, Rekursion, Schleifen, lokale 
Variablen etc. mit geringem Speicher/Flash verbrauch am µC.

/Ernst

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe mal flex + byacc so umgebaut, dass all ihre Tabellen im
Flash-ROM eines AVR ablegen.  Ein simpler Scanner/Parser damit
erzeugt ein ,,Grundrauschen'' von so um die 20 KiB an Code (und
nicht mehr allzu viel an RAM).  Mit einem einigermaßen aufgebohrten
BASIC-Interpreter, den ich dann zum Spaß mal damit geschrieben habe,
waren es so ca. 30 KiB an ROM (da war dann schon Gleitkommaarithmetik
mit dabei).

Also wenn man eine eher komplexe Grammatik umsetzen will und einen
nicht ganz kleinen Controller dafür zur Verfügung hat, ist das schon
im machbaren Bereich.

Coco müsste man sich mal angucken.  Rekursiven Abstieg habe ich noch
irgendwo im Ohr aus Zeiten, da ich mich mal ein wenig mit den
Grundlagen des Compilerbaus befasst habe.  Nicht jede Grammatik taugt
dafür, meiner Erinnerung nach kann man damit z. B. kein C
implementieren aber Pascal.

Autor: Kai Scheddin (zeusosc)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hier findest du etwas über einen
>php parser generator
http://greg.chiaraquartet.net/archives/137-a-parse...

grüüüüße

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.