Jump to content

Interpreter Start Up Project- JSL to Linden Scripting Language .


TheAndreiM
 Share

Recommended Posts

Hey guys,

I am founder and developer of Juliar Programming Language. I have recently got an idea to extend Juliar Language and create an in browser compiler/interpreter from Juliar Second Life Language to Linden Scripting Languages.

 NOW WORKS ONLINE: http://www.jssl.tk/

Advantages: 

Simpler to use commands, allow a non programmer create very complex scripts.

Write once, use it for any version of Second Life. Once you write the script in Juliar Second Life Language,

you will not need to worry about having the scripts break, the JSL will always keep up with the standard.

JSL optimization allows you to build a more complex program that uses < 64KB data.

Automatic detection of 64KB script limit.

 

Overall, I have very high hopes for this project. I believe that when we have a working model, we will have more people creating more amazing things, and push the game to new limits!

 

We need both, people that are good in javascript w/ Juliar and people that know linden scripting well enough.

Please post if interested!


Github: https://github.com/juliarLang/juliarsecondlife

(variables types are automatically determined, no need to cast)

Here is the alpha version of basic syntax:

*set=x 22 *          --Sets the variable x to 22

*set=x [33,44,55,11] *  --Sets the variable x to an array of [33,44,55,11]

*set=x {hello: 33, red: 5} * --Sets the variable x to an associative array (JSON format) 

*set=x <3,1,5> * --Sets the variable x to a vector

*set=y x* --Sets the variable y to the contents of x (basically a copy command).

*get x * --Retrieves the value of x

*log x * -- whisper the contents of x to yourself( useful in debugging code on Second Life)

*repeat=5 Hello World * --Loops content Hello World 5x where *counter * is the loop counter

*if=x>5,x<10 Hello * --If x >5 or x<10, then, display hello.

 

Unlike LSL, JSL uses 256 bit channels for color. Therefore the following are all valid:

*color=#445 *

*color=#341325 *

*color=<55,11,22> *

*color=<0.1,.03,0.7>  --exception if for all value <= 1 then it uses standard (linden's ) [0,1]

*color=red *

*color={r:32,g:44,b:55} *

*color={red:32,green:44,blue:55}  *

*color=32,22,11 *

*color=32,22,11,0.5 *

May add CMYK later if people request.

 *func=hello  return 5+2* functions are created easily and are invoked simply by thei name chosen i.e. *hello=parameters* Note, you cannot create functions with private words, so I suggest adding a prefix *

If you start writing the script without declaring the state via *state= *, it will assume that you are in default state, if you do not write status of state via *status * it will assume that the state is "state_entry" or in our case "status=entered"

Update 1:

Current Status:

Input:

*set=x 32 *
*get x*
*set=x 35 *
*juliarset=x 38 *
*juliarget x *
*set=x 45 *
*juliarget x *
*setcolor <255,39,0>*
*setcolor <0,0.5,1>*
*settexture hellokitty*
*setalpha .32*
*setalpha 40%*
*setalpha 35*
*get x * = 3 *hide I can comment here * + 7;
*log The code is working *

Output:

 

int x = 32;
x
x=35;

38
x=45;
45
llSetColor(<1,0.15294117647058825,0>, ALL_SIDES);
llSetColor(<0,0.5,1>, ALL_SIDES);
llSetTexture(hellokitty, ALL_SIDES);
llSetAlpha(.32, ALL_SIDES);
llSetAlpha(0.4, ALL_SIDES);
llSetAlpha(0.35, ALL_SIDES);
x = 3  + 7;
llOwnerSay("The code is working");

 

Update 2:

By default, JSL assumes that you are in global/stateless state. You can use *state * to change the state of code. The default event/action is "state_entry" you can change default event by using *event eventname *. Unlike LSL you can declare states and events as many times as you want. Interpreter is smart enough to know what's going on :) I need help setting up a server for dynamically fetching help info about a command and a repo for this language (from where you can import modules that people made ). To list available commands, all you do is *commands *

Please test, and don't forget to contribute! 

Current List of Commands (can be accessed in interpreter via *commands * )

List of Commands
==================

*state *
*event *
*goto *
*setcolor *
*settexture *
*setalpha *
*log *
*set *
*get *
*jset *
*jget *
*repeat *
*loop *
*if *
*newline *
*hide *
*modules *
*commands *
*deport *
*import *
*init *

 

Link to comment
Share on other sites

Update 3:

Now there is a simple way to pass messages  between object thanks to JSL's new support for JSON format.

That's right.: Now you can do *send {"a": 32, "sample": "yay", "errors": "no errors"}  * and send the message to some object (default to all) and on the receiving side do *receive * and you will be able to use the results.

Technical Details:

Simple Input:

*send {"a": 33, "b": 22, "c": "hello"} **receive *

Sample Output:

llMessageLinked(LINK_SET, 1, "33|22|\"hello\"", "\"a\"|\"b\"|\"c\"");default {    state_entry() {}    link_message(integer sender_num, integer num, string list_argument, string key) {        list j_list = llParseString2List(list_argument, ["|"], []);        list j_key = llParseString2List(key, ["|"], []);    }}

 

Update 4:

Adding full support for JSON type associative array/dictionary. Adding functions support. Better variable detection.

Update 5:

JSL is now online via http://www.jssl.tk/  I will try to keep it always updated for those of you who do not want to download the code from github!

Link to comment
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
 Share

×
×
  • Create New...