Einfacher php-artiger Parser ?

Gast #558231
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)
1
<? //Leitet einen zu interpretierenden Code ein
2
ECHO "Kanal 1:"; //Textausgabe zum Browser
3
ECHO GETINPUT(1); //Schreibt den Wert von Input 1 zum Browser
4

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

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

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

Schöne Grüße
Stefan
Gast #559991
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
#560206
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
Moderator Persönliche Seite #560679
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.

Antwort schreiben

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.

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.