____ ______ _____ /-----------\
\\ \ || \ || | /-------------\
\\ \ || |\ \ || | | -- | -- | \\ //
\\ \ || |\\ \ || | | |_____| | \\//
\\ \ || | \\ \ || | --\_____________/ ---==
\\ \|| | \\ \|| | ///\ || || ||
\\ | \\ | | | || || ||
\\____| \\____| \__/\ ||___ ||__e ||
__________________________________________________||
---------------------------------------------------|
VERSION 0.1.628 FOR FUTURE AR,VR,AI
Walley Language is a script language that
compiles Walley Language into JavaScript which
can be embeded into webpage. Parts of Walley
Language require Node.Js support.
It is the language for creating a WORLD:)
I just started this project, so there are still lots of bugs.
XD
To install walley language,
type "npm install -g walley-language" in terminal or cmd
to run walley-language, simply type "walley_worker" in terminal
to try walley-language on browser, go to [where walley-language locate]/html folder and then run index.html
========
Command:
walley_worker | interactive mode (compile to js and run immediately)
walley_worker [file] | run .wy file directly
walley_worker compile [file] | compile .wy file and show output in terminal
walley_worker compile [file1] [file2]
| compile file1 and save the output to file2
========
The walley.wy source file has three parts:
1. lexer | get token list
2. parser | convert token list to syntax tree
3. code generation | compile the code to javascript code using the syntax tree
4. code optimization || not started yet
========
Keywords:
and break then if elif else end
true false for def if in local none
not or return while import
========
Walley Language now support the following data types:
1. String | only support "" now. '' is unsupported
2. Number | eg 10.0 12
3. Table | influenced by lua, [] . it is a wrapper for Object
4. Function
========
Grammer: # means the feature is not supported now
assign value:
x=12
x,y=14,15
a=[]
a[2]=15
define function:
1. def [ func_name ] ( [ params ] ) then [ statements ] end
eg:
def add(num1,num2) then return num1+num2 end
2. [ var_name ] = def ( [ params ] ) then [ statements ] end
eg:
add = def (num1,num2) then return num1+num2 end
if elif else:
1. if [ judge ] then [ statements ] end
eg: if x>10 then x=15 end
2. if [ judge ] then [ stms ] elif [ judge ] then [ stms ] end
eg: if x>0 then x=12 elif x<20 then x=1 end
3. if [ judge ] then [ stms ] (elif [judge] then [stms] ) else [stms] end
eg: if x<0 then x=14 elif x>20 then x=1 else x=50 end
while:
1. while [ judge ] then [ statements ] end
for: (still under development.. I may replace while with for in the future)
1. for [stm1] , [judge] , [stm2] then [stms] end
2. for , [judge] , [stm2] then [stms] end
3. for [judge] , [stm] then [stms] end
# 4. for [judge] then [stms] end
foreach:
1. for [key],[value] in [table] then [stms] end
eg:
for i,v in [1,2,3,a=14] then
console.log(i) # print 0,1,2,a
console.log(v) # print 1,2,3,14
end
2. for [key] in [table] then [stms] end
annotation:
# [stm] : short annotation
#~ [stms] ~# : long annotation
06/07/2013 new add:
import: # import statement needs nodejs support
1. import [ file_name (string) ]
eg: import "Hello.wy"
will import all from Hello.wy.. like c language include ""
========
slice:
only support string and table
[start:end]
[:end]
[start:]
eg: "Hello"[0:2]--> "He"
[1,2,3][0:2]--> [1,2]
========
embed library:
Math: (support all javascript Math prototype functions) new added:
Math.cot, Math.sec, Math.csc
String: (support all javascript String prototype functions) new added:
find, toupper, tolower, reverse
Table: (support all javascript Object prototype functions) new added:
slice, append, maxn, insert, remove, length
Builtin:
len([string|table]), isalpha, isdigit
========
How to define a class using walley language:
Human=[] # define a class Human
Human.init=def()then # constructor
self=[] #
self.age=12 # instance public value
self.showAge=def()then # instance public method
console.log(self.age)
end
x=12 # private value
y=def()then # private method
console.log("nothing")
end
return self
end
Human.hi="Hello World" # class value
Human.speak=def(msg)then # class method
console.log(msg)
end
# init an object
yiyi = Human.init()
yiyi.showAge() # call instance method "showAge"
Human.speak("I am human!!") # call class method "speak"
========
Problem: (@ means support now)
Unsupported features or unsolved problems:
@1. += -= *= /= ...
@2. ++ -- ...
@3. x = new Hi() # new is not supported
4. ... (argv) in params
5. switch statements
6. keyword as var name problem
7. << >> operator
8. and a lot....XD
@9. no beautifier
@10. for statement i++ error
11 inefficient for statements in walley_cg.wy
12 inefficient way of finding the index of ")" and "then"
@13 += and ++ stm in for statement bug
@14 undefined obj in walley.wy error
15 x>4 ? x=12 : x=5
========
Released under MIT License
Github:
Repository https://github.com/shd101wyy/Walley0.1.git (git)
Bugs https://github.com/shd101wyy/Walley0.1/issues:
========
version 0.1.616: fix function as function param bug.. fix one lexer bug
version 0.1.617: fix [1,2,3,4][0:2] bug, i convert {0:1,0:2} to array and then get slice
but actually maybe i should convert it back to obj because table is object
version 0.1.618: fix for each bug, fix slice bug
version 0.1.619: add beautifier. now the generated code is more beautiful!! XD
fix bug in /html/index.html.. you could try walley language directly by running index.html in html folder
version 0.1.620: fix for statement parser and cg error. add function 'range' like python
range([start],end,[step])
for i,v in range(10) then
console.log(v) # 0,1,2,3,4,5,6,7,8,9
end
version 0.1.621: fix html/index.html bug. Now it can show compiled codes correctly
version 0.1.622: I am sorry that I just realized /html/index.html still had bug.(Though I could run it on my firefox successfully, it didn't work on my iPad Safari and Chrome). I found there are some differences when getting contents from <div> between Firefox and Chrome.... Now some bugs have been fixed.. Tested on Desktop Chrome, Firefox, Safari. However, it does not work on iOS Safari.. I will find bug and solve this problem in the future.. Watch WWDC :) now
version 0.1.623: XD Walley-Language can run on iPad Safari successfully now.. Enjoy!
you could go to www.planetwalley.com/walley to try walley-language online XD
version 0.1.625: improve /html/index.html, fix one error in README.md
version 0.1.626: improve lexer and parser..(it used to take about 2660 ms to compile walley source while now it takes about 1850 ms).. fix one html bug
version 0.1.627: fix the bug when defining a function inside table
version 0.1.628: add "x=new Date()" like "new" support..
shd101wyy/Walley0.1
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
About
No description, website, or topics provided.
Resources
License
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published