Seite 1 von 3

ForgeScript

Verfasst: 12.04.2008 15:00
von X0r
Hallo Community, endlich wieder da!

Während meiner Zeit ohne Zugang zum Internet hatte ich an einer (noch) kleinen ScriptEngine gearbeitet: ForgeScript.

Sie ist noch im Betastadium und kann noch nicht so viel.

Hier erstmal die bisherigen Features:
- Variablen(Long, Float, String) und Konstanten
- If-Entscheidung(Noch ohne "Multiple-IF"-Unterstützung)
-For-Next- und While-Schleife
- Kommentare

Beispiel:

Code: Alles auswählen

decl a;
decl b;
declstr stra;


for($b=1;$b<20;$b++){

debug($b);

}

while($a<20){
$a++;
$stra="A="+$a+"";
debug($stra);
}

Sie ist extrem einfach zu bedienen, nur 3 Befehle:

Code: Alles auswählen


Procedure Debugex(title.s)
Debug title
EndProcedure



If OpenLibrary(0,"forgescript.dll")

CallFunction(0,"FS_DecFile","myscript.txt")

CallFunction(0,"FS_SetCommand",@Debugex(),1,"Debug")

CallFunction(0,"FS_Execute")
CloseLibrary(0)
EndIf
Erklärung für FS_SetCommand-Befehl:
1. Parameter: Funktionsadresse
2. Parameter: Anzahl der Funktionsparameter
3. Parameter: Name der Funktion im Script

Die restlichen Funktionen sollten selbsterklärend sein.

Download: http://members.forgesoft.net/Soner/FScript.zip

Viel Spaß!

Verfasst: 12.04.2008 18:31
von coder
Sieht gut aus! :allright:

Kleiner Verbesserungsvorschlage: Mach es möglich, das man auch Strings als Scripte einlesen kann, nicht nur Datein.
Es wäre noch 'ne Doku wünschenswert aber das kann man ja auch verschieben :lol:

Ansonsten: Weite so!

Verfasst: 13.04.2008 00:40
von STARGÅTE
na mal sehn was draus wird, ich habe ja meine leider nicht mehr weiter ausgebaut, weil ich einfach anderes machen wollte.

Frage: Warum ist die Scriptsprache selber nicht auch PB-Syntax ?, weil sie nicht nur für PB ist ?

Verfasst: 13.04.2008 00:46
von X0r
>Warum ist die Scriptsprache selber nicht auch PB-Syntax ?, weil sie nicht nur für PB ist ?

So ist es.

Verfasst: 13.04.2008 01:15
von NicTheQuick
@Xor:
Parst du das Skript in Echtzeit oder konvertierst du es erst in eine
Baumstruktur, die du dann ausführst? Mit einer Baumstruktur wäre es ja
schneller.

Ich hab's noch nicht getestet, weil ich gerade Linux nutze, aber interessieren
würde es mich trotzdem.

Verfasst: 13.04.2008 01:29
von X0r
Echtzeit.

Verfasst: 16.04.2008 17:38
von Hroudtwolf
Servus,

Dein Interpreter funktioniert leider noch nicht richtig.
Einfache Matheops führt er nicht durch.

Code: Alles auswählen

decl var;
$var=2;
$var=$var+3;
Debug($var);
Das ist eigentlich etwas das zuerst bei einem Interpreter programmiert wird.

Das hier führt in einer Endlosschleife:

Code: Alles auswählen

decl var;

$var=2;

for($var=1;$var<20;$var++){
    Debug($var)

}

Debug($var)
Fehlermeldungen oder eine Fehlerqueue kennt das Ding leider auch keine.
Sogar bei Fehlern die während der lexikalischen Analyse auffallen müssten.
Ich nehme daher an dass du keinen Lexer einsetzt.
Also den String on the Fly durchkämst. Das ist nicht besonders beeindruckend.

Zumindest die Syntax macht echt was her.^^

Ich glaub, da musst du nochmal ran. ;-)

MfG

Wolf

Verfasst: 16.04.2008 18:43
von ZeHa
Was ist "Multiple If Unterstützung"? Meinst Du damit geschachtelte Ifs? Wenn das nicht geht, kann ich mir in etwa denken, wie das programmiert wurde, in dem Fall würde ich Dir dringendst raten, Dich mal mit Baumstrukturen zu beschäftigen.

Kann man eigentlich auch Variablen aus PB an Deine Skriptsprache übergeben und umgekehrt?

Verfasst: 16.04.2008 19:04
von STARGÅTE
ich hatte ja auch mal n scriptsprache hier veröffendlicht, und da habt ihr mir auch gerade das ganze in Byte Code zu schreiben, nur weiß ich bis heute nicht wie das dann aussehen soll.
Im netzt habe ich nix brauchbares gefunden.

Ist das dann so gemeinst, das im ByteCode nur noch "Bytes" stehen, also kein "If" sonder zB das zeichen chr(1) das Variablenamen dann umgewandelt werden in Indizes, oder zB soo:

Code: Alles auswählen

I(V1=V2){V1=2}
anstatt

Code: Alles auswählen

If MeineVar = DeineVar
 MeineVar = 2
EndIf
oder wie hat das dann auszusehe.

@X0r
Verschachtelte Ifs oder Schleifen sollten doch einfach mit Rekursiverbearbeitung möglich sein, so hab ichs ja auch gemacht.

Verfasst: 16.04.2008 19:19
von ZeHa
@ Stargate: Es kann so aussehen, aber das ist eher Tokenizing. Es bringt natürlich einen gewissen Vorteil, aber ist noch nicht extrem schnell, weil Du ja nach wie vor die Klammern usw. parsen müßtest.

Bytecode wäre eher so eine Art erfundene Maschinensprache, die Du dann Schritt für Schritt abarbeitest. Das heißt, komplexe Klammersachen usw. werden in einzelne Berechnungen zerlegt, die im Wesentlichen aus der Operation und 1-2 Parametern bestehen. Dinge wie If-Blöcke usw. werden durch Sprünge ersetzt. Du müßtest halt mal mit 'ner Maschinensprache arbeiten um das Prinzip zu erkennen. Oder Java Bytecode anschauen, einfach mal 'ne simple Java-Funktion schreiben, kompilieren und dann mit 'nem Bytecode-Viewer anschauen.