Laden...

Eigene Scriptsprache

Erstellt von preli vor 16 Jahren Letzter Beitrag vor 16 Jahren 9.083 Views
preli Themenstarter:in
343 Beiträge seit 2007
vor 16 Jahren
Eigene Scriptsprache

Hallo.
Habe jetzt meine eigene Scriptsprache entwickelt und sie vorübergehend mal ScritpingV1 benannt.
Vielleicht möchte ja mal jemand auf meiner Homepage www.Saftware.net vorbeischauen und es sich ansehen. Das Package mit Scriptinterpreter und Beispielen gibt es unter dem Menüpunkt "Source".
Würde mich wirklich interessieren was ihr davon haltet.

Wenn ihr Interesse habt könnt ihr ja auch im Forum vorbeischauen. (Keine Angst, ich will diesem Forum keine Konkurrenz machen, da hätte mein Mini-Forum ohnehin überhaupt keine Chance) Ich hab da grad Diskussionen über ein neues Projekt am laufen.

Mfg Preli

[- www.saftware.net -](http://www.saftware.net/)
M
303 Beiträge seit 2006
vor 16 Jahren

Ist deine Scriptsprache einbettbar in eigene Projekte? Das wäre meiner Meinung nach der einzige Sinn, für eine neue Scriptsprache. Ansonsten wirkt die Sprache eher wie eine Lösung auf der Suche nach einem Problem 😉

Dennoch ist es natürlich für den Programmierer eine schöne Übung, eine eigene Scriptsprache zu implementieren. Ich habe mal einen Maschinensprachencompiler geschrieben für eine eigene Programmiersprache, und weiß deshalb wie viel Arbeit sowas ist. Also: Respekt! 👍

preli Themenstarter:in
343 Beiträge seit 2007
vor 16 Jahren

Einbetten ist möglich, jedoch nicht in der jetzigen Version, da ich da noch am Testen bin, ist aber schon geplant.

Man kann die Scriptsprachenbibliothek in jedes .Net Projekt einbinden und dann auch ganz einfach um eigene Klassen und Funktionen erweitern.

Mfg Preli

[- www.saftware.net -](http://www.saftware.net/)
209 Beiträge seit 2007
vor 16 Jahren
Respekt

Sowas würde mich auch mal interresieren, hast du ein bestimmtes Tutorial was du mit geben könntest?

P.S.: Respekt!!!!!!!!!!!!!!!!!!!
lg Jo0oker

F
722 Beiträge seit 2005
vor 16 Jahren

habe es zwar nicht ausprobiert, die scripts sehen aber nett aus.
wie hast du den interpreter bzw. den parser erstellt? gruß

preli Themenstarter:in
343 Beiträge seit 2007
vor 16 Jahren

Also Tutorial hab ich leider keines, da muss ich euch enttäuschen. Obwohl es sehr viel Literatur über die Erstellung von Compilern und Interpretern gibt (soweit ich weiß).

Ich bin eher zufällig auf die Idee gekommen so etwas zu programmmieren, als ich mich mit dem Thema Reflection befasst habe. (Spielt nämlich eine zentrale Rolle bei meiner Scriptsprache)

Würde die Sprache gern um Klassen und Funktionen erweitern. Vielleicht hat ja jemand Lust mitzumachen.

Mfg Preli

[- www.saftware.net -](http://www.saftware.net/)
M
303 Beiträge seit 2006
vor 16 Jahren

Wenn die Sprache einbettbar ist, wird das Projekt sicherlich ganz interessant. Auf dem Sektor gibt es ja für .NET scheinbar noch nicht allzuviel Produkte.

Wer lernen will, einfache Compiler zu erstellen sollte mal nach den Compilertutorials von Crenshaw googeln. Die kommen zwar nicht an das heran, was Compilerbaubücher vermitteln, aber man erlebt einen schnellen praktischen Erfolg und kann in die Materie sanft eintauchen 😉

F
722 Beiträge seit 2005
vor 16 Jahren

Original von preli
Ich bin eher zufällig auf die Idee gekommen so etwas zu programmmieren, als ich mich mit dem Thema Reflection befasst habe. (Spielt nämlich eine zentrale Rolle bei meiner Scriptsprache)

Emulierst du die Programme, indem du per Reflection Objekte erzeugst, oder führst du direkt IL Code per Reflection.Emit aus? Letzteres fände ich sehr spannend. Damit könnte man sich eine eigene Stack-Maschine vorstellen, die auf der CLR aufsetzt. Letztlich muss man auch überlegen inwieweit eine Scriptsprache in .NET überhaupt sinnvoll ist, da man ja auch C# code zur Laufzeit ausführen kann.

preli Themenstarter:in
343 Beiträge seit 2007
vor 16 Jahren

Emulierst du die Programme, indem du per Reflection Objekte erzeugst, oder führst du direkt IL Code per Reflection.Emit aus?

Weder noch. Ich habe verschiedene Klassen programmiert, die den Klassen in meiner Scriptsprache entsprechen. Wenn nun in meiner Scriptsprache eine Funktion eines Objektes dieser Klasse aufgerufen wird "holt" sich der Interpreter diese Funktion mittels Reflection und führt sie aus.

Letztlich muss man auch überlegen inwieweit eine Scriptsprache in .NET überhaupt sinnvoll ist, da man ja auch C# code zur Laufzeit ausführen kann.

Nun das ist schon etwas anderes: C# ist eine Programmiersprache und hat ganz anderer Eigenschaften als Scriptsprachen.
Scriptsprachen machen meist interne Typumwandlungen, Variablen müssen nicht explizit deklariert werden, ...

Mfg Preli

[- www.saftware.net -](http://www.saftware.net/)
preli Themenstarter:in
343 Beiträge seit 2007
vor 16 Jahren
Einbetten in .net Projekte

Nun ist es soweit, die Scriptsprache kann nun auch in .Net Projekte eingebunden und benutzt werden. (dll ganz einfach als Referenz hinzfügen)

Link zur Seite und Downloadmöglichkeit ist hier: ScriptingV1 .Net

Die Sprache kann auch sehr leicht um weitere Klassen und Funktionen erweitert werden. (siehe Beispielprojekt Nummer2)

Mfg Preli

[- www.saftware.net -](http://www.saftware.net/)
R
104 Beiträge seit 2006
vor 16 Jahren

Uh, das ist Richtig Cool.
Bau unbedingt ein, dass man eigene Funktionen in deiner Scriptsprache erstellen kann. Dann könnte ich es Wunderbar in einem Projek von mir einsätzen, damit jeder damit eine eigene KI für das Spiel schreiben kann. Mach ja weiter 😁

Nevu - Intelligente Maschinen, die Zukunft alles rund um das Thema Künstliche Intelligenz!

preli Themenstarter:in
343 Beiträge seit 2007
vor 16 Jahren

Original von Richter
Uh, das ist Richtig Cool.
Bau unbedingt ein, dass man eigene Funktionen in deiner Scriptsprache erstellen kann. Dann könnte ich es Wunderbar in einem Projek von mir einsätzen, damit jeder damit eine eigene KI für das Spiel schreiben kann. Mach ja weiter 😄

So viel Begeisterung hätte ich gar nicht erwartet, ich hoffe das ist ernst gemeint und nicht sarkastisch. X(

Also eigene Funktionen kann man bereits einbauen. Wenn du die Skriptsprache in einem deiner .Net Projekte einbauen möchtest kannst du dort die Spache um Klassen und Funktionen erweitern

ODER

Wenn du die Skriptsprache direkt benutzen möchtest kannst du auch eigene Funktionen schreiben. Mehr dazu steht auf der Dokumentationsseite ganz unten unter dem Kapitel "Importieren und eigene Funktionen" --> http://www.saftware.net/scriptingv1_doc.php

Mfg Preli

[- www.saftware.net -](http://www.saftware.net/)
89 Beiträge seit 2006
vor 16 Jahren

Hallo,

Euch ist aber klar, das es schon zig Skriptsprachen gibt, und viele in .NET eingebunden werden koennen? Und die vergleiche (Programmiersprache variablendeklaration/typdefinition, Scriptsprache nicht etc.) sind m.E. wirklich nicht angebracht.

Gruss
purestrain

preli Themenstarter:in
343 Beiträge seit 2007
vor 16 Jahren

Euch ist aber klar, das es schon zig Skriptsprachen gibt, und viele in .NET eingebunden werden koennen

Also mir für meinen Teil ist das klar. 😁

Aber diese Skriptsprachen sind alle nicht von MIR programmiert worden. Ich behaupte auch gar nicht, dass meine Sprache jetzt soooo toll ist, aber ich bin trotzdem (zumindest ein wenig) stolz auf mich selbst, da es ja doch keine leichte Übung ist.
Und nun wollte ich meine Freude mit jemand teilen, sprich den Mitgliedern dieses Forums. 😉

Mfg Preli

[- www.saftware.net -](http://www.saftware.net/)
209 Beiträge seit 2007
vor 16 Jahren

Wenn ich das jetzt einbinde, was habe dann davon?
Also wozu soll ich das denn verwenden?
lg Jo0oker

R
344 Beiträge seit 2006
vor 16 Jahren

Hallo Jo0oker,

Original von Jo0oker
Wenn ich das jetzt einbinde, was habe dann davon?
Also wozu soll ich das denn verwenden?

Wenn es keinen Sinn machte gäbe es solche Scriptsprachen nicht.

Die Scriptsprache, die ich recht gut kenne ist LUA. Eine einfache aber mächtige Sprache, bei der auch Laien etwas zustande bringen.

Sie wird oft in Spielen genutzt, damit der User die Möglichkeit hat ins Spiel einzugreifen, oder es komplett zu gestalten. Viele haben Freude daran.

Dieses Wiki ist sehr komplex und behandelt LUA für das Spiel Siedler V. Dadurch sind viele in der Lage eigene Maps zu machen, was ohne Scriptsprache nicht möglich wäre.

Und es gibt sicher auch viele andere sinnvolle Einsatzmöglichkeiten für Scriptsprachen.

Gruß Robert

209 Beiträge seit 2007
vor 16 Jahren

Wozu ´sind die Example gedacht, und was können die?

lg Jo0oker

preli Themenstarter:in
343 Beiträge seit 2007
vor 16 Jahren

Original von Jo0oker
Wozu ´sind die Example gedacht, und was können die?

lg Jo0oker

Welche example meinst du jetzt? Gehts um LUA?

Mfg Preli

[- www.saftware.net -](http://www.saftware.net/)
209 Beiträge seit 2007
vor 16 Jahren

Hallo ich habe das Prinzip jetzt verstanden.
Nur, kannst du mir sagen was an dem Code falsch ist?


addPackage("math");
dim("i","integer");
i=1;
while(i=>30)
{
i=i+1;
}
showMessage("Runden: "+i);



Und wie kann ich die Sprache um Klassen erweitern?

Wenn ich eine Datei importiere, muss ich da noch mehr in dem script einegeben als:
import("hallo.scri"); ?
Ich bekomme immer eine fehlermeldung.

lg Jo0oker

preli Themenstarter:in
343 Beiträge seit 2007
vor 16 Jahren

i=1;
while(i=>30)
{
i=i+1;
}

Erstens musst du ≥ schreiben und nicht =>.
Zweitens: In die Schleife kommt er gar nie rein, da i zu Beginn eins ist und deshalb i nicht größer oder gleich 30 ist. Wie wärs mit ≤ 30
Drittens: Bei mir fagen die while-Schleifen immer mit do an:


i=1;
do(i<=30)
{
i=i+1;
}

Bei import musst du eigentlich nur darauf achten, dass die Datei auch vorhanden ist. Wie schaut denn die Fehlermeldung aus.
Kleiner Tipp von mir: such mal nach der Datei "error.log" In den meisten Fällen wird sie neben der Scriptdatei oder dem Interpreter erstellt und beinhaltet mehr Fehlerdetails.

Mfg preli

[- www.saftware.net -](http://www.saftware.net/)
preli Themenstarter:in
343 Beiträge seit 2007
vor 16 Jahren

Original von Jo0oker
Wenn ich eine Datei importiere, muss ich da noch mehr in dem script einegeben als:
import("hallo.scri"); ?
Ich bekomme immer eine fehlermeldung.

Ich denke ich weiß warum es bei dir nicht funktioniert. Es kommt immer darauf an, wie du das Script öffnest. Du solltest einstellen, dass alle *.scri Dateien standardmäßig mit dem Programm ScriptingV1.exe geöffnet werden. Dann klappt es. Wenn du die ScriptDatei zum Beispiel öffnest, indem du sie auf die exe-Datei ziehst sind ein paar Parameter falsch und alle Funktionen die sich auf Dateien beziehen (so auch import) funktionieren nicht richtig. Dieses kleine Problem wird in der nächsten Version ausgebessert.

Mfg Preli

[- www.saftware.net -](http://www.saftware.net/)
209 Beiträge seit 2007
vor 16 Jahren

Aslo, ich programmiere eine Art "kleines Studio", und die Hauptdatei besteht nur aus Import´s.

Wenn ich jetzt auf Start(in meinem Programm) drücke wird volgendes Event aufgerufen:


Script impo = new Script();
impo.loadscript("..........");

Das habe ich jetzt aus dem Kopf gemacht.
Also, wenn man das Programm startet, wird nur das Script geladen, wo alle import´s drin sind.

import.scri :


import("hallo.scri");

hallo.scri :


showMessage("Hallo");

so soll das dann Funktionieren.

Dann kommt noch eine Art TreeView mit alles Datei hinzu.
Aber das müsste doch so funktionieren. 🙁 🙁 🙁
lg Jo0oker

preli Themenstarter:in
343 Beiträge seit 2007
vor 16 Jahren

Ja, das sollte funktionieren.

[- www.saftware.net -](http://www.saftware.net/)
209 Beiträge seit 2007
vor 16 Jahren

Durch deine Coku steige ich iirwie nicht durch.

Kannnst du mir deshalb sagen, wie ich Parameter an das Script weitergeben kann?

lg Jo0oker

preli Themenstarter:in
343 Beiträge seit 2007
vor 16 Jahren

Original von Jo0oker
Kannnst du mir deshalb sagen, wie ich Parameter an das Script weitergeben kann?

Das ist eigentlich ganz einfach. Wenn du Parameter an ein Script übergeben möchtest, musst du eigentlich nur die entsprechende Variable erstellen und in die Variablenliste des Scriptes hinzufügen. Danach kannst du die Variable benutzen, als ob sie im Script selbst erstellt wurde.


//neues Scripterobjekt erstellen
Scripter sc = new Scripter();
//Variable erstellen, die an das Script übergeben wird
Variable v = new Variable("Hallo", VarType.String);
v.Name = "s";
//Variable in varlist des Scripters einfügen
sc.varlist.addVariable(v);

Im Script kann die Variable dann über den Namen s angesprochen werden.

Mfg Preli

[- www.saftware.net -](http://www.saftware.net/)