a toy script interpreter written in c, u can write & run your script written in uyghur language grammar with it ...
-
read documents for move informations
-
run
./release/uyghur.exe
to get help content -
cick
./release/yuguresh.exe
to run raylib example
- a. english
- b. ئۇيغۇرچە
- c. uyghurche
- d. o'zbekcha
- e. Türkçe
- f. қазақша
-
vscode extension for highlighting and autocompleting.
-
language converter for translating different languages.
# a dynamic var
variable m value empty made
# a static var
variable n value num made
# set val
m = "salam dunya!"
# free val
m value empty made
# type error
n = "sinaq..."
variable m value "yezish" made
# convert to func
m value worker made
command m write
# convert to bool
m value logic made
command m write
# arthimetic
x = 1 + 2 # 3
x = 1 + 2 * 3 # 9
x = 1 + (2 * 3) # 7
x = 64 ^ (1 / 3) # 4
# bitwise
x = 3 & 2 # 2
x = 3 | 2 # 3
x = 3 ~ 2 # 1
# boolean
x = right & wrong # wrong
x = right | wrong # right
x = right ~ wrong # right
# logic
x = "2" ? 2 # false
x = 2 < 3 # true
x = "ab" > "ac" # false
# string
x = "ab" + "cd" # abcd
x = "ab" * 2 # abab
# checking
x = 10 % 7 # 3
x = 10 % num # true
x = 10 % empty # false
# read a val
command a read
# print a val
command a write
if 0 then
command "if" write
elif right then
command "elif" write
else
command "else" write
finish
variable i value 0 made
while i < 9 then
command "while\n" write
i = i + 1
finish
speaded "abc..." variable i v become
command i write
command "\t" write
command v write
command "\n" write
finish
# a func with two args
worker f variable x y content
variable t value 0 made
t = x + y
result t returned
finish
# call func and receive rsp
worker f with 10 20 applied and r received
# print the val received
command r write
# a closure maker func
worker make content
# a var in env
variable x value 0 made
variable r value 0 made
# a func & env
worker func variable a content
command x write # 0
command y write # 200
r = r + a
result r returned
finish
# ret the closure func
result func returned
finish
# some vars in mod
variable x value 100 made
variable y value 200 made
# make closure
worker make applied and f received
# print 11
worker f with 11 applied and r received
command r write
# print 22
worker f with 11 applied and r received
command r write
variable x value empty made
# try block
exception e become
x = 3 / 0
finish
# catch block
if e then
command "exception:\n" write
command e write
command "\n" write
else
command "successful!\n" write
finish
# declare a list
t value list made
# declare a dict
s value dict made
# generate a list
t = [11, 22, "abc"]
# generate a dict
s = {a: "aa", b: "bb", c: 123}
# put a num key
@t:1 = 456
# put a str key
@s:k = "abc"
# put a var key
@s{v} = val
# alias: this: - bu, module: + bolek, global: * global
# check type
b = t % list
# an assister with one argument
assister X variable x content
@-:x = x
finish
# assister func
worker @X:test content
command "X.test...\n" write
finish
# a creator with one arguments
creator Y variable y content
creator X with "arg xxx ...\n" applied
@-:y = y
finish
# creator func
worker @Y:test content
worker @X:test applied
command "Y.test...\n" write
finish
# call creator using an assister and receive object
creator Y with "arg yyy ...\n" applied and r received
# print the object val received
command @r:x write # arg xxx ...
command @r:y write # arg yyy ...
# call creator func which calling assister func inside
worker @r:test applied
# X.test...
# Y.test...
# check obj is created by or assisted by
if r % X then
command "yes\n" write
finish
# yes
# other.xx
variable x value "other..." made
# main.xx
worker ekirish with "../other.xx" applied and m received
command @m:x write
# run the program
`.uyghur.exe ./main.xx`
# get the rsp
other...
u can get the bridge objet and communicate between c and script, just check
bridge.c
for more information
- register a box to script (with some keys of different types)
Bridge_startBox(bridge);
Bridge_bindBoolean(bridge, "bol", false);
Bridge_bindNumber(bridge, "num", 123);
Bridge_bindString(bridge, "str", "abc...");
Bridge_register(bridge, "boxName"); // NULL
- call script function from c (giving one argument and receiving result)
Bridge_startFunc(bridge);
Bridge_pushValue(bridge, Value_newNumber(123));
Bridge_pushValue(bridge, Value_newString(""));
Bridge_call(bridge, "funcName");
char resultType = Bridge_topType(bridge);
void *resultValue = Bridge_receiveValue(bridge);
- register c function for script (receiving two argument and giving result)
void testFunc(Bridge *bridge)
{
int a = Bridge_receiveNumber(bridge);
char *b = Bridge_receiveString(bridge);
Bridge_returnBoolean(bridge, false);
}
Bridge_startBox(bridge);
Bridge_bindNative(bridge, "testFunc", testFunc);
Bridge_register(bridge, NULL);
- libraries
- ...
i am still working on it ...