Interpreter

Martin Schroeder

Erfahrenes Mitglied
Hallo!
Ich schreibe grad einen Interpreter und wollte euch um euere Sachkenntnis fragen.
Haltet ihr es für richtig den Quellcode des zu interpretierenden Programmes erst in eine Reihe einfacher Einzelbefehle zu zerlegen oder gibt es noch andere besser Möglichkeiten?
Vielen Dank Martin.
 
Ich würde das ganze, glaube ich, in die Backus-Naur-Form zerlegen, einer lexikalischen Analyse unterziehen und dann mit einem Interpreter-Generator bearbeiten. Unter Linux wäre das z.B. LEX/YACC.
 
Wie bitte?
Was ist die Backus-Naur-Form?
Wieso lexikalische Analyse?
Was macht ein Interpreter-Generator?
Aber Danke, dass du geantwortest hast!
 
Die Backus-Naur-Form ist eine Meta-Darstellung der kontextfreien Grammatik einer Programmiersprache. Oder anders: Die BNF beschreibt den Aufbau der Sprache in einer Form, die ein lexikalischer Scanner lesen kann. Dieser Analysiert die BNF und zerlegt sie in sog. Tokens, die wiederrum von einem Interpreter-Generator verwertet werden können. Dieser erzeugt (wenn man vorher alles richtig gemacht hat) einen Parser, der die Syntax deiner Sprache lesen kann. Jetzt muss die Syntax «nur» noch verarbeitet werden. Ich glaube, wenn Dir die Begriffe nichts sagen, solltest Du zuerst noch ein bisschen Googlen... :)
 
Danke!
Ja so dachte ich mir das. So mit Zerlegung in Token und so.
Aber wozu genau ist der Interpretergenerator gut? Ich schreibe doch alles selber. :confused:
 
Das will man eigentlich nicht. Klar, man kann den Parsercode auch selber schreiben, aber das ist eine große Menge Arbeit. Kannst Du aber ruhig machen.
 
Ich schreibe den Interpreter in C++.
Aber ich würde wohl wirklich nicht so gerne einen Parsergenerator benutzen, sonst hab ich das ja nicht ganz alleine gemacht. Andererseits wäre das ja acuh mal interessant. Wo gibt es sowas denn?
 
Hi.

Übrigens gibt es auch ein Entwurfsmuster in dem Buch "Entwurfsmuster. Elemente wiederverwendbarer objektorientierter Software." der "Gang of Four" (Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides) namens "Interpreter".

Für kleinere Sachen (Kalkulator etc.) ist das Muster durchaus verwendbar. Für größere Projekte (C++ Compiler etc. ;)) wird es schnell zu unübersichtlich und langsam.

Bei :google: findest du jede Menge Referenzen (z.B. http://www.dofactory.com/Patterns/PatternInterpreter.aspx [ist allerdings für C#]) dazu. Oder du schaust mal in der nächstgelegenen Bibliothek ob die das Buch haben.
 

Neue Beiträge

Zurück