Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Eigene Scriptsprache
preli
myCSharp.de - Member

Avatar #avatar-2343.png


Dabei seit:
Beiträge: 345
Herkunft: Österreich

Themenstarter:

Eigene Scriptsprache

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
marco.b
myCSharp.de - Member



Dabei seit:
Beiträge: 310

beantworten | zitieren | melden

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!
private Nachricht | Beiträge des Benutzers
preli
myCSharp.de - Member

Avatar #avatar-2343.png


Dabei seit:
Beiträge: 345
Herkunft: Österreich

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
pearsh
myCSharp.de - Member

Avatar #avatar-3492.png


Dabei seit:
Beiträge: 212

Respekt

beantworten | zitieren | melden

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

P.S.: Respekt!!!!!!!!!!!!!!!!!!!
lg Jo0oker
private Nachricht | Beiträge des Benutzers
feadur
myCSharp.de - Member



Dabei seit:
Beiträge: 726
Herkunft: Bonn

beantworten | zitieren | melden

habe es zwar nicht ausprobiert, die scripts sehen aber nett aus.
wie hast du den interpreter bzw. den parser erstellt? gruß
private Nachricht | Beiträge des Benutzers
preli
myCSharp.de - Member

Avatar #avatar-2343.png


Dabei seit:
Beiträge: 345
Herkunft: Österreich

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
marco.b
myCSharp.de - Member



Dabei seit:
Beiträge: 310

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
feadur
myCSharp.de - Member



Dabei seit:
Beiträge: 726
Herkunft: Bonn

beantworten | zitieren | melden

Zitat
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.
private Nachricht | Beiträge des Benutzers
preli
myCSharp.de - Member

Avatar #avatar-2343.png


Dabei seit:
Beiträge: 345
Herkunft: Österreich

Themenstarter:

beantworten | zitieren | melden

Zitat
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.
Zitat
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
private Nachricht | Beiträge des Benutzers
preli
myCSharp.de - Member

Avatar #avatar-2343.png


Dabei seit:
Beiträge: 345
Herkunft: Österreich

Themenstarter:

Einbetten in .net Projekte

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Richter
myCSharp.de - Member



Dabei seit:
Beiträge: 105
Herkunft: Chemnitz

beantworten | zitieren | melden

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!
private Nachricht | Beiträge des Benutzers
preli
myCSharp.de - Member

Avatar #avatar-2343.png


Dabei seit:
Beiträge: 345
Herkunft: Österreich

Themenstarter:

beantworten | zitieren | melden

Zitat
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 :D

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
private Nachricht | Beiträge des Benutzers
purestrain
myCSharp.de - Member

Avatar #avatar-1973.png


Dabei seit:
Beiträge: 89

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
preli
myCSharp.de - Member

Avatar #avatar-2343.png


Dabei seit:
Beiträge: 345
Herkunft: Österreich

Themenstarter:

beantworten | zitieren | melden

Zitat
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
private Nachricht | Beiträge des Benutzers
pearsh
myCSharp.de - Member

Avatar #avatar-3492.png


Dabei seit:
Beiträge: 212

beantworten | zitieren | melden

Wenn ich das jetzt einbinde, was habe dann davon?
Also wozu soll ich das denn verwenden?
lg Jo0oker
private Nachricht | Beiträge des Benutzers
Robertico
myCSharp.de - Member



Dabei seit:
Beiträge: 345

beantworten | zitieren | melden

Hallo Jo0oker,
Zitat
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
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Robertico am .
private Nachricht | Beiträge des Benutzers
pearsh
myCSharp.de - Member

Avatar #avatar-3492.png


Dabei seit:
Beiträge: 212

beantworten | zitieren | melden

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


lg Jo0oker
private Nachricht | Beiträge des Benutzers
preli
myCSharp.de - Member

Avatar #avatar-2343.png


Dabei seit:
Beiträge: 345
Herkunft: Österreich

Themenstarter:

beantworten | zitieren | melden

Zitat
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
private Nachricht | Beiträge des Benutzers
pearsh
myCSharp.de - Member

Avatar #avatar-3492.png


Dabei seit:
Beiträge: 212

beantworten | zitieren | melden

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
Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von pearsh am .
private Nachricht | Beiträge des Benutzers
preli
myCSharp.de - Member

Avatar #avatar-2343.png


Dabei seit:
Beiträge: 345
Herkunft: Österreich

Themenstarter:

beantworten | zitieren | melden


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
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von preli am .
private Nachricht | Beiträge des Benutzers
preli
myCSharp.de - Member

Avatar #avatar-2343.png


Dabei seit:
Beiträge: 345
Herkunft: Österreich

Themenstarter:

beantworten | zitieren | melden

Zitat
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
private Nachricht | Beiträge des Benutzers
pearsh
myCSharp.de - Member

Avatar #avatar-3492.png


Dabei seit:
Beiträge: 212

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
preli
myCSharp.de - Member

Avatar #avatar-2343.png


Dabei seit:
Beiträge: 345
Herkunft: Österreich

Themenstarter:

beantworten | zitieren | melden

Ja, das sollte funktionieren.
private Nachricht | Beiträge des Benutzers
pearsh
myCSharp.de - Member

Avatar #avatar-3492.png


Dabei seit:
Beiträge: 212

beantworten | zitieren | melden

Durch deine Coku steige ich iirwie nicht durch.

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


lg Jo0oker
private Nachricht | Beiträge des Benutzers
preli
myCSharp.de - Member

Avatar #avatar-2343.png


Dabei seit:
Beiträge: 345
Herkunft: Österreich

Themenstarter:

beantworten | zitieren | melden

Zitat
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
private Nachricht | Beiträge des Benutzers