Philipp Hasenfratz: EBNF Parser

Beitrag lesen

Halihallo Michael

Du möchtest eine Skriptsprache entwerfen. Die Definition dieser Sprache liegt in EBNF vor. Und Du brauchst ein Tool was die EBNF-Definitionen einlesen und zum parsen verwenden kann?

Du hast richtig verstanden :-)

Ein solches Tool ist mir zumindst für Perl nicht bekannt. Was Du gebrauchen könntest wäre Yacc. Das ist ein Tool was aus einer Sprachdefinition ein Parser generiert. Diesen Parser kannst Du dann verwenden, um darauf Dein Interpreter aufzubauen. Ein Parser macht ja erstmal nix anderes als ein Datenstrom in eine passende "verarbeitbare" Repräsentation des ganzem im Computer zu erstellen.

Klar. Genau das möchte ich eigentlich. Der EBNF-Parser soll mir den Sourcecode des Scriptes in einer "computer-freundliche" - Struktur umwandeln (z. B. XML oder eine verschachtelte objektorientierte Struktur; oder eben einen Source generieren, der mit dem perl/C Interpreter/Compiler ausgeführt werden kann).

Wie Du das dann interpretierst ist Deine Sache und muss auch von Dir programmiert werden. Da läßt sich nicht viel automatisieren.

Wenn's anders wäre, müsste ich ja keinen EBNF-Parser haben :-)

Was Du mit dem Perl willst, hab ich noch nicht ganz verstanden. Ich denke Du willst Perl Benutzen und darin den Parser/Interpreter zu schreiben. Dann würde Yacc schon fast wieder herausfallen weil dieser C-Code erzeugt.

Ein Parser soll mir ein Script in ein "einfaches, leicht zu verarbeitendes" Datenschema abbilden, welches ich dann mit Perl einlesen kann und verarbeiten kann. z. B.

program bla;

procedure hello_world {
   print "good news, the parser works"
}

soll in folgenden Datentyp abgebildet werden:

Data::Dumper
------------
$VAR1 = {
   program => {
      name => 'bla'
      procedure => {
         name => 'hello_world',
         code => {
            print => 'good news, the parser works'
         }
      }
   }
}

oder so ähnlich...

Erwähnenswert sind in diesem Zusammen noch Lex (lexikalische analyse) und Bison.

Vielen Dank für die beiden Tipps (Lex und Yacc), ich werde mir die Programme mal ansehen. Auch wenn sie für mein "Problem" vielleicht nicht taugen sollten, werden sie mir wahrscheinlich trotzdem irgendwie helfen (z. B. um einen eigenen, einfachen Parser zu schreiben, welcher speziell für die Script-Syntax geschaffen ist).

Vielen Dank für deine Hilfe

Philipp