https://github.com/movsb/taolang
The Tao Programming Language.
https://github.com/movsb/taolang
javascript programming-language tao taolang
Last synced: about 2 months ago
JSON representation
The Tao Programming Language.
- Host: GitHub
- URL: https://github.com/movsb/taolang
- Owner: movsb
- Created: 2015-09-24T15:20:38.000Z (about 10 years ago)
- Default Branch: master
- Last Pushed: 2024-07-28T19:45:09.000Z (about 1 year ago)
- Last Synced: 2025-06-03T21:00:49.235Z (4 months ago)
- Topics: javascript, programming-language, tao, taolang
- Language: Go
- Homepage: https://movsb.github.io/taolang/
- Size: 1.08 MB
- Stars: 33
- Watchers: 6
- Forks: 5
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# taolang
A Javascript-like dynamic language.
## Grammar
## Syntax
### 变量定义
```js
let a; // 变量定义,值为 nil
let b = nil; // nil 是空类型
let c = true; // 布尔变量
let d = 123; // 数值类型,内部类型为 int
let e = "str"; // 字符串类型(原始字符串)
let f = function(x,y,z) {return x+y*z;}; // 函数类型,可以直接当表达式使用
let g = function() {return "test"+"str";}(); // 函数作为表达式,定义后可以直接调用
let h = { // 定义一个对象
a: nil,
b: 1,
c: "cc",
d: true,
e: function() {print("e");},
f: {
xxx: "this is xxx",
},
g: function () {
return "d";
},
h: function() {
return {
what: "what",
when: "when",
"who?": "who?",
};
},
};
```### 函数定义
全局函数或具名函数:
```js
function name(x,y,z) {}
```函数作为表达式赋值:
```js
function name() {
let f = function() {};
}
```函数作为回调函数:
```js
function sync(callback,a,b,c) {
return callback(a,b,c);
}function main() {
print(
sync(
function(x,y,z) {
return x+y*z;
},
2,3,4
)
);
}
```### 代码块 & 作用域
仅支持词法作用域,不支持 Javascript 的函数作用域。
```js
function main() {
let a = 1;
{
let a = 2;
println("inner a: ", a); // 2
// return a;
}
println("outer a: ", a); // 1
}
```### 闭包
```js
function createCounter() {
let a = 0;
return function() {
a = a + 1;
return a;
};
}function main() {
let c1 = createCounter();
let c2 = createCounter();
println(c1()); // 1
println(c1()); // 2
println(c2()); // 1
println(c2()); // 2
}
```### 对象定义与访问
```js
function main() {
let x = {
a: nil,
b: 1,
c: "cc",
d: true,
e: function() {print("e");},
f: {
xxx: "this is xxx",
},
g: function () {
return "d";
},
h: function() {
return {
what: "what",
when: "when",
"who?": "who?",
};
},
};
println(x);
println(x.a);
println(x.b);
println(x["c"]);
println(x[x.g()]);
println(x.e);
println(x.f.xxx);
println(x.h().what);
println(x.h()["who?"]);
println(x.y);
}
```### 数组定义与访问
```js
function main() {
let a = [1,true,nil,"str",{},1+2*3,];
println(a);
println(a.length);
println(a[3]);
println([9][0]);
}function main2() {
let a = [1,2,3,4,5,6,7,8];
let n = a.length-1;
for n >= 0 {
println(a[n]);
n = n - 1;
}
}
```### Lambda表达式与函数式编程
```js
function each() {
let a = [1,3,5,7,9];
a.each(e=>println(e));
}function map() {
let a = [1,3,5,7,9];
let b = a.map(x=>x*x);
println(b);
}function reduce() {
let a = [1,2,3];
let b = a.reduce((memo,num)=>memo+num,0);
println(b);
}function find() {
let a = [1,3,5,7,9];
let b = a.find(x=>x>5);
println(b);
}function filter() {
let a = [1,2,3,4,5,6,7,8,9];
let b = a.filter(x=>x%2==0);
println(b);
}function where() {
let a = [
{a:1,b:3},
{a:2,b:2},
{a:3,b:1},
];
let b = a.where(x=>x.a==1||x.b==1);
println(b);
}
```### 控制语句
#### for 循环
表达式部分不用 `()` 括起来。
```js
function main() {
let a = [1,2,3,4,5];
for let i=0; i 0 {
println("1 > 0");
}if 1 > 2 {
println("1 > 2");
} else {
println("else 1 > 2");
}if 1 > 2 {
println("1 > 2");
} else if 2 > 3 {
println("2 > 3");
} else {
println("else");
}
}function Break() {
let a = 10;
for a > 0 {
if a == 5 {
break;
}
a= a-5;
}
print(a);
}function Return() {
let a = 10;
for a > 0 {
if a == 8 {
return a;
}
a = a- 1;
}
}function main() {
If();
Break();
println(Return());
}
```