Seite 1 von 10

PBScript - Scriptsprache mit PureBasic-Syntax

Verfasst: 16.01.2010 17:13
von CSHW89
PBScript Beta V. 0.73
Userlib bzw. DLL für Windows 32-Bit
Auch mit Unicode
---------------------

Hi Leute,
ich hab mich mal an eine Scriptsprache rangemacht. Jetzt werden ihr wahrscheinlich sagen, dass schon tausende Scriptsprachen erstellt worden sind. Ich wage aber mal zu behaupten, dass meine was gaaaanz besonderes ist 8). Mein Ziel war es nämlich, dass meine Scriptsprache die Syntax von PureBasic benutzt, sodass ganz normale PB-Dateien als Script verwendet werden können. Natürlich ist meine Sprache noch nicht fertig. Aber ich arbeite weiter daran, sie so ähnlich wie möglich kompatibel zu PureBasic zu machen.

Die Funktionsweise meiner Scriptsprache ist geteilt. Das heißt es gibt einen Kompiler, der PB-Dateien in ByteCode umformt. Dazu gibt es einen Interpreter, der den ByteCode dann interpretiert und ausführt. Somit ist ein Kompilieren (welches für gewöhnlich Zeit in Anspruch nimmt) im fertigen Projekt nicht mehr nötig.

Hier eine Liste von den Features von PureBasic, die bereits im Kompiler umgesetzt wurden:

- Variablen, Pointer, Adressen von Variablen '@'
- Konstanten / Enumeration
- Structure (auch mit StructureUnion und Arrays) / Extends
- Dim / Arrays (Ein- und Mehrdimensional / vollkommen kompatibel zu PureBasic)
- NewList / LinkedLists (vollkommen kompatibel zu PureBasic)
- Arrays und Listen auch in Strukturen
- Procedure (auch optionale Parameter) (kann im Script definiert werden oder außerhalb)
- Global/Protected/Shared/Static/Define ('Static' noch ohne Startwertzuweisung)
- IncludePath / (X)IncludeFile
- Data / DataSection
- Read / Restore
- Sprungmarken
- Debug
- EnableExplicit/DisableExplicit
- If/ElseIf/Else
- Select/Case/Default
- While/Wend, Repeat/Until/ForEver, For/Next, ForEach/Next
- Break/Continue
- With
- End mit ExitCode
- Variablenzuweisung (auch die kurze Form 'var + 1' statt 'var = var + 1')
- Alle Operatoren mit gleicher Priorität wie in PureBasic
- Booleanvervollständigung (aus 'If var And string' wird 'If (var <> 0) And (string <> "")')

Ich freue mich auf eure Meinungen, Verbesserungsvorschläge und (hoffentlich nicht) Bug Meldungen.

Hier der Link zur aktuellen Version:
http://cshw89.mevedia.de/PBScript.zip

Für PureBasic <= 4.61:
Version 0.72: http://cshw89.mevedia.de/PBScript_0.72.zip

Für PureBasic <= 4.51:
Version 0.71: http://cshw89.mevedia.de/PBScript_0.71.zip
Version 0.69: http://cshw89.mevedia.de/PBScript_0.69.zip
Version 0.60: http://cshw89.mevedia.de/PBScript_0.60.zip
Für PureBasic <= 4.40:
Version 0.24: http://cshw89.mevedia.de/PBScript_0.24.zip

Mfg Kevin

Re: PBScript - Scriptsprache mit PureBasic-Syntax

Verfasst: 16.01.2010 17:42
von ts-soft
:allright: schöne Idee, eine Art Lua mit PB-Syntax.

Die wichtigsten Infos haste aber im ersten Beitrag weggelassen :(
1. Es ist eine UserLib
2. Sie erfordert Windows
3. Sie unterstützt nur 32-Bit
4. Unicode, Threadsafe usw., weiß ich jetzt nicht, den Rest hab ich ja schon erraten :wink:

Gruß
Thomas

Re: PBScript - Scriptsprache mit PureBasic-Syntax

Verfasst: 16.01.2010 17:49
von CSHW89
Ach was, hab ich doch gar nicht. Sorry hab nicht dran gedacht. Hab die Info wohl etwas zu schnell geschrieben. :oops:
Danke schon mal für Lob.

Re: PBScript - Scriptsprache mit PureBasic-Syntax

Verfasst: 16.01.2010 20:13
von STARGÅTE
Sehr gut :allright:

Aber du hast was "wichtiges" vergessen, wieso kennt deine Lib kein ":" ?

Code: Alles auswählen

Global var1.i
Global var2.i
Procedure main()
  var1 = 1 : var2 = 2
EndProcedure
---------------------------
PBSScriptCompiler
---------------------------
Zeile 5: Garbage at the end of line.
---------------------------
OK
---------------------------
Hier hängt sich das Programm auf, was habe ich falsch gemacht ?

Code: Alles auswählen

Define string.s, file.s
Define *bytecode
Define value.PBSValue
  
; Hier das Scriptprogramm
string = #LF$
string + "Global var.i"+#LF$
string + "Procedure.i test()"+#LF$
string + "  ProcedureReturn 10"+#LF$
string + "EndProcedure"+#LF$
string + "var = test()"+#LF$
  
file = GetTemporaryDirectory()+"Script.pb"
  
If CreateFile(0, file)
  WriteString(0, string)
  CloseFile(0)
    
  *bytecode = PBSCompileScriptFile(file)
  If PBSOpenByteMemory(0, *bytecode)
    PBSStartByteCode(0)
    PBSGetVariableValue(0, "var", value)
    Debug value\integer
    PBSCloseByteScript(0)
  EndIf
EndIf
Liegt scheinbar an PBSStartByteCode(), aber das muss ja ausgeführt werden damit der Code außerhalb der Procedure ausgeführt wird ...

Und noch n Frage, Proceduren von PB werden überhaupt nicht unterstützt ?
Also Abs(), Sin() usw.

Auch und was noch nett wäre , wäre ein PBSCompileScriptString()
damit man nicht immer temp-Datein erstellen muss

Re: PBScript - Scriptsprache mit PureBasic-Syntax

Verfasst: 16.01.2010 20:30
von ts-soft
Unicode geht anscheinend auch nicht :(

Mein Test funktioniert auch nicht, aber da hab ich wohl was mißverstanden, Beispiele fehlen
ja auch noch.

Ich hab folgende Datei angelegt:
bla.txt hat geschrieben:a.s = "Hello World"
und folgenden Code probiert:

Code: Alles auswählen

Define *ByteCode
*ByteCode = PBSCompileScriptFile("bla.txt")
Define.PBSValue MyVar

If PBSOpenByteMemory(0, *ByteCode)
  PBSGetVariableValue(0, "a", @MyVar)
  Debug MyVar\string
EndIf
Bekomme aber nur einen leeren Debugger zu sehen?

Re: PBScript - Scriptsprache mit PureBasic-Syntax

Verfasst: 16.01.2010 20:45
von STARGÅTE
@TS: du musst den Code erst ausführen, PBSStartByteCode(0)

PBSOpenByteMemory öffnet nur ...

Re: PBScript - Scriptsprache mit PureBasic-Syntax

Verfasst: 16.01.2010 20:52
von ts-soft
Okay, hab bla.txt geändert:
bla.txt hat geschrieben:Global a.s
a.s = "Hello World"
und PBSStartByteCode(0) hinzugefügt, dann gehts :allright:

Re: PBScript - Scriptsprache mit PureBasic-Syntax

Verfasst: 16.01.2010 21:33
von hjbremer
mal ne blöde Frage ?

wozu brauch ich das ? wenn ich PB habe.

Re: PBScript - Scriptsprache mit PureBasic-Syntax

Verfasst: 16.01.2010 21:39
von X0r
mal ne blöde Frage ?
Jo, warum nicht.
wozu brauch ich das ? wenn ich PB habe.
Stell dir vor, du willst ein Spiel entwickeln, welches dem Benutzer selbst die Möglichkeit bieten soll, durch Scripts modifiziert werden zu können. ;)

Re: PBScript - Scriptsprache mit PureBasic-Syntax

Verfasst: 16.01.2010 21:45
von ts-soft
hjbremer hat geschrieben:mal ne blöde Frage ?

wozu brauch ich das ? wenn ich PB habe.
Wenn Du PB nicht hast, wäre es ziemlich unnütz :mrgreen:

Ansonsten hat XOr ja schon hinweise gegeben. Man kann dem User also erlauben
z.B. eigene Level, eigenes Skinning o. ä. zu Skripten um die PB-Anwendung zu
manipulieren. Etwas ähnliches gibts ja schon, http://de.wikipedia.org/wiki/Lua

Gruß
Thomas