summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2018-05-31 23:23:28 +0800
committerchai <chaifix@163.com>2018-05-31 23:23:28 +0800
commita558be5f3d72775bd06c3814e002d355402a7acd (patch)
tree74f12a0f9043d7690024afad04ddff5c200cc614
*init
-rw-r--r--lls/lls.c30
-rw-r--r--lls/lls.h22
-rw-r--r--llsVM.c0
-rw-r--r--llsc.c3
-rw-r--r--test/hello.lls110
5 files changed, 165 insertions, 0 deletions
diff --git a/lls/lls.c b/lls/lls.c
new file mode 100644
index 0000000..e8f26ea
--- /dev/null
+++ b/lls/lls.c
@@ -0,0 +1,30 @@
+#include "lls.h"
+
+/* value type */
+enum
+{
+ VT_UNKNOWN = 0,
+ VT_NULL, // null | |
+ VT_NUMBER, // number | float |
+ VT_STRING, // string | char* |
+ VT_BOOLEAN, // boolean | char |
+ VT_SET, // set | struct |
+ VT_FUNCTION, // function | void* | ڴͬĺ
+};
+
+typedef struct
+{
+ int type;
+ union
+ {
+ float _number;
+ char* _string;
+ char _bool;
+ void* _struct;
+ } value;
+} lls_Value;
+
+enum
+{
+
+};
diff --git a/lls/lls.h b/lls/lls.h
new file mode 100644
index 0000000..5f190a2
--- /dev/null
+++ b/lls/lls.h
@@ -0,0 +1,22 @@
+#ifndef __LLS_H
+#define __LLS_H
+
+typedef struct
+{
+ int top;
+} lls_Context;
+
+lls_Context* lls_newcontext();
+
+typedef int (*lls_Function)();
+
+int lls_bindfunction(lls_Context* C, const char* fname, lls_Function func);
+int lls_bindvariable(lls_Context* C, const char* vname, void* variable);
+int lls_bindset();
+
+int lls_executefile(lls_Context* C, const char* file);
+int lls_executesource(lls_Context* C, const void* buffer, int size);
+
+
+
+#endif \ No newline at end of file
diff --git a/llsVM.c b/llsVM.c
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/llsVM.c
diff --git a/llsc.c b/llsc.c
new file mode 100644
index 0000000..6347da9
--- /dev/null
+++ b/llsc.c
@@ -0,0 +1,3 @@
+// llsԴΪbytecode
+
+
diff --git a/test/hello.lls b/test/hello.lls
new file mode 100644
index 0000000..86e6a6b
--- /dev/null
+++ b/test/hello.lls
@@ -0,0 +1,110 @@
+// global
+//
+//
+//
+
+/*
+关键字
+null
+true false
+*/
+/*
+可以成为语句:
+ 赋值、
+
+不可成为语句:
+ <variable>;
+*/
+// 声明一个变量时必须赋值,如
+foo = null;
+
+a = 10;
+global b = 12;
+
+/* 类(首字母大写的set)*/
+Monster = {
+ health = 100,
+ strength = 0.4,
+ speed = 20,
+
+ attack = func(self, other)
+ {
+ other.health -= self.strength;
+ },
+ ['escape'] = func(self)
+ {
+ speed -= 10;
+ },
+ ["init"] = func(self, _health, _speed, _strength)
+ {
+ self.speed = _speed;
+ self.health = _health;
+ },
+};
+
+/* 继承 */
+Bat = new Monster;
+Bat += {
+ fly = 20,
+ wings = true,
+};
+
+/*
+或者下面这样,可以实现多重继承
+Bat = new Monster + {
+ fly = 20,
+ wings = true,
+} + new Foo;
+
+Bat = new Monster +
+ new Foo +
+{
+ fly = 20,
+ wings = true,
+ init = func()
+ {
+
+ }
+};
+*/
+
+bat = new Bat;
+
+// 语法糖,把调用者作为第一个参数压入栈
+bat:init(1, 2, 3);
+
+func test()
+{
+ a = 13;
+ c = {
+ c_1 = 12,
+ c_2 = 13,
+ c_3 = func() {
+
+ },
+ ['c_4'] = func(obj){
+ obj.c_1 = 12
+ },
+ ["c_5"] = func(msg){
+ print(msg)
+ }
+ };
+ d = new c;
+ e = c;
+ d["c_4"] = "d_c_4";
+ d["c_5"]("function test");
+ d.c_5("function test");
+ /* 数组,默认无key的set */
+ /* 如果第一个数据没有key,则set成为array */
+ /* array从0开始索引 */
+ arr = {1, 2, 2, 3, 5, 2};
+ /* 字符串拼接 */
+ str = "hello " + "world";
+}
+
+func main()
+{
+
+}
+
+main() \ No newline at end of file