PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : "Compiler" in C und Delphi programmieren


Einfachkrank
2003-09-10, 19:23:55
Hi,

ist es möglich, dass ich ein Programm erstelle, welches dann ein weiteres Programm erstellen können soll?

Angenommen, man wöllte sich einen Editor für simple Text-Adventure schreiben, der nach erstellen einer Story, daraus ein lauffähiges Programm erstellt.

Wie kann ich so was in C/C++ und Delphi bzw. Pascal umsetzen?

MFG Einfachkrank

Xmas
2003-09-10, 20:07:58
Das ist selbstverständlich möglich, aber du musst schon genauere Angaben machen, wenn du einen konkreten Vorschlag haben willst.

Bei dem Beispiel mit dem Text-Adventure ist es am sinnvollsten, eine "Text-Adventure-Engine" zu schreiben und diese mit unterschiedlichen Daten zu füttern, statt aus gegebenen Daten immer ein neues Programm zu erzeugen.

Gast
2003-09-11, 12:25:18
Da geb ich XMas mal recht :D

Selbst das gute alte Scummsystem ist nur eine Skriptsprache soweit ich mich da erinnere :)

Einfachkrank
2003-09-11, 13:36:46
Ich habe nicht direkt vor, ein solches Programm zu schreiben, aber es interessiert mich sehr, für eventuelle spätere Projekte. Bleiben wir doch bei dem Beispiel, mit dem Text-Adventure Editor.

Angenommen, man will einen Editor erstellen, welcher dem Benutzer es ermöglichen soll, die Geschichte in einem Baum zu packen, dass je nach Situation die Geschichte verschieden weitergeht. Dazu soll man Bilder laden können, die zu Situationen angezeigt werden sollen. Jetzt soll aber kein zweites Programm vorhanden sein, dass die erstellten Spieldateien lesen kann. Sondern die erstellen Adventures sollen gleich ausführbar sein. Eine Engine zu schreiben mit der man verschiedene Spieldateien spielen kann, wäre zwar einfach und handlich, aber ich interessiere mich gerade dafür, wie ich eben ein Programm schreiben kann, dass in der Lage ist, weitere lauffähige Programme zu erstellen.

Dass ich dies in Delphi und in C/C++ umsetzen können möchte, liegt eigentlich nur daran, dass ich privat C/C++ verwende und in der Schule eben Delphi.

Demirug
2003-09-11, 13:47:45
Klar geht sowas. Der C++ Compiler von MS ist in C++ programmiert. Ist aber ein tierischer Aufwand.

ScottManDeath
2003-09-11, 15:33:36
du könntest aber alle daten(szeneninfo, bilder, dialoge) mit dem editor erstellen und dann als eine grosse datei speichern. das lauffähige programm enthält diese datei dann als (binär)ressource, lädt sie aus der exe datei und interpretiert sie dann

Einfachkrank
2003-09-11, 17:11:24
Original geschrieben von Demirug
Klar geht sowas. Der C++ Compiler von MS ist in C++ programmiert. Ist aber ein tierischer Aufwand.
Gibt´s dafür bestimmte Befehlssätze in C++ ? Oder ist ne Bibliothek für so was vorhanden, die das im einfachen Stil ermöglicht?

Kann vielleicht jemand, hier den Quelltext für ein Programm posten, dass bei seiner Ausführung ein Programm erstellt, dass hallo sagt :) ?
Das wäre für den Anfang schon genug...

Xmas
2003-09-11, 19:29:02
Original geschrieben von Einfachkrank
Gibt´s dafür bestimmte Befehlssätze in C++ ? Oder ist ne Bibliothek für so was vorhanden, die das im einfachen Stil ermöglicht?
Wenn du mit ausführbaren Programmen eigenständige Win32 Exe-Dateien meinst, nein. Es gibt zwar Bibliotheken zur lexikalischen Analyse von Quelltexten, sprich Scanner und Parser, aber die Codegenerierung ist ein sehr komplexes Thema und erfordert tiefgehende Kenntnisse der Hard- und Software, wenn mehr als ein paar Byte COM-Programm herauskommen soll.

Wenn du allerdings ein Programm in C#, Java, VB.net, Python und anderen Sprachen schreibst, kannst du damit problemlos weitere Programme erzeugen. Der Preis dafür ist allerdings, dass diese einen Interpreter/ein Runtime Environment benötigen.

Kann vielleicht jemand, hier den Quelltext für ein Programm posten, dass bei seiner Ausführung ein Programm erstellt, dass hallo sagt :) ?
Das wäre für den Anfang schon genug...
Schau dir doch mal den GCC-Sourcecode an ;)

zeckensack
2003-09-11, 19:39:45
Für die ganz wagemutigen: Softwire (http://softwire.sourceforge.net/) - ein Runtime-Compiler für x86-Assembler :naughty:

traexx
2003-09-11, 19:57:49
Original geschrieben von zeckensack
Für die ganz wagemutigen: Softwire (http://softwire.sourceforge.net/) - ein Runtime-Compiler für x86-Assembler :naughty:

wow... o.O *gleichdownloadenmuss*

aber das du damit die Leute verleitest, dumme Fragen zu stellen, warum ihr rechner dauernd abstürzt ist dir schon klar :D

@EinfachKrank: Wenn du Ressourcen verwenden willst, die nicht irgendwelche Standartsachen sind (das bedeutet in 99% aller Fälle), musst du eigene Loader etc... schreiben, da kommst du nicht drum herum :( (was auch besser so ist, da die meisten Sachen die es Open Source gibt, nie ideal sind und gerade bei den Spielweltdaten für ein Programm, diese so gut wie möglich für dieses Programm zugeschnitten sein sollten -> selber programmieren schützt vor hässlichen Überraschungen)

Demirug
2003-09-11, 20:32:14
Original geschrieben von zeckensack
Für die ganz wagemutigen: Softwire (http://softwire.sourceforge.net/) - ein Runtime-Compiler für x86-Assembler :naughty:

Ja, Reflection.Emit ist fast genauso schlimm.

zeckensack
2003-09-11, 20:48:00
Wieso schlimm???
Man sollte natürlich wissen was man da macht, bevor man zu solch extremen Maßnahmen greift, aber schlimm ist's IMO kaum ;)
Außerdem schreibt man immerhin in einer Programmiersprache, wenn auch sehr low-levelig, und kann durch Syntax-Checks die gröbsten Unfälle verhindern. Für Stream-Kernels ist das eine feine Sache. Da kann man die Schleifenkopf-Validierung sogar seperat machen, und spart sich dadurch einigen Ärger :)

Demirug
2003-09-11, 20:55:06
Original geschrieben von zeckensack
Wieso schlimm???
Man sollte natürlich wissen was man da macht, bevor man zu solch extremen Maßnahmen greift, aber schlimm ist's IMO kaum ;)
Außerdem schreibt man immerhin in einer Programmiersprache, wenn auch sehr low-levelig, und kann durch Syntax-Checks die gröbsten Unfälle verhindern. Für Stream-Kernels ist das eine feine Sache. Da kann man die Schleifenkopf-Validierung sogar seperat machen, und spart sich dadurch einigen Ärger :)

:D

Schlimm = Wahnsinnige = Irre = Krank im Kopf.

Ich habe hier einiges an Code rumliegen der mit Reflection.Emit arbeitet ich gehöre also auch zu den Wahnsinnigen.