diff options
author | Li Jin <dragon-fly@qq.com> | 2023-08-17 10:36:15 +0800 |
---|---|---|
committer | Li Jin <dragon-fly@qq.com> | 2023-08-17 10:36:15 +0800 |
commit | e61cce21ef7def2c2e52dd6cb6a5b540ebcac29d (patch) | |
tree | 6e7c5e7e6f13157e9f8db26c38f6d8cba75683e5 /spec/inputs | |
parent | 289faf45ac26f7e0ac1a1e4305e5c42fc1e5b866 (diff) | |
download | yuescript-e61cce21ef7def2c2e52dd6cb6a5b540ebcac29d.tar.gz yuescript-e61cce21ef7def2c2e52dd6cb6a5b540ebcac29d.tar.bz2 yuescript-e61cce21ef7def2c2e52dd6cb6a5b540ebcac29d.zip |
add unicode identifier support, fix more issue from #144
Diffstat (limited to 'spec/inputs')
43 files changed, 4411 insertions, 0 deletions
diff --git a/spec/inputs/unicode/ambiguous.yue b/spec/inputs/unicode/ambiguous.yue new file mode 100644 index 0000000..9f42223 --- /dev/null +++ b/spec/inputs/unicode/ambiguous.yue | |||
@@ -0,0 +1,82 @@ | |||
1 | import 绑定 from 抓取 | ||
2 | (绑定 声明) 颜色: "Red" | ||
3 | |||
4 | 变量a = 'b' | ||
5 | 变量c = 变量d | ||
6 | (变量a 变量b) 变量c 变量d | ||
7 | import 变量c from 变量d | ||
8 | (变量a 变量b) 变量c 变量d | ||
9 | (变量c 变量d) 变量a 变量b | ||
10 | 变量a, 变量b = 变量c, 变量d | ||
11 | (变量d 变量a) 变量c | ||
12 | |||
13 | macro 宏 = (函数, 参数)-> "(#{函数}) #{参数}" | ||
14 | for 计数 = 1, 10 | ||
15 | 变量a = -> | ||
16 | $宏 打印, 1 | ||
17 | 变量a = 变量f | ||
18 | $宏 打印, 2 | ||
19 | if 条件 | ||
20 | $宏 打印, 3 | ||
21 | ::跳转位置:: | ||
22 | (打印) 4 | ||
23 | goto 跳转位置 | ||
24 | (打印) 5 | ||
25 | |||
26 | macro 🌛 = (代码)-> { | ||
27 | code: 代码 | ||
28 | type: "lua" | ||
29 | } | ||
30 | |||
31 | do | ||
32 | 打印() | ||
33 | 1 |> b变量 |> (a变量) | ||
34 | 打印() | ||
35 | <- (fn) | ||
36 | |||
37 | do | ||
38 | 打印() | ||
39 | () <- 异步函数() | ||
40 | 打印() | ||
41 | $🌛[==[ | ||
42 | --[[a comment to insert]] | ||
43 | (haha)() | ||
44 | ]==] | ||
45 | nil | ||
46 | |||
47 | macro 宏v = -> '打印 123' | ||
48 | do | ||
49 | global * | ||
50 | $宏v! | ||
51 | |||
52 | do | ||
53 | 函数f | ||
54 | :v变量 | ||
55 | |||
56 | 数组 = while 条件f | ||
57 | :v变量 | ||
58 | |||
59 | repeat | ||
60 | 打印 变量v | ||
61 | until 条件f | ||
62 | :变量v | ||
63 | |||
64 | with 条件f | ||
65 | :变量v = 数组 | ||
66 | .字段x = 1 | ||
67 | |||
68 | 变量x = if 条件f | ||
69 | :字段v | ||
70 | |||
71 | 变量x = switch 条件f | ||
72 | :字段v | ||
73 | when 条件f | ||
74 | :字段v | ||
75 | |||
76 | 数字数组 = for 数字 = 1, 长度 | ||
77 | :数字 | ||
78 | |||
79 | 对象数组 = for 物件 in *物件数组 | ||
80 | 名称: 物件 | ||
81 | |||
82 | nil | ||
diff --git a/spec/inputs/unicode/assign.yue b/spec/inputs/unicode/assign.yue new file mode 100644 index 0000000..5392a92 --- /dev/null +++ b/spec/inputs/unicode/assign.yue | |||
@@ -0,0 +1,92 @@ | |||
1 | |||
2 | _无效变量 = -> | ||
3 | joop变量 = 2302 | ||
4 | |||
5 | (好) -> | ||
6 | 变量d = 100 | ||
7 | 好 = 1021 | ||
8 | |||
9 | 变量a,变量b,变量c,变量d = 1,2,3,4 | ||
10 | |||
11 | 你好[232], (5+5)[121], 你好, 变量x[99] = 100, 200, 300, 400 | ||
12 | |||
13 | joop变量 = 12 | ||
14 | |||
15 | joop变量 = 2345 | ||
16 | |||
17 | 变量a, 变量b = if 你好 | ||
18 | "你好", nil | ||
19 | else | ||
20 | "没啥", "✌️" | ||
21 | |||
22 | |||
23 | 变量a, 变量b = if 你好 | ||
24 | if ✌️ then "一", "二" else "mmhh", nil | ||
25 | else | ||
26 | 打印 "其它东西" | ||
27 | "没啥事", "✌️" | ||
28 | |||
29 | 变量c, 变量d = 1, 2 if true | ||
30 | |||
31 | 变量x = (do | ||
32 | 函数! | ||
33 | 123) if 函数 = 获取处理函数! | ||
34 | |||
35 | (using nil) <- _无效变量 | ||
36 | |||
37 | a变量.<> = do | ||
38 | 打印 123 | ||
39 | {} | ||
40 | |||
41 | do | ||
42 | {元素a, 元素b} = switch 对象c | ||
43 | when "a" | ||
44 | 字典 | ||
45 | when "b" | ||
46 | 函数! | ||
47 | |||
48 | a数组[] = if 条件x | ||
49 | 1 | ||
50 | else | ||
51 | 2 | ||
52 | |||
53 | do | ||
54 | 变量a, 变量b[] = if x条件 | ||
55 | switch 对象y | ||
56 | when 1 | ||
57 | 函数! | ||
58 | |||
59 | do | ||
60 | 变量a, {元素b} = if x条件 | ||
61 | 函数! | ||
62 | else | ||
63 | 123, 表 | ||
64 | |||
65 | do | ||
66 | 变量a, 数组b[], 对象c, 对象d.<add> = if 条件x | ||
67 | switch 对象y | ||
68 | when 1 | ||
69 | 函数! | ||
70 | elseif 条件x2 | ||
71 | if 条件y2 | ||
72 | 函数1! | ||
73 | else | ||
74 | 打印 "hello" | ||
75 | do | ||
76 | 打印 123 | ||
77 | 1, 函数2! | ||
78 | |||
79 | do | ||
80 | 变量a = 变量b = 变量c = 变量d = 0 | ||
81 | |||
82 | do | ||
83 | a变量 = b变量 = c变量 = d变量 = 函数! | ||
84 | |||
85 | do | ||
86 | {a元素} = :字段b = 对象c.字段d = 变量e = 数组对象 | ||
87 | |||
88 | do | ||
89 | 值 = 123 | ||
90 | 变量a = 变量b = 变量c = 值 | ||
91 | |||
92 | nil | ||
diff --git a/spec/inputs/unicode/attrib.yue b/spec/inputs/unicode/attrib.yue new file mode 100644 index 0000000..def1d2a --- /dev/null +++ b/spec/inputs/unicode/attrib.yue | |||
@@ -0,0 +1,53 @@ | |||
1 | const 常量a, 常量b, 常量c, 常量d = 1, 2, 3, 4 | ||
2 | |||
3 | do | ||
4 | close 关闭变量a, 关闭变量b = setmetatable {},__close:=> 打印 "已关闭" | ||
5 | const 变量c, 常量d = 123, 'abc' | ||
6 | |||
7 | close 常量a, 常量b | ||
8 | const 常量c, 常量d | ||
9 | |||
10 | do | ||
11 | const 常量a, {元素b, 元素c}, {元素d} = 函数!, 函数1! | ||
12 | |||
13 | do | ||
14 | const 常量a, {元素b, 元素c}, {元素d} = 函数! | ||
15 | |||
16 | do | ||
17 | close 关闭变量v = if 标记为真 | ||
18 | 函数调用! | ||
19 | else | ||
20 | <close>: => | ||
21 | |||
22 | close 关闭变量f = with io.open "文件.txt" | ||
23 | \write "你好" | ||
24 | |||
25 | do | ||
26 | const 常量a = 1 if true | ||
27 | close 关闭变量b = (if 条件x then 1) unless false | ||
28 | const 常量c = (switch 条件x | ||
29 | when "abc" then 998) if true | ||
30 | close 关闭变量d = | ||
31 | :数值 if 条件a ?? 条件b | ||
32 | |||
33 | do | ||
34 | close _无效变量 = with io.open "文件.txt" | ||
35 | \write "你好" | ||
36 | |||
37 | close _无效变量 = <close>: -> 打印 "第二" | ||
38 | |||
39 | close _无效变量 = <close>: -> 打印 "第一" | ||
40 | |||
41 | _延迟对象数组 = <close>: => | ||
42 | @[#@]! | ||
43 | @[#@] = nil | ||
44 | |||
45 | 延迟 = (项目)-> | ||
46 | _延迟对象数组[] = 项目 | ||
47 | _延迟对象数组 | ||
48 | |||
49 | do | ||
50 | close _无效变量 = 延迟 -> 打印 3 | ||
51 | close _无效变量 = 延迟 -> 打印 2 | ||
52 | close _无效变量 = 延迟 -> 打印 1 | ||
53 | |||
diff --git a/spec/inputs/unicode/backcall.yue b/spec/inputs/unicode/backcall.yue new file mode 100644 index 0000000..9589f70 --- /dev/null +++ b/spec/inputs/unicode/backcall.yue | |||
@@ -0,0 +1,79 @@ | |||
1 | do | ||
2 | (项目) <- 映射 {1,2,3} | ||
3 | 项目 * 2 | ||
4 | |||
5 | do | ||
6 | (项目) <- 映射 _,{1,2,3} | ||
7 | 项目 * 2 | ||
8 | |||
9 | do | ||
10 | (项目) <- 过滤 _, do | ||
11 | (项目) <- 映射 _,{1,2,3,4} | ||
12 | 项目 * 2 | ||
13 | 项目 > 2 | ||
14 | |||
15 | do | ||
16 | (数据) <- 网络?.获取 "测试地址" | ||
17 | 网页体[".结果"]\网页 数据 | ||
18 | (是否处理成功) <- 网络.请求 "测试地址", 数据 | ||
19 | 网页体[".结果"]\添加 是否处理成果 | ||
20 | <- 设置超时回调 1000 | ||
21 | 打印 "完成" | ||
22 | |||
23 | do | ||
24 | <- 同步状态 | ||
25 | (错误信息, 数据="nil") <- 异步加载 "文件.yue" | ||
26 | if 错误信息 | ||
27 | 打印 错误信息 | ||
28 | return | ||
29 | (代码) <- 异步编译 数据 | ||
30 | 结果函数 = 加载字符串 代码 | ||
31 | 结果函数! | ||
32 | |||
33 | do | ||
34 | <- 函数1 | ||
35 | <- 函数2 | ||
36 | do | ||
37 | <- 函数3 | ||
38 | <- 函数4 | ||
39 | <- 函数5 | ||
40 | <- 函数6 | ||
41 | 函数7! | ||
42 | |||
43 | do | ||
44 | :结果,:消息 = do | ||
45 | (数据) <- 异步接收 "文件名.txt" | ||
46 | 打印 数据 | ||
47 | (信息) <- 异步处理 数据 | ||
48 | 检查 信息 | ||
49 | 打印 结果, 消息 | ||
50 | |||
51 | 总大小 = (for 文件 in *文件数组 | ||
52 | (数据) <- 异步加载 文件 | ||
53 | 加入缓存 文件, 数据) |> 合并 0, (对象a, 对象b)-> 对象a + 对象b | ||
54 | |||
55 | 属性A = do | ||
56 | (值) <= 属性定义 => @_值 | ||
57 | 打印 "之前值: #{@_值}" | ||
58 | 打印 "最新值: #{值}" | ||
59 | @_值 = 值 | ||
60 | |||
61 | 属性B = do | ||
62 | <= 属性定义 _, (值)=> | ||
63 | 打印 "之前值: #{@_值}" | ||
64 | 打印 "最新值: #{值}" | ||
65 | @_值 = 值 | ||
66 | @_值 | ||
67 | |||
68 | 警告 "嗨" | ||
69 | |||
70 | local 变量x, 变量y, 变量z | ||
71 | 变量x = do (变量a) < -变量b | ||
72 | 变量x, 变量y, 变量z = do (变量a) <- 变量b | ||
73 | 变量x, 变量y, 变量z = do (变量a) <-变量b | ||
74 | |||
75 | 变量x = do 变量a <= 变量b | ||
76 | 变量x, 变量y, 变量z = do (变量a) <= 变量b | ||
77 | |||
78 | nil | ||
79 | |||
diff --git a/spec/inputs/unicode/bubbling.yue b/spec/inputs/unicode/bubbling.yue new file mode 100644 index 0000000..824263a --- /dev/null +++ b/spec/inputs/unicode/bubbling.yue | |||
@@ -0,0 +1,27 @@ | |||
1 | |||
2 | -- vararg bubbling | ||
3 | 函数 = (...) -> #{...} | ||
4 | |||
5 | 不要冒泡 = -> | ||
6 | [元素 for 元素 in ((...)-> 打印 ...)("你好")] | ||
7 | |||
8 | 变量k = [元素 for 元素 in ((...)-> 打印 ...)("你好")] | ||
9 | |||
10 | 变量j = for 计数 = 1, 10 | ||
11 | (...) -> 打印 ... | ||
12 | |||
13 | -- bubble me | ||
14 | |||
15 | 变量m = (...) -> | ||
16 | [元素 for 元素 in *{...} when 函数(...) > 4] | ||
17 | |||
18 | _无效变量 = (...)-> | ||
19 | 数组x = for 计数 in *{...} do 计数 | ||
20 | 数组y = [元素 for 元素 in *{...}] | ||
21 | 数组z = [元素 for 元素 in 列表 when 函数(...) > 4] | ||
22 | |||
23 | 数组a = for 计数 = 1, 10 do ... | ||
24 | |||
25 | 数组b = for 计数 = 1, 10 | ||
26 | (...)-> 打印 ... | ||
27 | |||
diff --git a/spec/inputs/unicode/class.yue b/spec/inputs/unicode/class.yue new file mode 100644 index 0000000..70bbb07 --- /dev/null +++ b/spec/inputs/unicode/class.yue | |||
@@ -0,0 +1,245 @@ | |||
1 | |||
2 | class 你好 | ||
3 | new: (@测试, @世界) => | ||
4 | 打印 "创建对象.." | ||
5 | 你好: => | ||
6 | 打印 @测试, @世界 | ||
7 | __tostring: => "你好 世界" | ||
8 | |||
9 | 对象x = 你好 1,2 | ||
10 | 对象x\你好() | ||
11 | |||
12 | 打印 对象x | ||
13 | |||
14 | class 简单 | ||
15 | 酷: => 打印 "酷" | ||
16 | |||
17 | class 伊克斯 extends 简单 | ||
18 | new: => 打印 "你好已创建" | ||
19 | |||
20 | x对象 = 伊克斯() | ||
21 | x对象\酷() | ||
22 | |||
23 | |||
24 | class 嗨 | ||
25 | new: (参数) => | ||
26 | 打印 "初始化参数", 参数 | ||
27 | |||
28 | 酷: (数值) => | ||
29 | 打印 "数值", 数值 | ||
30 | |||
31 | |||
32 | class 简单 extends 嗨 | ||
33 | new: => super "伙计" | ||
34 | 酷: => super 120302 | ||
35 | |||
36 | x对象 = 简单() | ||
37 | x对象\酷() | ||
38 | |||
39 | 打印 x对象.__class == 简单 | ||
40 | |||
41 | |||
42 | class 好吧 | ||
43 | -- what is going on | ||
44 | 一些东西: 20323 | ||
45 | -- yeaha | ||
46 | |||
47 | |||
48 | class 好哒 extends 好吧 | ||
49 | 一些东西: => | ||
50 | super 1,2,3,4 | ||
51 | super.一些东西 另一个自己, 1,2,3,4 | ||
52 | 断言 super == 好吧 | ||
53 | |||
54 | |||
55 | class 好 | ||
56 | 不错: => | ||
57 | super\一些东西 1,2,3,4 | ||
58 | |||
59 | |||
60 | class 什么 | ||
61 | 一些东西: => 打印 "值:", @值 | ||
62 | |||
63 | class 你好 extends 什么 | ||
64 | 值: 2323 | ||
65 | 一些东西: => super\一些东西 | ||
66 | |||
67 | with 你好! | ||
68 | 对象x = \一些对象! | ||
69 | 打印 对象x | ||
70 | 对象x! | ||
71 | |||
72 | class 超级酷 | ||
73 | 👋: => | ||
74 | super(1,2,3,4) 1,2,3,4 | ||
75 | super.一些东西 1,2,3,4 | ||
76 | _ = super.一些东西(1,2,3,4).世界 | ||
77 | super\好吧"世界".不错 哈, 哈, 哈 | ||
78 | _ = 一些东西.上级 | ||
79 | _ = super.上级.上级.上级 | ||
80 | _ = super\你好 | ||
81 | nil | ||
82 | |||
83 | |||
84 | -- selfing | ||
85 | 变量x = @你好 | ||
86 | 变量x = @@你好 | ||
87 | |||
88 | @你好 "世界" | ||
89 | @@你好 "世界" | ||
90 | |||
91 | @@一 @@二(4,5) @三, @四 | ||
92 | |||
93 | 变量xx = (@你好, @@世界, 酷) -> | ||
94 | |||
95 | |||
96 | -- class properties | ||
97 | class 一个类 | ||
98 | @好: 343 | ||
99 | 蓝色: => | ||
100 | @你好: 3434, @世界: 23423 | ||
101 | 绿色: => | ||
102 | @红色: => | ||
103 | |||
104 | |||
105 | 变量x = @ | ||
106 | 变量y = @@ | ||
107 | |||
108 | @ 一些东西 | ||
109 | |||
110 | @@ 一些东西 | ||
111 | |||
112 | @ = @ + @ / @ | ||
113 | |||
114 | @ = 343 | ||
115 | @.你好 2,3,4 | ||
116 | |||
117 | _ = 你好[@].世界 | ||
118 | |||
119 | |||
120 | class 怪怪的 | ||
121 | _ = @你好 | ||
122 | if 一些东西 | ||
123 | 打印 "你好世界" | ||
124 | |||
125 | 你好 = "世界" | ||
126 | @另一 = "天" | ||
127 | |||
128 | 打印 "好" if 一些东西 -- this is briken | ||
129 | |||
130 | |||
131 | 打印 "你好" | ||
132 | |||
133 | 变量yyy = -> | ||
134 | class 酷 | ||
135 | _ = nil | ||
136 | |||
137 | |||
138 | -- | ||
139 | |||
140 | class 对象a.字段b.字段c.子类D | ||
141 | _ = nil | ||
142 | |||
143 | |||
144 | class 对象a.字段b["你好"] | ||
145 | _ = nil | ||
146 | |||
147 | class (-> require "moon")!.某个成员 extends 你好.世界 | ||
148 | _ = nil | ||
149 | |||
150 | -- | ||
151 | |||
152 | 类a = class | ||
153 | 类b = class 一个类 | ||
154 | 类c = class 一个类 extends 你好 | ||
155 | 类d = class extends 世界 | ||
156 | |||
157 | 打印 (class 啥事).__name | ||
158 | |||
159 | -- | ||
160 | |||
161 | global ^ | ||
162 | class 一个类 | ||
163 | _ = nil | ||
164 | |||
165 | |||
166 | -- | ||
167 | |||
168 | -- hoisting | ||
169 | class 一个类 | ||
170 | 值 = 23 | ||
171 | {:插入} = 表 | ||
172 | new: => 打印 插入, 值 -- prints nil 23 | ||
173 | |||
174 | -- | ||
175 | |||
176 | class X类 | ||
177 | new: 嗨 | ||
178 | |||
179 | |||
180 | -- | ||
181 | |||
182 | class 酷 extends 东西 | ||
183 | 当: => | ||
184 | { | ||
185 | 你好: -> super! | ||
186 | 世界: -> super.one | ||
187 | } | ||
188 | |||
189 | -- | ||
190 | |||
191 | class 奇怪 extends 东西 | ||
192 | 当: 做点事 => | ||
193 | super! | ||
194 | |||
195 | --- | ||
196 | |||
197 | class 喔哈 extends 东西 | ||
198 | @底部: -> | ||
199 | super! | ||
200 | _ = super.你好 | ||
201 | super\你好! | ||
202 | super\你好 | ||
203 | |||
204 | |||
205 | @空间: 酷 { | ||
206 | -> | ||
207 | super! | ||
208 | _ = super.你好 | ||
209 | super\你好! | ||
210 | super\你好 | ||
211 | } | ||
212 | |||
213 | do | ||
214 | class 测试 | ||
215 | new: => @@如果 = true | ||
216 | @做: => 1 | ||
217 | 测试: => @@如果 and @@做! | ||
218 | 测试实例 = 测试! | ||
219 | 测试实例\测试! | ||
220 | |||
221 | do | ||
222 | class 测试 | ||
223 | new: => @如果 = true | ||
224 | 做: => 1 | ||
225 | 测试: => @如果 and @做! | ||
226 | 测试实例 = 测试! | ||
227 | 测试实例\测试! | ||
228 | |||
229 | class extends 青.应用 | ||
230 | "/": => json: { 状态: true } | ||
231 | |||
232 | class 类A using 类B, 类C, 类D, {值: 123} | ||
233 | |||
234 | class 示例 | ||
235 | @字段1 = 1 | ||
236 | @字段2 = @字段1 + 1 | ||
237 | |||
238 | class 随便 | ||
239 | new: (参数) => @x字段 = 参数 | ||
240 | <mul>: (参数y) => @x字段 * 参数y | ||
241 | <"任意名称">: 123 | ||
242 | :相加 | ||
243 | :<add> | ||
244 | |||
245 | nil | ||
diff --git a/spec/inputs/unicode/comprehension.yue b/spec/inputs/unicode/comprehension.yue new file mode 100644 index 0000000..52debf2 --- /dev/null +++ b/spec/inputs/unicode/comprehension.yue | |||
@@ -0,0 +1,52 @@ | |||
1 | |||
2 | -- see lists.moon for list comprehension tests | ||
3 | |||
4 | 列表 = {1,2,3,4,5,6} | ||
5 | 输出 = {元素, 元素 * 2 for 元素 in 对象数组} | ||
6 | |||
7 | |||
8 | 字典x = 你好: "世界", 好吧: 2323 | ||
9 | |||
10 | 复制 = {键, 值 for 键, 值 in pairs 对象x when 键 != "好吧"} | ||
11 | |||
12 | -- | ||
13 | |||
14 | _无效变量 = { 解包(元素) for 元素 in 是的 } | ||
15 | _无效变量 = { 解包(元素) for 元素 in *是的 } | ||
16 | |||
17 | _无效变量 = { 元素元素 for 元素 in 是的 } | ||
18 | _无效变量 = { 解包 [对象 * 计数 for 计数, 对象 in ipairs x对象] for x对象 in *{{1,2}, {3,4}} } | ||
19 | |||
20 | |||
21 | -- | ||
22 | |||
23 | 变量1 = [计数 for 计数 = 1, 10] | ||
24 | 变量2 = [计数 for 计数 = 1, 10 when 计数 % 2 == 1] | ||
25 | |||
26 | 变量aa = [{计数x,计数y} for 计数x=1,10 for 计数y=5,14] | ||
27 | 变量bb = [对象y for 元素 in 对象y for 计数i=1,10] | ||
28 | 变量cc = [对象y for 计数=1,10 for 元素 in 对象y] | ||
29 | 变量dd = [对象y for 计数=1,10 when 酷 for 元素 in 对象y when 变量x > 3 when 变量c + 3] | ||
30 | |||
31 | _无效变量 = {"你好", "世界" for 计数=1,10} | ||
32 | |||
33 | -- | ||
34 | |||
35 | 变量j = [元素a for {元素a,元素b,元素c} in 很多东西] | ||
36 | 变量k = [元素a for {元素a,元素b,元素c} in *很多东西] | ||
37 | 变量i = [你好 for {:你好, :世界} in *很多东西] | ||
38 | |||
39 | 变量hj = {元素a,元素c for {元素a,元素b,元素c} in 很多东西} | ||
40 | 变量hk = {元素a,元素c for {元素a,元素b,元素c} in *很多东西} | ||
41 | 变量hi = {你好,世界 for {:你好,:世界} in *很多东西} | ||
42 | |||
43 | 没错(元素a,元素b,元素c) for {元素a,元素b,元素c} in 很多东西 | ||
44 | |||
45 | -- | ||
46 | |||
47 | _无效变量 = [项目 for 项目 in *列表[1 + 2,3+4]] | ||
48 | _无效变量 = [项目 for 项目 in *列表[你好! * 4, 2 - 东西[4]]] | ||
49 | |||
50 | 列表 = [项目?\调用 123 for 项目 in 列表] | ||
51 | |||
52 | nil | ||
diff --git a/spec/inputs/unicode/cond.yue b/spec/inputs/unicode/cond.yue new file mode 100644 index 0000000..362408c --- /dev/null +++ b/spec/inputs/unicode/cond.yue | |||
@@ -0,0 +1,232 @@ | |||
1 | |||
2 | 你很酷 = false | ||
3 | |||
4 | _无效变量 = if 酷 | ||
5 | if 你很酷 | ||
6 | 一 | ||
7 | else if 吃东西 | ||
8 | 好 | ||
9 | else | ||
10 | _无效变量 = 二 | ||
11 | 三 | ||
12 | else | ||
13 | 否 | ||
14 | |||
15 | _无效变量 = if 酷 then 否 | ||
16 | _无效变量 = if 酷 then 否 else 是 | ||
17 | |||
18 | if 酷 then 喔 酷 else | ||
19 | 没那么 酷 | ||
20 | |||
21 | if 在工作 | ||
22 | _无效变量 = if 酷 then if 酷 then 好吧 else 什么 else 呐 | ||
23 | |||
24 | |||
25 | if ✌️ then 无 日 elseif 酷 我 then 好吧 呀 else u型 路 | ||
26 | if ✌️ then 无 父 else if 酷 你 then 好吧 吧 else p型 路 | ||
27 | |||
28 | |||
29 | if (->)() then 随便 怎样 | ||
30 | |||
31 | if nil then 翻转 我 else | ||
32 | 这个 是, 弧度 | ||
33 | |||
34 | |||
35 | if 东西 不错 then 没 法 elseif 好的 确定 | ||
36 | 什么 这里 | ||
37 | |||
38 | |||
39 | if 很多东西 then 没 机会 | ||
40 | elseif 好吧 | ||
41 | 现在 怎么办 | ||
42 | |||
43 | |||
44 | if 很多东西 | ||
45 | 是 伙计 | ||
46 | elseif 好的 人 then 嗨 好呀 else 嗯 确定 | ||
47 | |||
48 | if 我们 走吧 | ||
49 | 打印 "打招呼" | ||
50 | elseif "只有我们" | ||
51 | 打印 "威尔史密斯" else 显示 5555555 | ||
52 | |||
53 | -- | ||
54 | |||
55 | if 某东西 = 10 | ||
56 | 打印 某东西 | ||
57 | else | ||
58 | 打印 "其它" | ||
59 | |||
60 | 你好 = if 某东西 = 10 | ||
61 | 打印 某东西 | ||
62 | else | ||
63 | 打印 "其它" | ||
64 | |||
65 | |||
66 | 你好 = 5 + if 某东西 = 10 | ||
67 | 打印 某东西 | ||
68 | |||
69 | --- | ||
70 | |||
71 | z变量 = false | ||
72 | |||
73 | _无效变量 = if false | ||
74 | 一 | ||
75 | elseif 条件x = true | ||
76 | 二 | ||
77 | elseif 条件z = true | ||
78 | 三 | ||
79 | else | ||
80 | 四 | ||
81 | |||
82 | |||
83 | 输出 = if false | ||
84 | 一 | ||
85 | elseif 条件x = true | ||
86 | 二 | ||
87 | elseif 条件z = true | ||
88 | 三 | ||
89 | else | ||
90 | 四 | ||
91 | |||
92 | 变量 = -> | ||
93 | if 某东西 = true | ||
94 | 1 | ||
95 | elseif 另一个 = false | ||
96 | 2 | ||
97 | |||
98 | --- | ||
99 | |||
100 | unless true | ||
101 | 打印 "酷!" | ||
102 | |||
103 | unless true and false | ||
104 | 打印 "酷!" | ||
105 | |||
106 | unless false then 打印 "酷!" | ||
107 | unless false then 打印 "酷!" else 打印 "no way!" | ||
108 | |||
109 | unless nil | ||
110 | 打印 "hello" | ||
111 | else | ||
112 | 打印 "world" | ||
113 | |||
114 | -- | ||
115 | |||
116 | x = unless true | ||
117 | 打印 "酷!" | ||
118 | |||
119 | x = unless true and false | ||
120 | 打印 "酷!" | ||
121 | |||
122 | y = unless false then 打印 "酷!" | ||
123 | y = unless false then 打印 "酷!" else 打印 "没门!" | ||
124 | |||
125 | z = unless nil | ||
126 | 打印 "你好" | ||
127 | else | ||
128 | 打印 "世界" | ||
129 | |||
130 | 打印 unless true | ||
131 | 打印 "酷!" | ||
132 | |||
133 | 打印 unless true and false | ||
134 | 打印 "酷!" | ||
135 | |||
136 | 打印 unless false then 打印 "酷!" | ||
137 | 打印 unless false then 打印 "酷!" else 打印 "没门!" | ||
138 | |||
139 | 打印 unless nil | ||
140 | 打印 "你好" | ||
141 | else | ||
142 | 打印 "世界" | ||
143 | |||
144 | -- | ||
145 | |||
146 | 打印 "你好" unless 值 | ||
147 | |||
148 | 变量dddd = {1,2,3} unless 值 | ||
149 | |||
150 | |||
151 | -- | ||
152 | |||
153 | do | ||
154 | j变量 = 100 | ||
155 | unless j变量 = 嗨! | ||
156 | 错误 "不是 j变量!" | ||
157 | |||
158 | ---------------- | ||
159 | |||
160 | 变量a = 12 | ||
161 | 变量a,变量c,变量b = "酷", nil, nil if 某东西 | ||
162 | |||
163 | |||
164 | |||
165 | --- | ||
166 | |||
167 | 变量j = if 1 | ||
168 | if 2 | ||
169 | 3 | ||
170 | else 6 | ||
171 | |||
172 | |||
173 | 变量m = if 1 | ||
174 | |||
175 | |||
176 | |||
177 | if 2 | ||
178 | |||
179 | |||
180 | 3 | ||
181 | |||
182 | |||
183 | else 6 | ||
184 | |||
185 | do | ||
186 | 函数a | ||
187 | :字段b | ||
188 | return if 函数a | ||
189 | :字段b | ||
190 | else if 函数c | ||
191 | 字段d: 变量e | ||
192 | else | ||
193 | 字段f: 123 | ||
194 | |||
195 | do | ||
196 | 函数c | ||
197 | 字段d: 变量e | ||
198 | if 条件a | ||
199 | :字段b = 变量tb | ||
200 | elseif 条件c | ||
201 | 字段d: 变量e = 变量tb | ||
202 | |||
203 | if :派 = 数学库 | ||
204 | 打印 派 | ||
205 | |||
206 | do | ||
207 | local 数学库 | ||
208 | if :派 = 数学库 | ||
209 | 打印 派 | ||
210 | |||
211 | do | ||
212 | if _模块 = {} | ||
213 | :东西 = _模块 | ||
214 | :a功能, :b功能 = _模块 | ||
215 | |||
216 | do | ||
217 | global _模块 | ||
218 | if _模块 = {} | ||
219 | :东西 = _模块 | ||
220 | :a功能, :b功能 = _模块 | ||
221 | |||
222 | do | ||
223 | 变量v = if 1 and do | ||
224 | 0 ~= 1 | ||
225 | 1 | ||
226 | else | ||
227 | 2 | ||
228 | |||
229 | nil | ||
230 | |||
231 | |||
232 | |||
diff --git a/spec/inputs/unicode/destructure.yue b/spec/inputs/unicode/destructure.yue new file mode 100644 index 0000000..5efdf82 --- /dev/null +++ b/spec/inputs/unicode/destructure.yue | |||
@@ -0,0 +1,228 @@ | |||
1 | |||
2 | do | ||
3 | {元素a, 元素b} = 你好 | ||
4 | |||
5 | {{元素a}, 元素b, {元素c}} = 你好 | ||
6 | |||
7 | { :你好, :世界 } = 值 | ||
8 | |||
9 | do | ||
10 | { 是: 否, 东西 } = 世界 | ||
11 | |||
12 | {:字段a,:字段b,:字段c,:d字段} = 好 | ||
13 | |||
14 | {a元素}, 变量b = 一, 二 | ||
15 | {b元素}, 变量c = 一, nil | ||
16 | {d元素}, 变量e = 一, 二 | ||
17 | |||
18 | 变量x, {元素y} = 一, 二 | ||
19 | |||
20 | 变量xx, 变量yy = 1, 2 | ||
21 | {元素yy, 元素xx} = {变量xx, 变量yy} | ||
22 | |||
23 | {元素a, :字段b, 元素c, :字段d, 元素e, :字段f, 元素g} = 表 | ||
24 | |||
25 | do :字段a, :字段b, 变量c = 表, nil | ||
26 | |||
27 | do 变量a, :字段b, :字段c = 表, _无效变量 | ||
28 | |||
29 | do :字段a, 变量b, :字段c = 表, _无效变量, _无效变量 | ||
30 | |||
31 | --- | ||
32 | |||
33 | do | ||
34 | 未来人们 = | ||
35 | 雕刻家: "翁贝托·博乔尼" | ||
36 | 画家: "弗拉基米尔·伯留克" | ||
37 | 诗人: | ||
38 | 姓名: "F.T.马里内蒂" | ||
39 | 地址: { | ||
40 | "罗马42R大街" | ||
41 | "贝拉焦,意大利 22021" | ||
42 | } | ||
43 | |||
44 | do {诗人: {:姓名, 地址: {街道, 城市}}} = 未来人们 | ||
45 | |||
46 | do { | ||
47 | :雕刻家 | ||
48 | :画家 | ||
49 | 诗人: | ||
50 | :姓名 | ||
51 | 地址: | ||
52 | * 街道 | ||
53 | * 城市 | ||
54 | } = 未来人们 | ||
55 | |||
56 | do | ||
57 | 字段a: | ||
58 | 字段b: 变量c | ||
59 | 字段d: 变量e = 对象tb | ||
60 | |||
61 | do | ||
62 | 字段a: | ||
63 | * 字段b: 变量c | ||
64 | * 字段d: 变量e | ||
65 | * 元素f = 对象tb | ||
66 | |||
67 | -- | ||
68 | |||
69 | do | ||
70 | { @世界 } = 变量x | ||
71 | { 对象a.字段b, 对象c.字段y, 函数!.字段z } = 变量x | ||
72 | |||
73 | { 世界: @世界 } = 变量x | ||
74 | |||
75 | -- | ||
76 | |||
77 | do | ||
78 | 东西 = {{1,2}, {3,4}} | ||
79 | |||
80 | for {元素x,元素y} in *东西 | ||
81 | 打印 元素x,元素y | ||
82 | |||
83 | |||
84 | -- | ||
85 | |||
86 | do | ||
87 | with {元素a,元素b} = 东西 | ||
88 | 打印 元素a, 元素b | ||
89 | |||
90 | |||
91 | -- | ||
92 | |||
93 | do | ||
94 | 东西 = nil | ||
95 | if {元素a} = 东西 | ||
96 | 打印 元素a | ||
97 | else | ||
98 | 打印 "没东西" | ||
99 | |||
100 | 东东 = {1,2} | ||
101 | if {元素a,元素b} = 东东 | ||
102 | 打印 元素a,元素b | ||
103 | |||
104 | if {元素a,元素b} = 东西 | ||
105 | 打印 元素a,元素b | ||
106 | elseif {元素c,元素d} = 东东 | ||
107 | 打印 元素c,元素d | ||
108 | else | ||
109 | 打印 "不" | ||
110 | |||
111 | -- | ||
112 | |||
113 | do | ||
114 | 变量z = "好" | ||
115 | {元素a,元素b,元素c} = 变量z | ||
116 | |||
117 | do | ||
118 | {元素a,元素b,元素c} = 变量z | ||
119 | |||
120 | _ = (参数z) -> | ||
121 | {元素a,元素b,元素c} = 参数z | ||
122 | |||
123 | do | ||
124 | 变量z = "〇〇" | ||
125 | _ = (参数k) -> | ||
126 | {元素a,元素b,元素c} = 参数z | ||
127 | |||
128 | do | ||
129 | {函数:{结束:结束变量}} = 东西 | ||
130 | |||
131 | do | ||
132 | {如果:{元素a,元素b,元素c}} = 东西 | ||
133 | |||
134 | do | ||
135 | {:字段a, :字段b} = {字段a: "你好", 字段b: "世界"} if true | ||
136 | |||
137 | {天, 小时, 分钟, 秒} = [tonumber 元素 for 元素 in *{ | ||
138 | string.match "1 2 3 4", "(.+)%s(.+)%s(.+)%s(.+)" | ||
139 | }] | ||
140 | |||
141 | {:一, :二, :三} = {匹配结果, true for 匹配结果 in 随机对象\全局匹配("%S+")} | ||
142 | |||
143 | {:字段a},变量b = 对象a\如果(123) + 变量t, 123 | ||
144 | |||
145 | do | ||
146 | {:名称 = "没名字", :工作 = "没工作"} = 个人 | ||
147 | |||
148 | 请求 = (地址, 选项 = {}) -> | ||
149 | { | ||
150 | :方式 = "GET" | ||
151 | :请求头 = {} | ||
152 | :参数 = {} | ||
153 | :负载 = "" | ||
154 | :确认 | ||
155 | :错误 | ||
156 | :最终处理 | ||
157 | } = 选项 | ||
158 | 结果 = 发起请求(地址, 方式, 参数, 负载, 确认, 错误, 最终处理) | ||
159 | return 结果 | ||
160 | |||
161 | {键1: {键2: 值1 = 123}, :键3 = "abc"} = 对象tb | ||
162 | |||
163 | {<>: 元表 = {__index: {字段abc: 123}}, <>: {:<call> = (-> {}), :<add>}} = 对象tb | ||
164 | |||
165 | {字段x: {<>: 元表x = {}}, :y字段, z字段: z变量, :<index> = -> nil} = 对象tb | ||
166 | |||
167 | {<>: {函数: a对象.b字段(-> 123).字段c = 项目?.默认值}} = 对象tb | ||
168 | |||
169 | do | ||
170 | {<>: 元表 = {}, <sub>: 减函数} = 对象tb.字段x | ||
171 | |||
172 | do | ||
173 | {x字段: {<>: 元表 = {}, <sub>: 减函数}} = 对象tb | ||
174 | |||
175 | do | ||
176 | {元素a = 1, 元素b = 2, 字段c: {对像d.字段e = 3}} = 对象tb | ||
177 | |||
178 | for {左 = "null", 右 = false} in *元组列表 | ||
179 | 打印 左, 右 | ||
180 | |||
181 | do | ||
182 | {_, a元素, _, b元素} = 对象tb -- list placeholder | ||
183 | |||
184 | do | ||
185 | {字段x: 对象a.字段b = 1, y字段: a对象.c字段 = 2} = 对象x.字段x.字段x | ||
186 | |||
187 | do | ||
188 | const :宽, :高 = 视区.尺寸 | ||
189 | const {:x坐标 = 0.0, :y坐标 = 0.0} = 点 | ||
190 | |||
191 | do | ||
192 | 变量1, 变量2, 变量3, 数组a[], 变量d, {元素b}, 变量e, 对象c.<> = 1, 2, 3, 函数! | ||
193 | 变量y1, :字段y2, :字段y3, 变量y4 = 函数1!, 函数2! | ||
194 | |||
195 | do | ||
196 | { | ||
197 | [["abc"]]: 变量v1 = 111, | ||
198 | [1 + 1]: {变量v2 = 222, 变量v3 = 333}, | ||
199 | @x: 变量v4 = 444 | ||
200 | }, \ | ||
201 | 'x-y-z': 变量v5, [函数!]: {[函数2!]: 变量v6, 变量v7} = 对象tb, 对象tb2 | ||
202 | |||
203 | do | ||
204 | <[名称]>: 元值, [名称]: 值 = 对象tb | ||
205 | |||
206 | do | ||
207 | {:<tostring> = (-> "名称"), :<add>} = 对象tb | ||
208 | |||
209 | switch 对象tb | ||
210 | when {:<name> = "项目", <"123">: 元字段} | ||
211 | 打印 name, 元字段 | ||
212 | |||
213 | do | ||
214 | 对象tb = {} | ||
215 | <[变量a + 变量b]>: 变量v1, [函数c!]: 变量v2 = 对象tb | ||
216 | |||
217 | do | ||
218 | {a: {:<add> = 加函数}, b: {<[字段名]>: 字段 = 123}} = 对象tb | ||
219 | {<"字段abc">: 元字段 = "默认值", <[[任意 字符串]]>: 变量abc = 123, <'字符串'>: 有默认值 = {}} = 对象tb | ||
220 | |||
221 | switch 对象tb | ||
222 | when {字段a: {:<add> = 加函数}, b: {<[字段名]>: 字段 = 123}} | ||
223 | 打印 add, 字段 | ||
224 | switch tb | ||
225 | when {字段c: {<"字段abc">: 元字段 = "默认值"}, <[[any string]]>: {字段d: 变量abc = 123}, <'字符串'>: {字段e: 有默认值 = {}}} | ||
226 | 打印 元字段, 变量abc, 有默认值 | ||
227 | nil | ||
228 | |||
diff --git a/spec/inputs/unicode/do.yue b/spec/inputs/unicode/do.yue new file mode 100644 index 0000000..5b452bf --- /dev/null +++ b/spec/inputs/unicode/do.yue | |||
@@ -0,0 +1,27 @@ | |||
1 | |||
2 | do | ||
3 | 打印 "你好" | ||
4 | 打印 "世界" | ||
5 | |||
6 | 变量x = do | ||
7 | 打印 "你好" | ||
8 | 打印 "世界" | ||
9 | |||
10 | 变量y = do | ||
11 | 东西 = "shhh" | ||
12 | -> "你好: " .. 东西 | ||
13 | |||
14 | _ = -> if 某条件 then do "好的" | ||
15 | |||
16 | 变量t = { | ||
17 | y字段: do | ||
18 | 数字 = 100 | ||
19 | (参数x) -> 参数x + 数字 | ||
20 | } | ||
21 | |||
22 | (参数y=(do | ||
23 | 变量x = 10 + 2 | ||
24 | 变量x), 参数k=do | ||
25 | "没啥") -> do | ||
26 | "啊" | ||
27 | |||
diff --git a/spec/inputs/unicode/existential.yue b/spec/inputs/unicode/existential.yue new file mode 100644 index 0000000..0e35a39 --- /dev/null +++ b/spec/inputs/unicode/existential.yue | |||
@@ -0,0 +1,58 @@ | |||
1 | |||
2 | 函数1?! | ||
3 | |||
4 | 函数2? "参数0",123 | ||
5 | |||
6 | 变量x = 表?.值 | ||
7 | |||
8 | 打印 对象abc?["你好 世界"]?.字段xyz | ||
9 | |||
10 | if 打印 and 变量x? | ||
11 | 打印 变量x | ||
12 | |||
13 | @?\函数 998 | ||
14 | |||
15 | with 对象abc?!\函数?! | ||
16 | if \函数p? "abc" | ||
17 | return 123 | ||
18 | |||
19 | if {:x字段} = 对象a?.如果?\然后?(123)? @?\方法 998 | ||
20 | 打印 x字段 | ||
21 | |||
22 | 结果 = 对象b.方法\执行!\当?("没问题")\如果("默认",998)\函数? | ||
23 | 打印 结果 | ||
24 | |||
25 | 自我为中心 = true if 思想? and not 世界? | ||
26 | |||
27 | 速度 = 0 | ||
28 | 速度 or= 15 | ||
29 | |||
30 | 脚印 = 野人 or "熊" | ||
31 | |||
32 | 专业 = '计算机科学' | ||
33 | |||
34 | unless 专业? | ||
35 | 选修课程 '葡萄酒入门' | ||
36 | |||
37 | if 窗体? | ||
38 | 环境 = '浏览器(有可能)' | ||
39 | |||
40 | 邮编 = 抽奖.中奖者?!.地址?.邮政编码 | ||
41 | |||
42 | 长度 = utf8?.长度 or 字符串?.长度 or (对象) -> #对象 | ||
43 | |||
44 | 变量a = 表1?\结束? 123 + 表2?\然后 456 | ||
45 | |||
46 | 变量b = 表1?\结束? or 表2?\然后 | ||
47 | |||
48 | with? io.open "测试.txt", "w" | ||
49 | \write "你好" | ||
50 | \close! | ||
51 | |||
52 | 表?.<call>? 123 | ||
53 | |||
54 | with? 表.<>?.<index> | ||
55 | .字段a = 1 | ||
56 | |||
57 | nil | ||
58 | |||
diff --git a/spec/inputs/unicode/export.yue b/spec/inputs/unicode/export.yue new file mode 100644 index 0000000..151c5f5 --- /dev/null +++ b/spec/inputs/unicode/export.yue | |||
@@ -0,0 +1,90 @@ | |||
1 | |||
2 | export 变量a,变量b,变量c = 223, 343, 123 | ||
3 | export 酷 = "🧧" | ||
4 | |||
5 | 变量d,变量e,变量f = 3, 2, 1 | ||
6 | export 变量d, 变量e, 变量f | ||
7 | |||
8 | export class 某类 | ||
9 | 嗯: "酷" | ||
10 | |||
11 | export if 这个 | ||
12 | 232 | ||
13 | else | ||
14 | 4343 | ||
15 | |||
16 | export 什么 = if 这个 | ||
17 | 232 | ||
18 | else | ||
19 | 4343 | ||
20 | |||
21 | export 变量y = -> | ||
22 | 你好 = 3434 | ||
23 | |||
24 | export with 临时 | ||
25 | 变量j = 2000 | ||
26 | |||
27 | export cb的值 = do | ||
28 | 变量h = 100 | ||
29 | (参数)<- 函数 | ||
30 | return 参数 h变量 | ||
31 | |||
32 | export 丫丫 = -> | ||
33 | 变量h = 100 | ||
34 | 变量k = 100 | ||
35 | |||
36 | export switch 变量h | ||
37 | when 100, 150 then 200 | ||
38 | when 200 then 300 | ||
39 | else 0 | ||
40 | |||
41 | export 常量 = switch 值 | ||
42 | when "好" then 1 | ||
43 | when "更好" then 2 | ||
44 | when "最好" then 3 | ||
45 | |||
46 | export 项目 = 123 | ||
47 | |> 函数 | ||
48 | |||
49 | export 变量x | ||
50 | |||
51 | 函数 if 条件a then 值b | ||
52 | 函数 do 123 | ||
53 | 函数 switch 对象a | ||
54 | when 变量b then 值c | ||
55 | 函数 [计数 for 计数 = 1,10] | ||
56 | 函数 for 计数 = 1,10 do 计数 | ||
57 | 函数 {键,值 for 键,值 in pairs 表} | ||
58 | 函数 for 键,值 in pairs 表 do {键,值} | ||
59 | 函数 while 条件a do true | ||
60 | 函数 with 条件a | ||
61 | .字段b = 123 | ||
62 | 函数 对象a?.字段b | ||
63 | 函数 对象a\字段b | ||
64 | 函数 class A类 | ||
65 | |||
66 | _ = "#{if 条件a then 值b}" | ||
67 | _ = "#{do 123}" | ||
68 | _ = "#{switch 对象a | ||
69 | when 变量b then 值c}" | ||
70 | _ = "#{[计数 for 计数 = 1,10]}" | ||
71 | _ = "#{for 计数 = 1,10 do 计数}" | ||
72 | _ = "#{{键,值 for 键,值 in pairs 表}}" | ||
73 | _ = "#{for 键,值 in pairs 表 do {键,值}}" | ||
74 | _ = "#{while 条件a do true}" | ||
75 | _ = "#{with 对象a | ||
76 | .字段b = 123}" | ||
77 | _ = "#{对象a?.字段b}" | ||
78 | _ = "#{对象a\字段b}" | ||
79 | _ = "#{class A类}" | ||
80 | |||
81 | local * | ||
82 | 变量1 = 1 | ||
83 | export 变量2 = 2 | ||
84 | export 变量3 = class 类4 | ||
85 | 变量5 = 5 | ||
86 | |||
87 | export.<"🀄️"> = 1 | ||
88 | export.<name> = "导出" | ||
89 | export.<call> = => {} | ||
90 | export["导出-任意-名称"] = 123 | ||
diff --git a/spec/inputs/unicode/export_default.yue b/spec/inputs/unicode/export_default.yue new file mode 100644 index 0000000..74ec10e --- /dev/null +++ b/spec/inputs/unicode/export_default.yue | |||
@@ -0,0 +1,15 @@ | |||
1 | |||
2 | 打印 "没问题" | ||
3 | |||
4 | export default -> | ||
5 | 打印 "你好" | ||
6 | 123 | ||
7 | |||
8 | (参数x, 回调y)<- 函数 123, "abc" unless 是否结束 | ||
9 | 打印 参数x | ||
10 | (参数y, 结果)<- 回调y | ||
11 | return if 结果 | ||
12 | 变量abc + 参数y | ||
13 | else | ||
14 | 变量abc | ||
15 | |||
diff --git a/spec/inputs/unicode/funcs.yue b/spec/inputs/unicode/funcs.yue new file mode 100644 index 0000000..c563356 --- /dev/null +++ b/spec/inputs/unicode/funcs.yue | |||
@@ -0,0 +1,161 @@ | |||
1 | |||
2 | |||
3 | 变量x = -> 打印 什么 | ||
4 | |||
5 | _无效变量 = -> | ||
6 | |||
7 | _无效变量 = -> -> -> | ||
8 | |||
9 | 到 谷 仓 去 | ||
10 | |||
11 | 开 -> 这扇 -> 门 | ||
12 | |||
13 | 开 -> | ||
14 | 这扇 门 | ||
15 | 你好 = -> | ||
16 | 我的 函数 | ||
17 | |||
18 | 变量h = -> 👋 | ||
19 | |||
20 | 吃 ->, 世界 | ||
21 | |||
22 | |||
23 | (->)() | ||
24 | |||
25 | 变量x = (...) -> | ||
26 | |||
27 | 你好! | ||
28 | 你好.世界! | ||
29 | |||
30 | _无效变量 = 你好!.某物 | ||
31 | _无效变量 = 什么!["🥵🥵🥵"] | ||
32 | |||
33 | 什! 么! 情况! | ||
34 | |||
35 | _无效变量 = (参数a,参数b,参数c,参数d,参数e) -> | ||
36 | |||
37 | _无效变量 = (参数,参数,参数,参数,参数) -> | ||
38 | 打印 参数 | ||
39 | |||
40 | _无效变量 = (参数x=23023) -> | ||
41 | |||
42 | _无效变量 = (参数x=(参数y=()->) ->) -> | ||
43 | |||
44 | _无效变量 = (变量x = if 某物 then 好 else 坏) -> | ||
45 | |||
46 | 某物 = (你好=100, 世界=(参数x=[[好 酷]])-> 打印 "吃米饭") -> | ||
47 | 打印 你好 | ||
48 | |||
49 | _无效变量 = () => | ||
50 | _无效变量 = (参数x, 参数y) => | ||
51 | _无效变量 = (@参数x, @参数y) => | ||
52 | _无效变量 = (参数x=1) => | ||
53 | _无效变量 = (@参数x=1,参数y,@参数z="你好 世界") => | ||
54 | |||
55 | |||
56 | 变量x -> return | ||
57 | 变量y -> return 1 | ||
58 | 变量z -> return 1, "你好", "世界" | ||
59 | 变量k -> if 是 then return else return | ||
60 | |||
61 | _无效变量 = -> 真名 if 某物 | ||
62 | |||
63 | -- | ||
64 | |||
65 | 函数d( | ||
66 | -> | ||
67 | 打印 "你好 世界" | ||
68 | 10 | ||
69 | ) | ||
70 | |||
71 | |||
72 | |||
73 | 函数d( | ||
74 | 1,2,3 | ||
75 | 4 | ||
76 | 5 | ||
77 | 6 | ||
78 | |||
79 | if 某物 | ||
80 | 打印 "okay" | ||
81 | 10 | ||
82 | |||
83 | 10,20 | ||
84 | ) | ||
85 | |||
86 | |||
87 | 函数f( | ||
88 | |||
89 | )( | ||
90 | |||
91 | )( | ||
92 | 什么 | ||
93 | )(-> | ||
94 | 打印 "srue" | ||
95 | 123) | ||
96 | |||
97 | -- | ||
98 | |||
99 | 变量x = (参数a, | ||
100 | 参数b) -> | ||
101 | 打印 "什么" | ||
102 | |||
103 | |||
104 | 变量y = (参数a="hi", | ||
105 | 参数b=23) -> | ||
106 | 打印 "什么" | ||
107 | |||
108 | 变量z = ( | ||
109 | 参数a="hi", | ||
110 | 参数b=23) -> | ||
111 | 打印 "什么" | ||
112 | |||
113 | |||
114 | 变量j = (参数f,参数g,参数m, | ||
115 | 参数a="hi", | ||
116 | 参数b=23 | ||
117 | ) -> | ||
118 | 打印 "什么" | ||
119 | |||
120 | |||
121 | 变量y = (参数a="hi", | ||
122 | 参数b=23, | ||
123 | ...) -> | ||
124 | 打印 "什么" | ||
125 | |||
126 | |||
127 | 变量y = (参数a="hi", | ||
128 | 参数b=23, | ||
129 | ... | ||
130 | ) -> | ||
131 | 打印 "什么" | ||
132 | |||
133 | -- | ||
134 | |||
135 | 多参数 = (参数a | ||
136 | 参数b) -> | ||
137 | 打印 "什么" | ||
138 | |||
139 | |||
140 | 多参数 = (参数a="hi" | ||
141 | 参数b=23) -> | ||
142 | 打印 "什么" | ||
143 | |||
144 | 多参数 = ( | ||
145 | 参数a="hi" | ||
146 | 参数b=23) -> | ||
147 | 打印 "什么" | ||
148 | |||
149 | |||
150 | 多参数 = (参数f,参数g,参数m | ||
151 | 参数a="hi" | ||
152 | 参数b=23 | ||
153 | ) -> | ||
154 | 打印 "什么" | ||
155 | |||
156 | |||
157 | @ = (参数n)-> | ||
158 | return 1 if 参数n == 0 | ||
159 | 参数n * @(参数n-1) | ||
160 | |||
161 | nil | ||
diff --git a/spec/inputs/unicode/global.yue b/spec/inputs/unicode/global.yue new file mode 100644 index 0000000..6ababde --- /dev/null +++ b/spec/inputs/unicode/global.yue | |||
@@ -0,0 +1,77 @@ | |||
1 | |||
2 | do | ||
3 | global 全局变量a,全局变量b,全局变量c = 223, 343, nil | ||
4 | global 酷 = "📉" | ||
5 | |||
6 | do | ||
7 | global class 全局类 | ||
8 | 嗯: "🆒" | ||
9 | |||
10 | do | ||
11 | global 全局变量a,全局变量b,全局变量c | ||
12 | 全局变量a,全局变量b,变量c,变量d = "你好", nil, nil, nil | ||
13 | |||
14 | |||
15 | do | ||
16 | 什么 = if 这个 | ||
17 | 232 | ||
18 | else | ||
19 | 4343 | ||
20 | |||
21 | global ^ | ||
22 | |||
23 | 另一个 = 3434 | ||
24 | A另一个 = 7890 | ||
25 | |||
26 | if 内部 then Y好 = "10000" | ||
27 | |||
28 | 什么 = if 这个 | ||
29 | 232 | ||
30 | else | ||
31 | 4343 | ||
32 | |||
33 | |||
34 | do | ||
35 | global * | ||
36 | |||
37 | 什么 = if 这个 | ||
38 | 232 | ||
39 | else | ||
40 | 4343 | ||
41 | |||
42 | 全局变量x,全局变量y,全局变量z = 1,2,3 | ||
43 | |||
44 | 全局变量y = -> | ||
45 | 好的 = 3434 | ||
46 | |||
47 | with 全局临时变量 | ||
48 | 变量j = 2000 | ||
49 | |||
50 | |||
51 | do | ||
52 | global * | ||
53 | 变量x = 3434 | ||
54 | if 条件y then | ||
55 | 变量x = 10 | ||
56 | |||
57 | do | ||
58 | global * | ||
59 | if 条件y then | ||
60 | 变量x = 10 | ||
61 | 变量x = 3434 | ||
62 | |||
63 | do | ||
64 | do | ||
65 | global * | ||
66 | |||
67 | 变量k = 1212 | ||
68 | |||
69 | do | ||
70 | 变量h = 100 | ||
71 | |||
72 | 全局变量y = -> | ||
73 | 变量h = 100 | ||
74 | 变量k = 100 | ||
75 | |||
76 | 变量h = 100 | ||
77 | |||
diff --git a/spec/inputs/unicode/goto.yue b/spec/inputs/unicode/goto.yue new file mode 100644 index 0000000..8cba358 --- /dev/null +++ b/spec/inputs/unicode/goto.yue | |||
@@ -0,0 +1,41 @@ | |||
1 | do | ||
2 | 变量a = 0 | ||
3 | ::开始:: | ||
4 | 变量a += 1 | ||
5 | goto 结束 if 变量a == 5 | ||
6 | goto 开始 | ||
7 | ::结束:: | ||
8 | |||
9 | do | ||
10 | for 计数z = 1, 10 do for 计数y = 1, 10 do for 计数x = 1, 10 | ||
11 | if 计数x^2 + 计数y^2 == 计数z^2 | ||
12 | 打印 '找到了毕达哥拉斯三元组:', 计数x, 计数y, 计数z | ||
13 | goto 完成 | ||
14 | ::完成:: | ||
15 | |||
16 | do | ||
17 | for 计数z = 1, 10 | ||
18 | for 计数y = 1, 10 do for 计数x = 1, 10 | ||
19 | if 计数x^2 + 计数y^2 == 计数z^2 | ||
20 | 打印 '找到了毕达哥拉斯三元组:', 计数x, 计数y, 计数z | ||
21 | 打印 'now trying next z...' | ||
22 | goto 继续z | ||
23 | ::继续z:: | ||
24 | |||
25 | do | ||
26 | ::重做:: | ||
27 | for 计数x = 1, 10 do for 计数y = 1, 10 | ||
28 | if not 函数f 计数x, 计数y then goto 继续 | ||
29 | if not 函数g 计数x, 计数y then goto 跳过 | ||
30 | if not 函数h 计数x, 计数y then goto 重做 | ||
31 | ::继续:: | ||
32 | ::跳过:: | ||
33 | |||
34 | do | ||
35 | for 变量 in *列表 | ||
36 | if 变量 % 2 == 0 | ||
37 | 打印 '列表有偶数' | ||
38 | goto 有 | ||
39 | 打印 '列表没偶数' | ||
40 | ::有:: | ||
41 | |||
diff --git a/spec/inputs/unicode/import.yue b/spec/inputs/unicode/import.yue new file mode 100644 index 0000000..c229edb --- /dev/null +++ b/spec/inputs/unicode/import.yue | |||
@@ -0,0 +1,78 @@ | |||
1 | |||
2 | |||
3 | import 你好 from 好的 | ||
4 | import 好呀, 世界 from 表["酷"] | ||
5 | |||
6 | import 字段x, \字段y, 字段z from 道具组 | ||
7 | |||
8 | import 领主, \👻 from 找到 "我的表" | ||
9 | |||
10 | _obj_0 = 232 | ||
11 | |||
12 | import 某物 from 一个 表格 | ||
13 | |||
14 | |||
15 | if 缩进 | ||
16 | import 好吧, \很好 from 很多表[100] | ||
17 | |||
18 | do | ||
19 | import 字段a, 字段b, 字段c from 对象z | ||
20 | |||
21 | do | ||
22 | import 字段a, | ||
23 | 字段b, 字段c from 对象z | ||
24 | |||
25 | do | ||
26 | import 字段a | ||
27 | 字段b | ||
28 | 字段c from 对象z | ||
29 | |||
30 | do | ||
31 | import | ||
32 | 字段a | ||
33 | 字段b | ||
34 | 字段c from 对象z | ||
35 | |||
36 | |||
37 | do | ||
38 | import | ||
39 | 字段a | ||
40 | 字段b | ||
41 | 字段c | ||
42 | from 对象z | ||
43 | |||
44 | |||
45 | do | ||
46 | import '模块' | ||
47 | 打印 模块 | ||
48 | import '模块_x' | ||
49 | 打印 模块_x | ||
50 | import "下-划-线-模-块-啊" | ||
51 | 打印 下_划_线_模_块_啊 | ||
52 | import "模块.子模块" | ||
53 | 打印 子模块 | ||
54 | |||
55 | do | ||
56 | import "小玩家" as 大玩家 | ||
57 | import "lpeg库" as {:C, :Ct, :Cmt} | ||
58 | import "导出" as {一, 二, 某键:{嗯:{字符}}} | ||
59 | import "导出" as :又一个组件 | ||
60 | 打印 又一个组件 | ||
61 | |||
62 | do | ||
63 | global * | ||
64 | import '模块' | ||
65 | import '模块_x' | ||
66 | import "组织.包.模块-y" | ||
67 | 打印 模块_y | ||
68 | |||
69 | do | ||
70 | import "组织.包.模块" as 函数体:函数, 如果:如果变量 | ||
71 | |||
72 | do | ||
73 | import "块" as {<gc>: 变量b} | ||
74 | import "块" as {:<index>} | ||
75 | import "块" as {字段e: 变量f, <pairs>: 变量c} | ||
76 | import "块" as {字段c: 变量d} | ||
77 | import "块" as {元素g, {<close>: 变量i}} | ||
78 | |||
diff --git a/spec/inputs/unicode/in_expression.yue b/spec/inputs/unicode/in_expression.yue new file mode 100644 index 0000000..efaca47 --- /dev/null +++ b/spec/inputs/unicode/in_expression.yue | |||
@@ -0,0 +1,52 @@ | |||
1 | -变量a^2 in {1, 2, 3} |> 函数 | ||
2 | |||
3 | 变量a, 变量b = 函数x(...) not in [1, 3], 2 | ||
4 | |||
5 | 变量d = (对象.字段x.字段y ...) not in [1, 3] | ||
6 | |||
7 | 在的 = "东" in { "东", "西" } | ||
8 | |||
9 | if 变量a in {1} and 变量b in {2, 3, 4} or 变量c in [1, 10] | ||
10 | 打印 变量a, 变量b, 变量c | ||
11 | |||
12 | switch 值 | ||
13 | when 1, 2, 3 | ||
14 | 打印 "1, 2, 3" | ||
15 | |||
16 | when not in (0, 100] | ||
17 | 打印 "非 (0 < 值 <= 100)" | ||
18 | |||
19 | when in [200, 300) | ||
20 | 打印 "200 <= 值 < 300)" | ||
21 | |||
22 | when not in {333, 444, 555} | ||
23 | 打印 "非 333, 444 或 555" | ||
24 | |||
25 | do return 变量y not in (开始, 结束) | ||
26 | |||
27 | do | ||
28 | 存在 = 元素 in 表 | ||
29 | 检查 元素 in 表 | ||
30 | |||
31 | do | ||
32 | 对象 = 获取! | ||
33 | 存在 = 元素 in 表 | ||
34 | 检查 元素 in 表 | ||
35 | |||
36 | do | ||
37 | 对象 = 获取! | ||
38 | 列表 = {1, 2, 3} | ||
39 | 不存在 = 元素 not in 列表 | ||
40 | 检查 元素 in 列表 | ||
41 | 检查 元素 in {1, 2, 3} | ||
42 | 检查 元素(...) in {[1]: 1, [2]: 2, [3]: 3} | ||
43 | |||
44 | do | ||
45 | 检查 -> 对象x in 数组tb | ||
46 | 检查 -> 对象x not in 数组tb | ||
47 | local 对象x, 数组tb | ||
48 | 检查 -> return 对象x in 数组tb | ||
49 | 检查 -> 对象x not in 数组tb | ||
50 | |||
51 | nil | ||
52 | |||
diff --git a/spec/inputs/unicode/lists.yue b/spec/inputs/unicode/lists.yue new file mode 100644 index 0000000..6c3200b --- /dev/null +++ b/spec/inputs/unicode/lists.yue | |||
@@ -0,0 +1,67 @@ | |||
1 | |||
2 | 你好 = [变量x*2 for _, 变量x in ipairs{1,2,3,4}] | ||
3 | |||
4 | 物品 = {1,2,3,4,5,6} | ||
5 | |||
6 | _ = [变量z for 变量z in ipairs 物品 when 变量z > 4] | ||
7 | |||
8 | 半径 = [{变量a} for 变量a in ipairs { | ||
9 | 1,2,3,4,5,6, | ||
10 | } when 好数字 变量a] | ||
11 | |||
12 | _ = [变量z for 变量z in 物品 for 变量j in 列表 when 变量z > 4] | ||
13 | |||
14 | require "实用" | ||
15 | |||
16 | 倾倒 = (变量x) -> 打印 实用.倾倒 变量x | ||
17 | |||
18 | 范围 = (数量) -> | ||
19 | 变量i = 0 | ||
20 | return coroutine.wrap -> | ||
21 | while 变量i < 数量 | ||
22 | coroutine.yield 变量i | ||
23 | 变量i = 变量i + 1 | ||
24 | |||
25 | 倾倒 [变量x for 变量x in 范围 10] | ||
26 | 倾倒 [{变量x, 变量y} for 变量x in 范围 5 when 变量x > 2 for 变量y in 范围 5] | ||
27 | |||
28 | 东西 = [变量x + 变量y for 变量x in 范围 10 when 变量x > 5 for 变量y in 范围 10 when 变量y > 7] | ||
29 | |||
30 | 打印 变量x, 变量y for 变量x in ipairs{1,2,4} for 变量y in ipairs{1,2,3} when 变量x != 2 | ||
31 | |||
32 | 打印 "你好", 变量x for 变量x in 物品 | ||
33 | |||
34 | _ = [变量x for 变量x in 变量x] | ||
35 | 变量x = [变量x for 变量x in 变量x] | ||
36 | |||
37 | 打印 变量x, 变量y for 变量x in ipairs{1,2,4} for 变量y in ipairs{1,2,3} when 变量x != 2 | ||
38 | |||
39 | 双倍 = [变量x*2 for 变量x in *物品] | ||
40 | |||
41 | 打印 变量x for 变量x in *双倍 | ||
42 | |||
43 | 切 = [变量x for 变量x in *物品 when 变量x > 3] | ||
44 | |||
45 | 你好 = [变量x + 变量y for 变量x in *物品 for 变量y in *物品] | ||
46 | |||
47 | 打印 变量z for 变量z in *你好 | ||
48 | |||
49 | -- 切片 | ||
50 | 变量x = {1, 2, 3, 4, 5, 6, 7} | ||
51 | 打印 变量y for 变量y in *变量x[2,-5,2] | ||
52 | 打印 变量y for 变量y in *变量x[,3] | ||
53 | 打印 变量y for 变量y in *变量x[2,] | ||
54 | 打印 变量y for 变量y in *变量x[,,2] | ||
55 | 打印 变量y for 变量y in *变量x[2,,2] | ||
56 | |||
57 | 变量a, 变量b, 变量c = 1, 5, 2 | ||
58 | 打印 变量y for 变量y in *变量x[变量a,变量b,变量c] | ||
59 | |||
60 | 正常 = (你好) -> | ||
61 | [变量x for 变量x in 嗯哼] | ||
62 | |||
63 | 测试 = 变量x 1,2,3,4,5 | ||
64 | 打印 事情 for 事情 in *测试 | ||
65 | |||
66 | -> 变量a = 变量b for 行 in *行们 | ||
67 | |||
diff --git a/spec/inputs/unicode/literals.yue b/spec/inputs/unicode/literals.yue new file mode 100644 index 0000000..3d58096 --- /dev/null +++ b/spec/inputs/unicode/literals.yue | |||
@@ -0,0 +1,55 @@ | |||
1 | |||
2 | 数据 = { | ||
3 | 121 | ||
4 | 121.2323 | ||
5 | 121.2323e-1 | ||
6 | 121.2323e13434 | ||
7 | 2323E34 | ||
8 | 0x12323 | ||
9 | |||
10 | 0xfF2323 | ||
11 | 0xabcdef | ||
12 | 0xABCDEF | ||
13 | 0x123p-123 | ||
14 | 0xABCP+321 | ||
15 | 0x.1p-111 | ||
16 | 0xA_B_CP-3_2_1 | ||
17 | |||
18 | .2323 | ||
19 | .2323e-1 | ||
20 | .2323e13434 | ||
21 | |||
22 | |||
23 | 1LL | ||
24 | 1ULL | ||
25 | 9332LL | ||
26 | 9332 | ||
27 | 0x2aLL | ||
28 | 0x2aULL | ||
29 | |||
30 | 1_000_000.000_000_1 | ||
31 | 1_234e567_8 | ||
32 | 1_234E-567_8 | ||
33 | 0xDE_AD_BE_EF | ||
34 | |||
35 | [[ 你好 世界 ]] | ||
36 | |||
37 | [=[ 你好 世界 ]=] | ||
38 | [====[ 你好 世界 ]====] | ||
39 | |||
40 | "另一个 世界" | ||
41 | |||
42 | '哪个 世界' | ||
43 | |||
44 | |||
45 | " | ||
46 | 你好 世界 | ||
47 | " | ||
48 | |||
49 | '是的 | ||
50 | 发生了什么 | ||
51 | 这里有些很酷的东西' | ||
52 | |||
53 | } | ||
54 | 空值 | ||
55 | |||
diff --git a/spec/inputs/unicode/local.yue b/spec/inputs/unicode/local.yue new file mode 100644 index 0000000..b751eb6 --- /dev/null +++ b/spec/inputs/unicode/local.yue | |||
@@ -0,0 +1,91 @@ | |||
1 | |||
2 | do | ||
3 | local 变量a | ||
4 | local 变量a, 变量b, 变量c | ||
5 | |||
6 | 变量b, 变量g = 23232, nil | ||
7 | |||
8 | do | ||
9 | 变量x = 1212 | ||
10 | 某事 = -> | ||
11 | local 变量x | ||
12 | 变量x = 1212 | ||
13 | |||
14 | do | ||
15 | local * | ||
16 | 变量y = 2323 | ||
17 | 变量z = 2323 | ||
18 | |||
19 | do | ||
20 | local * | ||
21 | 打印 "啥也没有!" | ||
22 | |||
23 | do | ||
24 | local ^ | ||
25 | x变量 = 3434 | ||
26 | y变量 = 3434 | ||
27 | X大写 = 3434 | ||
28 | Y大写 = "好" | ||
29 | |||
30 | do | ||
31 | local ^ | ||
32 | x变量, y变量 = "a", "b" | ||
33 | |||
34 | do | ||
35 | local * | ||
36 | x变量, y变量 = "a", "b" | ||
37 | |||
38 | do | ||
39 | local * | ||
40 | if 某事 | ||
41 | x变量 = 2323 | ||
42 | |||
43 | do | ||
44 | local * | ||
45 | do | ||
46 | 变量x = "一" | ||
47 | |||
48 | 变量x = 100 | ||
49 | do | ||
50 | 变量x = "二" | ||
51 | |||
52 | do | ||
53 | local * | ||
54 | 变量k = if 什么 | ||
55 | 10 | ||
56 | 变量x = 100 | ||
57 | {变量a, 变量b, 变量c} = 变量y | ||
58 | |||
59 | do | ||
60 | local * | ||
61 | 变量a = 100 | ||
62 | 打印 "嗨" | ||
63 | 变量b = 200 | ||
64 | local * | ||
65 | 变量c = 100 | ||
66 | 打印 "嗨" | ||
67 | 变量d = 200 | ||
68 | 变量d = 2323 | ||
69 | |||
70 | do | ||
71 | local ^ | ||
72 | a小写 = 5 | ||
73 | A大写 = 3 | ||
74 | |||
75 | class O一 | ||
76 | F五 = 6 | ||
77 | |||
78 | class T二 | ||
79 | class N无 | ||
80 | |||
81 | do | ||
82 | local * | ||
83 | -- this generates a nil value in the body | ||
84 | for 变量a in *{} do _ = 变量a | ||
85 | |||
86 | do | ||
87 | local * | ||
88 | 变量x = 变量a or 变量b | ||
89 | |||
90 | 变量g = 2323 -- test if anything leaked | ||
91 | |||
diff --git a/spec/inputs/unicode/loops.yue b/spec/inputs/unicode/loops.yue new file mode 100644 index 0000000..ab01232 --- /dev/null +++ b/spec/inputs/unicode/loops.yue | |||
@@ -0,0 +1,194 @@ | |||
1 | |||
2 | for 变量x=1,10 | ||
3 | 打印 "yeah" | ||
4 | |||
5 | for 变量x=1,#某物 | ||
6 | 打印 "yeah" | ||
7 | |||
8 | for 变量y=100,60,-3 | ||
9 | 打印 "倒计时", 变量y | ||
10 | |||
11 | for 变量a=1,10 do 打印 "好的" | ||
12 | |||
13 | for 变量a=1,10 | ||
14 | for 变量b = 2,43 | ||
15 | 打印 变量a,变量b | ||
16 | |||
17 | for 变量i in 迭代器 | ||
18 | for 变量j in 是的 | ||
19 | 变量x = 343 + 变量i + 变量j | ||
20 | 打印 变量i, 变量j | ||
21 | |||
22 | for 变量x in *某物 | ||
23 | 打印 变量x | ||
24 | |||
25 | for 键,值 in pairs 你好 do 打印 键,值 | ||
26 | |||
27 | for 变量x in 变量y, 变量z | ||
28 | 打印 变量x | ||
29 | |||
30 | for 变量x in 变量y, 变量z, 键 | ||
31 | 打印 变量x | ||
32 | |||
33 | for 名称, 成员们 in *模块 | ||
34 | 打印 名称, 成员 | ||
35 | |||
36 | 变量x = -> | ||
37 | for 变量x in 变量y | ||
38 | 变量_ = 变量y | ||
39 | |||
40 | 你好 = {1,2,3,4,5} | ||
41 | |||
42 | 变量x = for 变量y in *你好 | ||
43 | if 变量y % 2 == 0 | ||
44 | 变量y | ||
45 | |||
46 | 变量x = -> | ||
47 | for 变量x in *你好 | ||
48 | 变量_ = 变量y | ||
49 | |||
50 | 表格 = for 变量i=10,20 do 变量i * 2 | ||
51 | |||
52 | 哦 = 0 | ||
53 | 变量y = for 变量j = 3,30, 8 | ||
54 | 哦 += 1 | ||
55 | 变量j * 哦 | ||
56 | |||
57 | 变量_ = -> | ||
58 | for 变量k=10,40 | ||
59 | 变量_ = "好的" | ||
60 | |||
61 | 变量_ = -> | ||
62 | return for 变量k=10,40 | ||
63 | "好的" | ||
64 | |||
65 | while true do 打印 "名称" | ||
66 | |||
67 | while 5 + 5 | ||
68 | 打印 "好的 世界" | ||
69 | 工作 人 | ||
70 | |||
71 | while 还有 do | ||
72 | 我 也 工作 | ||
73 | 变量_ = "好的" | ||
74 | |||
75 | 变量i = 0 | ||
76 | 变量x = while 变量i < 10 | ||
77 | 变量i += 1 | ||
78 | 变量i | ||
79 | |||
80 | -- values that can't be coerced | ||
81 | |||
82 | 变量x = for 东西 in *3 | ||
83 | 变量y = "你好" | ||
84 | break | ||
85 | |||
86 | 变量x = for 变量x=1,2 | ||
87 | 变量y = "你好" | ||
88 | 变量y | ||
89 | |||
90 | -- continue | ||
91 | |||
92 | while true | ||
93 | continue if false | ||
94 | 打印 "是的" | ||
95 | break if true | ||
96 | 打印 "不" | ||
97 | |||
98 | for 变量i = 1, 10 | ||
99 | while true | ||
100 | if not true | ||
101 | continue | ||
102 | break | ||
103 | |||
104 | 变量a = 1 | ||
105 | repeat | ||
106 | 变量a += 1 | ||
107 | if 变量a == 5 | ||
108 | continue | ||
109 | if 变量a == 6 | ||
110 | break | ||
111 | 打印 变量a | ||
112 | until 变量a == 10 | ||
113 | |||
114 | 变量x = 0 | ||
115 | repeat | ||
116 | 变量x += 1 | ||
117 | 变量y = 变量x | ||
118 | continue if 变量x < 5 | ||
119 | 打印 变量y | ||
120 | until 变量y == 10 | ||
121 | |||
122 | 变量a = 3 | ||
123 | until 变量a == 0 | ||
124 | 变量a -= 1 | ||
125 | 完成 = false | ||
126 | until 完成 do 完成 = true | ||
127 | repeat | ||
128 | 打印 "你好" | ||
129 | until true | ||
130 | until 完成 | ||
131 | 变量x = 10 | ||
132 | repeat | ||
133 | 变量x -= 1 | ||
134 | until 变量x == 0 | ||
135 | until 条件 | ||
136 | 打印 "好的" | ||
137 | |||
138 | for 变量x=1,10 | ||
139 | continue if 变量x > 3 and 变量x < 7 | ||
140 | 打印 变量x | ||
141 | |||
142 | 列表 = for 变量x=1,10 | ||
143 | continue if 变量x > 3 and 变量x < 7 | ||
144 | 变量x | ||
145 | |||
146 | for 变量a in *{1,2,3,4,5,6} | ||
147 | continue if 变量a == 1 | ||
148 | continue if 变量a == 3 | ||
149 | 打印 变量a | ||
150 | |||
151 | for 变量x=1,10 | ||
152 | continue if 变量x % 2 == 0 | ||
153 | for 变量y = 2,12 | ||
154 | continue if 变量y % 3 == 0 | ||
155 | |||
156 | while true | ||
157 | continue if false | ||
158 | break | ||
159 | |||
160 | while true | ||
161 | continue if false | ||
162 | return 22 | ||
163 | |||
164 | -- | ||
165 | |||
166 | do | ||
167 | 三重x = {1,2,3,4} | ||
168 | for 东西 in *三重x | ||
169 | 打印 东西 | ||
170 | |||
171 | do | ||
172 | for 变量i = 1, 10 | ||
173 | repeat | ||
174 | with? 对象tb | ||
175 | .字段a = 1 | ||
176 | continue if .字段b | ||
177 | do | ||
178 | if .字段c | ||
179 | break | ||
180 | until true | ||
181 | switch 变量x | ||
182 | when 123 | ||
183 | break | ||
184 | else | ||
185 | continue | ||
186 | if 变量y | ||
187 | continue | ||
188 | else | ||
189 | break | ||
190 | do do do | ||
191 | 打印 变量i | ||
192 | continue | ||
193 | 打印 "abc" | ||
194 | |||
diff --git a/spec/inputs/unicode/macro.yue b/spec/inputs/unicode/macro.yue new file mode 100644 index 0000000..79d3c07 --- /dev/null +++ b/spec/inputs/unicode/macro.yue | |||
@@ -0,0 +1,291 @@ | |||
1 | import "unicode.macro_export" as { | ||
2 | $, -- import all macros | ||
3 | $配置: $我的配置, -- rename macro $config to $myconfig | ||
4 | } | ||
5 | |||
6 | import "unicode.macro_todo" as $ | ||
7 | |||
8 | $断言集 对象 == nil | ||
9 | |||
10 | $我的配置 false | ||
11 | |||
12 | 结果 = $断言 对象 == nil | ||
13 | |||
14 | macro 和 = (...)-> | ||
15 | 值们 = [元素 for 元素 in *{...}] | ||
16 | $显示宏 "和", "#{ table.concat 值们, " and " }" | ||
17 | |||
18 | if $和 函数1! | ||
19 | 打印 "没问题" | ||
20 | |||
21 | if $和 函数1!, 函数2!, 函数3! | ||
22 | 打印 "没问题" | ||
23 | |||
24 | 对象 = $复制( | ||
25 | @ | ||
26 | {位置: {}, 标签: 标签::转数字!} | ||
27 | 标识 | ||
28 | 连接们 | ||
29 | 位置.x坐标 | ||
30 | 位置.y坐标 | ||
31 | 位置.z坐标 | ||
32 | ) | ||
33 | |||
34 | macro 在 = (目标, ...)-> | ||
35 | 值们 = [元素 for 元素 in *{...}] | ||
36 | $显示宏 "在", table.concat ["#{目标} == #{值}" for 值 in *值们], " or " | ||
37 | |||
38 | if 变量x |> $在 "🍎", "🐷", "🐶" | ||
39 | 打印 "存在" | ||
40 | |||
41 | macro 映射 = (数组, 动作)-> | ||
42 | $显示宏 "映射", "[#{动作} for _ in *#{数组}]" | ||
43 | |||
44 | macro 过滤 = (数组, 动作)-> | ||
45 | $显示宏 "过滤", "[_ for _ in *#{数组} when #{动作}]" | ||
46 | |||
47 | macro 合并 = (数组, 默认值, 动作)-> | ||
48 | $显示宏 "合并", "if ##{数组} == 0 | ||
49 | #{默认值} | ||
50 | else | ||
51 | _1 = #{默认值} | ||
52 | for _2 in *#{数组} | ||
53 | _1 = #{动作} | ||
54 | _1" | ||
55 | |||
56 | macro 每一个 = (数组, 动作)-> | ||
57 | $显示宏 "每一个", "for _ in *#{数组} | ||
58 | #{动作}" | ||
59 | |||
60 | macro 管道 = (...)-> | ||
61 | switch select "#", ... | ||
62 | when 0 then return "" | ||
63 | when 1 then return ... | ||
64 | 操作数组 = {...} | ||
65 | 最后一个 = 操作数组[1] | ||
66 | 声明数组 = for 计数 = 2, #操作数组 | ||
67 | 声明 = "\tlocal _#{计数} = #{最后一个} |> #{操作数组[计数]}" | ||
68 | 最后一个 = "_#{计数}" | ||
69 | 声明 | ||
70 | 结果 = "do | ||
71 | #{table.concat 声明数组, "\n"} | ||
72 | #{最后一个}" | ||
73 | $显示宏 "管道", 结果 | ||
74 | |||
75 | {1,2,3} |> $映射(_ * 2) |> $过滤(_ > 4) |> $每一个 打印 _ | ||
76 | |||
77 | $每一个 $过滤($映射({1,2,3}, _ * 2), _ > 4), 打印 _ | ||
78 | |||
79 | 值 = $管道( | ||
80 | {1, 2, 3} | ||
81 | [[$映射(_ * 2)]] | ||
82 | [[$过滤(_ > 4)]] | ||
83 | [[$合并(0, _1 + _2)]] | ||
84 | ) | ||
85 | |||
86 | macro 加 = (参数a, 参数b)-> "#{参数a} + #{参数b}" | ||
87 | |||
88 | $加(1,2)\调用 123 | ||
89 | |||
90 | 结果 = 1 |> $加 2 | ||
91 | |||
92 | macro 柯里化 = (...)-> | ||
93 | 参数数组 = {...} | ||
94 | 长度 = #参数数组 | ||
95 | 主体 = 参数数组[长度] | ||
96 | 定义 = table.concat ["(#{参数数组[计数]})->" for 计数 = 1, 长度 - 1] | ||
97 | "#{定义}\n#{主体\gsub "^do%s*\n",""}" | ||
98 | |||
99 | f = $柯里化 参数x,参数y,参数z,do | ||
100 | 打印 参数x,参数y,参数z | ||
101 | |||
102 | macro 获取里值 = (值)-> "do | ||
103 | 变量a = 1 | ||
104 | 变量a + 1" | ||
105 | |||
106 | macro 获取里值_保持卫生 = (值)-> "(-> | ||
107 | local 变量a = 1 | ||
108 | 变量a + 1)!" | ||
109 | |||
110 | do | ||
111 | 变量a = 8 | ||
112 | 变量a = $获取里值! | ||
113 | 变量a += $获取里值! | ||
114 | 打印 变量a | ||
115 | |||
116 | do | ||
117 | 变量a = 8 | ||
118 | 变量a = $获取里值_保持卫生! | ||
119 | 变量a += $获取里值_保持卫生! | ||
120 | 打印 变量a | ||
121 | |||
122 | macro Lua代码 = (代码)-> { | ||
123 | code: 代码 | ||
124 | type: "lua" | ||
125 | } | ||
126 | |||
127 | 变量x = 0 | ||
128 | |||
129 | $Lua代码 [[ | ||
130 | local function f(a) | ||
131 | return a + 1 | ||
132 | end | ||
133 | x = x + f(3) | ||
134 | ]] | ||
135 | |||
136 | $Lua代码[[ | ||
137 | function tb:func() | ||
138 | print(123) | ||
139 | end | ||
140 | ]] | ||
141 | |||
142 | 打印 变量x | ||
143 | |||
144 | macro 定义函数 = (函数名, ...)-> | ||
145 | 参数数组 = {...} | ||
146 | 最后一个 = table.remove 参数数组 | ||
147 | { | ||
148 | code: $显示宏 "定义函数", "local function #{函数名}(#{table.concat 参数数组, ', '}) | ||
149 | #{最后一个} | ||
150 | end" | ||
151 | type: "lua" | ||
152 | } | ||
153 | |||
154 | sel = (参数a, 参数b, 参数c)-> if 参数a then 参数b else 参数c | ||
155 | |||
156 | $定义函数 sel, a, b, c, [[ | ||
157 | if a then | ||
158 | return b | ||
159 | else | ||
160 | return c | ||
161 | end | ||
162 | ]] | ||
163 | |||
164 | $定义函数 dummy,[[]] | ||
165 | |||
166 | macro 插入注释 = (文本)-> { | ||
167 | code: "-- #{文本\match '[\'"](.*)[\'"]'}" | ||
168 | type: "lua" | ||
169 | } | ||
170 | |||
171 | $插入注释 "这有个注释" | ||
172 | |||
173 | import '下划线' as _ | ||
174 | |||
175 | macro 链式调用 = (...)-> | ||
176 | 主调用 = nil | ||
177 | for 元素 in *{...} | ||
178 | 主调用 = 主调用? and "(#{主调用})\\#{元素}" or 元素 | ||
179 | $显示宏 "链式调用", 主调用 | ||
180 | |||
181 | 结果a = $链式调用( | ||
182 | _{1, 2, 3, 4, -2, 3} | ||
183 | 链! | ||
184 | 映射 => @ * 2 | ||
185 | 过滤 => @ > 3 | ||
186 | 取值! | ||
187 | ) | ||
188 | |||
189 | $链式调用( | ||
190 | _{1, 2, 3, 4, -2, 3} | ||
191 | 链! | ||
192 | 映射 => @ * 2 | ||
193 | 过滤 => @ > 3 | ||
194 | 每一个 => 打印 @ | ||
195 | ) | ||
196 | |||
197 | 结果 = $链式调用( | ||
198 | 原点.变换.根节点.游戏对象\父节点! | ||
199 | 后代! | ||
200 | 选择启用! | ||
201 | 选择可见! | ||
202 | 标签等于 "fx" | ||
203 | 其中 (x)-> x.名称\结尾为 "(克隆)" | ||
204 | 摧毁! | ||
205 | ) | ||
206 | |||
207 | macro 链式调用B = (...)-> | ||
208 | switch select "#", ... | ||
209 | when 0 then return "" | ||
210 | when 1 then return ... | ||
211 | 参数数组 = {...} | ||
212 | 最后一个 = nil | ||
213 | 声明数组 = for 计数 = 1,#参数数组 | ||
214 | 声明 = if 计数 == #参数数组 | ||
215 | 最后的字符串 = 最后一个 and "#{最后一个}\\" or "" | ||
216 | "\t#{最后的字符串}#{参数数组[计数]}" | ||
217 | else | ||
218 | 最后的字符串 = 最后一个 and "#{最后一个}\\" or "" | ||
219 | "\tlocal _#{计数} = #{最后的字符串}#{参数数组[计数]}" | ||
220 | 最后一个 = "_#{计数}" | ||
221 | 声明 | ||
222 | 结果 = "do | ||
223 | #{table.concat 声明数组, '\n'} | ||
224 | " | ||
225 | $显示宏 "链式调用B", 结果 | ||
226 | |||
227 | $链式调用B( | ||
228 | 原点.变换.根节点.游戏对象\父节点! | ||
229 | 后代! | ||
230 | 选择启用! | ||
231 | 选择可见! | ||
232 | 标签等于 "fx" | ||
233 | 其中 (x)-> x.名称\结尾为 "(克隆)" | ||
234 | 摧毁! | ||
235 | ) | ||
236 | |||
237 | macro 链式调用C = (...)-> | ||
238 | import "yue" as {:to_lua} | ||
239 | 主调用 = nil | ||
240 | 编译配置 = { | ||
241 | implicit_return_root: false | ||
242 | reserve_line_number: false | ||
243 | } | ||
244 | for 参数 in *{...} | ||
245 | 参数转代码 = to_lua(参数,编译配置)\gsub '%s*$','' | ||
246 | if 主调用? | ||
247 | 主调用 = "#{主调用}:#{参数转代码}" | ||
248 | else | ||
249 | 主调用 = 参数转代码 | ||
250 | { | ||
251 | code: $显示宏 "链式调用C", 主调用 | ||
252 | type: "lua" | ||
253 | } | ||
254 | |||
255 | $链式调用C( | ||
256 | 原点.变换.根节点.游戏对象\父节点! | ||
257 | 后代! | ||
258 | 选择启用! | ||
259 | 选择可见! | ||
260 | 标签等于 "fx" | ||
261 | 其中 (x)-> x.名称\结尾为 "(克隆)" | ||
262 | 摧毁! | ||
263 | ) | ||
264 | |||
265 | macro 表 = -> "{'abc', 字段a:123, <call>:=> 998}" | ||
266 | 打印 $表[1], $表.字段a, ($表)!, $表! | ||
267 | |||
268 | 打印 "当前代码行数: #{ $LINE }" | ||
269 | |||
270 | $待办 | ||
271 | |||
272 | macro 跳过 = -> "" | ||
273 | |||
274 | do | ||
275 | 打印 1 | ||
276 | <- $跳过 | ||
277 | 打印 2 | ||
278 | 打印 3 | ||
279 | |||
280 | macro 跳过 = -> "while false do break" | ||
281 | |||
282 | _1 = -> | ||
283 | 打印 1 | ||
284 | <- $跳过 | ||
285 | 打印 2 | ||
286 | 打印 3 | ||
287 | |||
288 | macro 隐式返回宏是允许的 = -> "打印 'abc'\n123" | ||
289 | |||
290 | $隐式返回宏是允许的 | ||
291 | |||
diff --git a/spec/inputs/unicode/macro_export.yue b/spec/inputs/unicode/macro_export.yue new file mode 100644 index 0000000..3c9a942 --- /dev/null +++ b/spec/inputs/unicode/macro_export.yue | |||
@@ -0,0 +1,49 @@ | |||
1 | import "unicode.macro_todo" as $ | ||
2 | import "unicode.macro_todo" as {$, $todo: $待办} | ||
3 | |||
4 | export macro 配置 = (调试 = true)-> | ||
5 | global 调试模式 = 调试 == "true" | ||
6 | global 调试宏 = true | ||
7 | "" | ||
8 | |||
9 | export macro 显示宏 = (名称, 结果)-> | ||
10 | if 调试宏 then " | ||
11 | do | ||
12 | 文本 = #{结果} | ||
13 | print '[宏 ' .. #{名称} .. ']' | ||
14 | print 文本 | ||
15 | 文本 | ||
16 | " | ||
17 | else | ||
18 | 结果 | ||
19 | |||
20 | export macro 断言集 = (条件)-> | ||
21 | if 调试模式 | ||
22 | $显示宏 "断言集", "assert #{条件}" | ||
23 | else | ||
24 | "" | ||
25 | |||
26 | export macro 断言 = (条件)-> | ||
27 | if 调试模式 | ||
28 | $显示宏 "断言", "assert #{条件}" | ||
29 | else | ||
30 | "#{条件}" | ||
31 | |||
32 | export macro 复制 = (源, 目标, ...)-> | ||
33 | $断言集( | ||
34 | 源 != "_源_" and 源 != "_目标_" and 目标 != "_源_" and 目标 != "_目标_" | ||
35 | "复制目标的参数不能是 _源_ or _目标_" | ||
36 | ) | ||
37 | " | ||
38 | do | ||
39 | local _源_, _目标_ | ||
40 | with _目标_ = #{目标} | ||
41 | with _源_ = #{源} | ||
42 | #{table.concat for 字段 in *{...} do " | ||
43 | _目标_.#{字段} = _源_.#{字段} | ||
44 | "}" | ||
45 | |||
46 | $ -> | ||
47 | global 调试模式 = true | ||
48 | global 调试宏 = true | ||
49 | |||
diff --git a/spec/inputs/unicode/macro_todo.yue b/spec/inputs/unicode/macro_todo.yue new file mode 100644 index 0000000..0352a13 --- /dev/null +++ b/spec/inputs/unicode/macro_todo.yue | |||
@@ -0,0 +1,13 @@ | |||
1 | export macro 待办内部实现 = (模块, 行数, 消息)-> | ||
2 | print "待实现#{消息 and ': ' .. 消息 or ''}, 文件为: #{模块}, 代码行数: #{行数}" | ||
3 | { | ||
4 | code: "-- 待实现#{消息 and ': ' .. 消息 or ''}" | ||
5 | type: "lua" | ||
6 | } | ||
7 | |||
8 | export macro 待办 = (消息)-> | ||
9 | if 消息 | ||
10 | "$待办内部实现 $FILE, $LINE, #{消息}" | ||
11 | else | ||
12 | "$待办内部实现 $FILE, $LINE" | ||
13 | |||
diff --git a/spec/inputs/unicode/metatable.yue b/spec/inputs/unicode/metatable.yue new file mode 100644 index 0000000..1b7cb7b --- /dev/null +++ b/spec/inputs/unicode/metatable.yue | |||
@@ -0,0 +1,87 @@ | |||
1 | 变量a = 关闭: true, <close>: => 打印 "离开作用域" | ||
2 | 变量b = <add>: (左, 右)-> 右 - 左 | ||
3 | 变量c = 键1: true, :<add>, 键2: true | ||
4 | 变量w = <[名称]>:123, <"新建">:(值)=> {值} | ||
5 | 变量w.<>["新建"] 变量w.<>[名称] | ||
6 | |||
7 | do close _ = <close>: -> 打印 "离开作用域" | ||
8 | |||
9 | 变量d, 变量e = 变量a.关闭, 变量a.<close> | ||
10 | |||
11 | 变量f = 变量a\<close> 1 | ||
12 | 变量a.<add> = (x, y)-> x + y | ||
13 | |||
14 | do | ||
15 | {:新, :<close>, <close>: 关闭A} = 变量a | ||
16 | 打印 新, close, 关闭A | ||
17 | |||
18 | do | ||
19 | local * | ||
20 | 变量x, \ | ||
21 | {:新, :变量, :<close>, <close>: 关闭A}, \ | ||
22 | :num, :<add>, :<sub> \ | ||
23 | = 123, 变量a.变量b.变量c, 函数! | ||
24 | |||
25 | 变量x.abc, 变量a.变量b.<> = 123, {} | ||
26 | 函数!.<> = mt --, 额外 | ||
27 | 变量a, 变量b.变量c.<>, 变量d, 变量e = 1, mt, "abc", nil | ||
28 | |||
29 | 相同 = 变量a.<>.__index == 变量a.<index> | ||
30 | |||
31 | -- | ||
32 | 变量a.<> = __index: 表 | ||
33 | 变量a.<>.__index = 表 | ||
34 | 变量a.<index> = 表 | ||
35 | -- | ||
36 | |||
37 | mt = 变量a.<> | ||
38 | |||
39 | 表\函数 #列表 | ||
40 | 表\<"函数">列表 | ||
41 | 表\<"函数"> 列表 | ||
42 | |||
43 | import "模块" as :<index>, <newindex>:设置函数 | ||
44 | |||
45 | with 表 | ||
46 | 打印 .<add>, .x\<index> "key" | ||
47 | 变量a = .<index>.<add>\<"新建"> 123 | ||
48 | 变量b = t#.<close>.测试 | ||
49 | 变量c = t #.<close> .测试 | ||
50 | |||
51 | <>:mt = 变量a | ||
52 | 变量a = <>:mt | ||
53 | 变量a = <>:__index:mt | ||
54 | |||
55 | local index | ||
56 | <>:__index:索引 = 变量a | ||
57 | :<index> = 变量a | ||
58 | |||
59 | do <>:{新:构造, :更新} = 变量a | ||
60 | do {新:构造, :更新} = 变量a.<> | ||
61 | |||
62 | 表 = {} | ||
63 | do | ||
64 | 变量f = 表\<"值#{x < y}">(123, ...) | ||
65 | 变量f 表\<'值'> 123, ... | ||
66 | 表\<[[ | ||
67 | 值 | ||
68 | 1 | ||
69 | ]]>(123, ...) | ||
70 | return 表\<["值" .. tostring x > y]>(123, ...) | ||
71 | |||
72 | do | ||
73 | 变量f = 表\<'值'>(123, ...) | ||
74 | 变量f 表\<'值'>(123, ...) | ||
75 | 表\<'值'>(123, ...) | ||
76 | return 表\<'值'> 123, ... | ||
77 | |||
78 | do | ||
79 | 变量f = 表.<["值"]> 123, ... | ||
80 | 变量f = 表.<"值#{x < y}">(123, ...) | ||
81 | 变量f 表.<'值'> 123, ... | ||
82 | 表.<[[ 值 | ||
83 | 1]]>(123, ...) | ||
84 | return 表.<["值" .. tostring x > y]>(123, ...) | ||
85 | |||
86 | nil | ||
87 | |||
diff --git a/spec/inputs/unicode/multiline_chain.yue b/spec/inputs/unicode/multiline_chain.yue new file mode 100644 index 0000000..403f93b --- /dev/null +++ b/spec/inputs/unicode/multiline_chain.yue | |||
@@ -0,0 +1,99 @@ | |||
1 | 变量x = 变量a | ||
2 | .变量b | ||
3 | .变量c | ||
4 | --[[chain item]] .变量d | ||
5 | |||
6 | 变量x | ||
7 | .变量y = 变量a | ||
8 | .变量b | ||
9 | \变量c! | ||
10 | |||
11 | 函数 1, 参数2 | ||
12 | .值 | ||
13 | \获取!, 参数3 | ||
14 | .值 | ||
15 | \获取! | ||
16 | * 1 | ||
17 | * 变量x? | ||
18 | .变量y? | ||
19 | .变量z? | ||
20 | * 3 | ||
21 | |||
22 | 表bb = | ||
23 | 键1: 变量a | ||
24 | \变量b 123 | ||
25 | .变量c! | ||
26 | 键2: | ||
27 | 键w1: 变量a! | ||
28 | .变量b | ||
29 | \变量c! | ||
30 | |||
31 | 表b = 函数1{} | ||
32 | .变量a | ||
33 | |> 函数2? "abc", _ | ||
34 | |||
35 | 函数 = -> [变量a | ||
36 | .变量b | ||
37 | \变量c 123 for {变量a} in *值集合] | ||
38 | |||
39 | 函数1 = -> 变量x, 变量a | ||
40 | \变量b 123 | ||
41 | .变量c "abc" | ||
42 | |||
43 | 结果 = 原始 | ||
44 | .转换.root | ||
45 | .gameObject | ||
46 | \父节点! | ||
47 | \后代节点! | ||
48 | \选择启用! | ||
49 | \选择可见! | ||
50 | \标签相等 "fx" | ||
51 | \筛选 (元素)-> | ||
52 | if 元素\是否目标! | ||
53 | return false | ||
54 | 元素.名称\结束于 "(Clone)" | ||
55 | \销毁! | ||
56 | |||
57 | 原点.变换.根节点.游戏对象 | ||
58 | \父节点!\后代节点! | ||
59 | \选择启用! | ||
60 | \选择可见! | ||
61 | \标签相等 "fx" | ||
62 | \筛选 (元素)-> 元素.名称\结束于 "(Clone)" | ||
63 | \销毁! | ||
64 | |||
65 | with 项目 | ||
66 | .项目字段A = 123 | ||
67 | |||
68 | \调用方法!\连续调用! | ||
69 | |||
70 | \调用方法! | ||
71 | \连续调用! | ||
72 | \连续调用! | ||
73 | |||
74 | switch .项目字段B | ||
75 | \取值! | ||
76 | when "Valid", \获取项目状态! | ||
77 | \项目方法A!\取值! | ||
78 | else | ||
79 | \项目方法B! | ||
80 | \取值! | ||
81 | |||
82 | 变量a = if .项目字段C | ||
83 | .项目字段D | ||
84 | else | ||
85 | .项目字段E | ||
86 | |||
87 | for 变量v in *值集合 | ||
88 | \项目方法C 变量v | ||
89 | |||
90 | for 变量i = 1, 计数器 | ||
91 | \项目方法C 变量i | ||
92 | |||
93 | unless .变量b | ||
94 | .变量c = while .项目字段D | ||
95 | \下一个项目! | ||
96 | \取得! | ||
97 | |||
98 | nil | ||
99 | |||
diff --git a/spec/inputs/unicode/nil_coalescing.yue b/spec/inputs/unicode/nil_coalescing.yue new file mode 100644 index 0000000..104142e --- /dev/null +++ b/spec/inputs/unicode/nil_coalescing.yue | |||
@@ -0,0 +1,48 @@ | |||
1 | do | ||
2 | 变量a = 变量b ?? 变量c | ||
3 | |||
4 | do | ||
5 | :字段a = 变量b ?? 变量c | ||
6 | |||
7 | do | ||
8 | 变量a = 函数! | ||
9 | 变量a ??= false | ||
10 | |||
11 | do | ||
12 | 变量a ??= 函数! | ||
13 | |||
14 | do | ||
15 | local 变量a, 变量b, 变量c, 变量d, 变量e | ||
16 | 变量a = 变量b ?? 变量c ?? 变量d ?? 变量e | ||
17 | |||
18 | do | ||
19 | 变量a = 变量b ?? 变量c ?? 变量d ?? 变量e | ||
20 | |||
21 | do | ||
22 | 函数 变量x ?? "你好" | ||
23 | |||
24 | do | ||
25 | with 函数A! ?? 函数B! | ||
26 | 打印 .字段 | ||
27 | |||
28 | do | ||
29 | 变量a = 1 + 2 + 变量b ?? 变量c + 3 + 4 | ||
30 | |||
31 | do | ||
32 | 变量a = 1 + 2 + (变量b ?? 变量c) + 3 + 4 | ||
33 | |||
34 | do | ||
35 | :字段a, :字段b = 函数! | ||
36 | 变量a or= 1 | ||
37 | 变量b ??= 变量c ?? 2 | ||
38 | |||
39 | do | ||
40 | 变量a = 1 ?? 2 ?? 3 | ||
41 | |||
42 | do | ||
43 | 变量a.字段.字段 ??= 1 | ||
44 | 变量a = 变量b.字段 ?? 变量c.字段 ?? 变量d.字段 | ||
45 | 变量a.字段 ??= 1 | ||
46 | |||
47 | nil | ||
48 | |||
diff --git a/spec/inputs/unicode/operators.yue b/spec/inputs/unicode/operators.yue new file mode 100644 index 0000000..2f1184a --- /dev/null +++ b/spec/inputs/unicode/operators.yue | |||
@@ -0,0 +1,70 @@ | |||
1 | |||
2 | -- binary ops | ||
3 | 数字x = 1 + 3 | ||
4 | |||
5 | 数字y = 1 + | ||
6 | 3 | ||
7 | |||
8 | 数字z = 1 + | ||
9 | 3 + | ||
10 | 4 | ||
11 | |||
12 | -- | ||
13 | |||
14 | 数字k = 变量b and 变量c and | ||
15 | 变量g | ||
16 | |||
17 | 变量h = 东西 and | ||
18 | -> | ||
19 | 打印 "你好 世界" | ||
20 | |||
21 | -- TODO: should fail, indent still set to previous line so it thinks body is | ||
22 | -- indented | ||
23 | 变量i = 东西 or | ||
24 | -> | ||
25 | 打印 "你好 世界" | ||
26 | |||
27 | 变量p = 东西 and | ||
28 | -> | ||
29 | 打印 "你好 世界" | ||
30 | |||
31 | 变量s = 东西 or | ||
32 | -> and 234 | ||
33 | |||
34 | -- | ||
35 | 变量u = { | ||
36 | 颜色: 1 and 2 and | ||
37 | 3 | ||
38 | 4 | ||
39 | 4 | ||
40 | } | ||
41 | |||
42 | 变量v = { | ||
43 | 颜色: 1 and | ||
44 | -> | ||
45 | "yeah" | ||
46 | "great" | ||
47 | 好的: 3 ^ | ||
48 | 2 | ||
49 | } | ||
50 | |||
51 | -- parens | ||
52 | |||
53 | 变量nno = ( | ||
54 | 是的 + 2 ) | ||
55 | |||
56 | 变量nn = ( | ||
57 | 是的 + 2 | ||
58 | ) | ||
59 | |||
60 | 变量n = 你好( | ||
61 | 变量b | ||
62 | ) -> | ||
63 | |||
64 | 你好 变量a, | ||
65 | ( | ||
66 | 是的 + | ||
67 | 2 | ||
68 | ) - | ||
69 | 好的 | ||
70 | |||
diff --git a/spec/inputs/unicode/pipe.yue b/spec/inputs/unicode/pipe.yue new file mode 100644 index 0000000..2cd41ee --- /dev/null +++ b/spec/inputs/unicode/pipe.yue | |||
@@ -0,0 +1,84 @@ | |||
1 | |||
2 | {"abc", 123, 998} |> 每一个 打印 | ||
3 | |||
4 | {1,2,3} | ||
5 | |> 映射 (变量x)-> 变量x * 2 | ||
6 | |> 过滤 (变量x)-> 变量x > 4 | ||
7 | |> 合并 0, (变量a,变量b)-> 变量a + 变量b | ||
8 | |> 打印 | ||
9 | |||
10 | [i |> tostring for i = 0,10] |> table.concat(",") |> 打印 | ||
11 | |||
12 | 变量b = 1 + 2 + (4 |> tostring |> 打印(1) or 123) | ||
13 | |||
14 | if 变量x = 233 |> math.max 998 | ||
15 | 打印 变量x | ||
16 | |||
17 | with 变量b |> 创建? "new" | ||
18 | .value = 123 | ||
19 | 打印 \工作! | ||
20 | |||
21 | 123 |> 函数f? | ||
22 | |||
23 | "abc" |> 函数1? |> 函数2? | ||
24 | |||
25 | 变量c = "abc" |> 函数1? |> 函数2? | ||
26 | |||
27 | 函数f = -> | ||
28 | 参数 |> x.y?\如果 | ||
29 | |||
30 | 998 |> 函数2 "abc", 233 |> 函数0 |> 函数1 | ||
31 | 998 |> 函数0("abc", 233) |> 函数1 |> 函数2 | ||
32 | |||
33 | 1 |> 函数f 2, 3, 4, 5 | ||
34 | 值(2) |> 函数f 1, _, 3, 4, 5 | ||
35 | 数组[3] |> 函数f 1, 2, _, 4, 5 | ||
36 | |||
37 | 变量a = {"1","2","3"} |> table.concat("") |> tonumber |> 函数1(1, 2, 3, _) |> 函数2(1, _, 3) | ||
38 | |||
39 | 读文件("example.txt") |> | ||
40 | 提取(_, 语言, {}) |> | ||
41 | 解析(_, 语言) |> | ||
42 | 发出 |> | ||
43 | 渲染 |> | ||
44 | 打印 | ||
45 | |||
46 | 读文件("example.txt") \ | ||
47 | |> 提取(_, 语言, {}) \ | ||
48 | |> 解析(_, 语言) \ | ||
49 | |> 发出 \ | ||
50 | |> 渲染 \ | ||
51 | |> 打印 | ||
52 | |||
53 | 读文件 "example.txt" | ||
54 | |> 提取 _, 语言, {} | ||
55 | |> 解析 _, 语言 | ||
56 | |> 发出 | ||
57 | |> 渲染 | ||
58 | |> 打印 | ||
59 | |||
60 | 123 |> not 函数! |> 函数f | ||
61 | |||
62 | do | ||
63 | _1 = 列表{"abc","xyz","123"}\映射"#"\值! | ||
64 | |> -函数! | ||
65 | |> abc 123, _, "x" | ||
66 | |||
67 | global _2,_3,_4 = 1,2,3 | ||
68 | |> 函数f | ||
69 | |||
70 | local _5 = 变量v |> 函数1 1 | ||
71 | |> 函数2 2 | ||
72 | |> 函数3 3 | ||
73 | |> 函数4 4 | ||
74 | |||
75 | 变量x = 123 |> 函数a |> 函数b or 456 |> 函数c |> 函数d or 函数a.if\那么("abc") or 函数a?.函数b\函数c?(123) or 变量x\函数y | ||
76 | |||
77 | 变量x1 = 3 * -4 |> 函数f | ||
78 | |||
79 | 变量x2 = 3 * -2 ^ 2 |> 函数f | ||
80 | |||
81 | 变量y = 1 + not # 2 |> (函数a ^ 函数c) |> 函数b(3,_) * 4 ^ -123 |> 函数f |> 函数1 or 123 | ||
82 | |||
83 | nil | ||
84 | |||
diff --git a/spec/inputs/unicode/plus.yue b/spec/inputs/unicode/plus.yue new file mode 100644 index 0000000..b08974f --- /dev/null +++ b/spec/inputs/unicode/plus.yue | |||
@@ -0,0 +1,41 @@ | |||
1 | 变量x\执行 "工作" | ||
2 | |||
3 | 方法 变量a\执行!\结束("好")\如果 "abc", 123 | ||
4 | |||
5 | 结果 = 变量b.函数\执行!\当("好")\如果 "def", 998 | ||
6 | |||
7 | 变量c.重复.如果\然后("xyz")\否则 结果 | ||
8 | |||
9 | 打印 @循环, @@函数 123 | ||
10 | |||
11 | if 颜色 = 消息\匹配 "<%w*>" then 消息 = 消息\替换 "<%->", 颜色 | ||
12 | |||
13 | 消息 = 消息\替换 "<%->", 颜色 if 颜色 = 消息\匹配 "<%w*>" | ||
14 | |||
15 | 数值A = 方法! if 方法 = 获取方法! | ||
16 | |||
17 | local 数值A = 方法! if 方法 = 获取方法! | ||
18 | |||
19 | 数值B = do | ||
20 | 方法 = 获取方法! | ||
21 | 方法?! | ||
22 | |||
23 | global 背包 = | ||
24 | 东西: | ||
25 | 好的: 200 | ||
26 | 他们: -> | ||
27 | 打印 "你好" | ||
28 | 你的脚"小" | ||
29 | 美丽: 头发 | ||
30 | 黄金: 嗯哼 | ||
31 | 为什么: 1000 | ||
32 | |||
33 | 吃: 食物 | ||
34 | 好的: 朋友 | ||
35 | |||
36 | 开始 = | ||
37 | 东西: "冷" | ||
38 | |||
39 | local 洗澡 = | ||
40 | 在: "火" | ||
41 | |||
diff --git a/spec/inputs/unicode/return.yue b/spec/inputs/unicode/return.yue new file mode 100644 index 0000000..3fae635 --- /dev/null +++ b/spec/inputs/unicode/return.yue | |||
@@ -0,0 +1,66 @@ | |||
1 | -- testing `return` propagation | ||
2 | |||
3 | _ = -> _ = 变量x for 变量x in *物品 | ||
4 | _ = -> [变量x for 变量x in *物品] | ||
5 | |||
6 | |||
7 | -- doesn't make sense on purpose | ||
8 | do | ||
9 | for 变量x in *物品 do return 变量x | ||
10 | |||
11 | do | ||
12 | return [变量x for 变量x in *物品] | ||
13 | |||
14 | do | ||
15 | return {变量x,变量y for 变量x,变量y in *物品} | ||
16 | |||
17 | _ = -> | ||
18 | if 变量a | ||
19 | if 变量a | ||
20 | 变量a | ||
21 | else | ||
22 | 变量b | ||
23 | elseif 变量b | ||
24 | if 变量a | ||
25 | 变量a | ||
26 | else | ||
27 | 变量b | ||
28 | else | ||
29 | if 变量a | ||
30 | 变量a | ||
31 | else | ||
32 | 变量b | ||
33 | |||
34 | do | ||
35 | return if 变量a | ||
36 | if 变量a | ||
37 | 变量a | ||
38 | else | ||
39 | 变量b | ||
40 | elseif 变量b | ||
41 | if 变量a | ||
42 | 变量a | ||
43 | else | ||
44 | 变量b | ||
45 | else | ||
46 | if 变量a | ||
47 | 变量a | ||
48 | else | ||
49 | 变量b | ||
50 | |||
51 | do | ||
52 | return | ||
53 | :值 | ||
54 | 物品A: 123 | ||
55 | 物品B: "abc" | ||
56 | |||
57 | do | ||
58 | return | ||
59 | * 1 | ||
60 | * 2 | ||
61 | * ...三 | ||
62 | * 4 | ||
63 | |||
64 | _ = -> 变量a\变量b | ||
65 | do 变量a\变量b | ||
66 | |||
diff --git a/spec/inputs/unicode/string.yue b/spec/inputs/unicode/string.yue new file mode 100644 index 0000000..09851ec --- /dev/null +++ b/spec/inputs/unicode/string.yue | |||
@@ -0,0 +1,74 @@ | |||
1 | |||
2 | 你好 = "你好" | ||
3 | 问候 = "啥事,好吧" | ||
4 | 打印 你好 | ||
5 | |||
6 | 嗯 = '嗯' | ||
7 | |||
8 | 这里, 另一个 = "好的", '世界' | ||
9 | |||
10 | 呀 = "YU'M" | ||
11 | 你 '我说:"嗯"' | ||
12 | |||
13 | 打印 呀, 你 | ||
14 | |||
15 | 另一个 = [[ 你好 世界 ]] | ||
16 | |||
17 | 你好_那里 = [[ | ||
18 | 你好呀 | ||
19 | ]] | ||
20 | |||
21 | 好吧 = [==[ "helo" ]==] | ||
22 | |||
23 | 哈喽 = [===[ | ||
24 | eat noots]===] | ||
25 | |||
26 | 嗯嗯 = [[well trhere]] | ||
27 | |||
28 | 文字 = [[ | ||
29 | |||
30 | nil | ||
31 | Fail to compile | ||
32 | ]] | ||
33 | |||
34 | 文字[ [[abc]]] = [["#{变量i}" for 变量i = 1, 10] for 变量i = 1, 10]] | ||
35 | |||
36 | 哦哦 = "" | ||
37 | |||
38 | 变量x = "\\" | ||
39 | 变量x = "a\\b" | ||
40 | 变量x = "\\\n" | ||
41 | 变量x = "\"" | ||
42 | |||
43 | -- | ||
44 | |||
45 | 变量a = "你好 #{问候} 你好" | ||
46 | 变量b = "#{问候} 你好" | ||
47 | 变量c = "你好 #{5+1}" | ||
48 | 变量d = "#{你好 世界}" | ||
49 | 变量e = "#{1} #{2} #{3}" | ||
50 | |||
51 | 变量f = [[你好 #{世界} 世界]] | ||
52 | 变量g = "\#{你好 世界}" | ||
53 | |||
54 | -- | ||
55 | |||
56 | 变量a = '你好 #{问候} 你好' | ||
57 | 变量b = '#{问候} 你好' | ||
58 | 变量c = '你好 #{问候}' | ||
59 | |||
60 | |||
61 | -- | ||
62 | |||
63 | 变量_ = "你好" | ||
64 | "你好"\格式 1 | ||
65 | "你好"\格式(1,2,3) | ||
66 | "你好"\格式(1,2,3) 1,2,3 | ||
67 | |||
68 | "你好"\世界! | ||
69 | "你好"\格式!.问候 1,2,3 | ||
70 | "你好"\格式 1,2,3 | ||
71 | |||
72 | 某事"你好"\世界! | ||
73 | 某事 "你好"\世界! | ||
74 | |||
diff --git a/spec/inputs/unicode/stub.yue b/spec/inputs/unicode/stub.yue new file mode 100644 index 0000000..05a9191 --- /dev/null +++ b/spec/inputs/unicode/stub.yue | |||
@@ -0,0 +1,18 @@ | |||
1 | |||
2 | |||
3 | 变量x = { | ||
4 | 值: 100 | ||
5 | 你好: => | ||
6 | 打印 @val | ||
7 | } | ||
8 | |||
9 | 函数 = 变量x\值 | ||
10 | 打印 函数! | ||
11 | 打印 变量x\值! | ||
12 | |||
13 | |||
14 | -- ... should be bubbled up anon functions | ||
15 | ((...)-> 变量x = 你好(...)\世界)! | ||
16 | |||
17 | nil | ||
18 | |||
diff --git a/spec/inputs/unicode/switch.yue b/spec/inputs/unicode/switch.yue new file mode 100644 index 0000000..aa8ea74 --- /dev/null +++ b/spec/inputs/unicode/switch.yue | |||
@@ -0,0 +1,161 @@ | |||
1 | switch 值 | ||
2 | when "酷" | ||
3 | 打印 "你好,世界" | ||
4 | |||
5 | switch 值 | ||
6 | when "酷" | ||
7 | 打印 "你好,世界" | ||
8 | else | ||
9 | 打印 "好的,很棒" | ||
10 | |||
11 | switch 值 | ||
12 | when "酷" | ||
13 | 打印 "你好,世界" | ||
14 | when "是的" | ||
15 | 变量_ = [[FFFF]] + [[MMMM]] | ||
16 | when 2323 + 32434 | ||
17 | 打印 "好的" | ||
18 | else | ||
19 | 打印 "好的,很棒" | ||
20 | |||
21 | 输出 = switch 值 | ||
22 | when "酷" then 打印 "你好,世界" | ||
23 | else 打印 "好的,很棒" | ||
24 | |||
25 | 输出 = switch 值 | ||
26 | when "酷" then 变量x | ||
27 | when "哦" then 34340 | ||
28 | else error "这大大地失败了" | ||
29 | |||
30 | with 东西 | ||
31 | switch \值! | ||
32 | when .确定 | ||
33 | 变量_ = "世界" | ||
34 | else | ||
35 | 变量_ = "是的" | ||
36 | |||
37 | 修复 这个 | ||
38 | call_func switch 某物 | ||
39 | when 1 then "是" | ||
40 | else "否" | ||
41 | |||
42 | -- | ||
43 | |||
44 | switch 嗨 | ||
45 | when 你好 or 世界 | ||
46 | 变量_ = 绿色 | ||
47 | |||
48 | -- | ||
49 | |||
50 | switch 嗨 | ||
51 | when "一个", "两个" | ||
52 | 打印 "酷" | ||
53 | when "爸爸" | ||
54 | 变量_ = 否 | ||
55 | |||
56 | switch 嗨 | ||
57 | when 3+1, 你好!, (-> 4)! | ||
58 | 变量_ = 黄色 | ||
59 | else | ||
60 | 打印 "酷" | ||
61 | |||
62 | do | ||
63 | 字典 = { | ||
64 | {} | ||
65 | {1, 2, 3} | ||
66 | 变量a: 变量b: 变量c: 1 | ||
67 | 变量x: 变量y: 变量z: 1 | ||
68 | } | ||
69 | |||
70 | switch 字典 | ||
71 | when { | ||
72 | 第一 | ||
73 | {一个, 两个, 三个} | ||
74 | 变量a: 变量b: :变量c | ||
75 | 变量x: 变量y: :变量z | ||
76 | } | ||
77 | 打印 第一, 一个, 两个, 三个, 变量c, 变量z | ||
78 | |||
79 | do | ||
80 | 物品 = | ||
81 | * 变量x: 100 | ||
82 | 变量y: 200 | ||
83 | * 宽度: 300 | ||
84 | 高度: 400 | ||
85 | * false | ||
86 | |||
87 | for 物 in *物品 | ||
88 | switch 物 | ||
89 | when :变量x, :变量y | ||
90 | 打印 "Vec2 #{变量x}, #{变量y}" | ||
91 | when :宽度, :高度 | ||
92 | 打印 "Size #{宽度}, #{高度}" | ||
93 | when false | ||
94 | 打印 "没有" | ||
95 | when __类: 类 | ||
96 | switch 类 | ||
97 | when 类别A | ||
98 | 打印 "对象 A" | ||
99 | when 类别B | ||
100 | 打印 "对象 B" | ||
101 | when <>: 表 | ||
102 | 打印 "带有元表的表" | ||
103 | else | ||
104 | 打印 "物品不被接受!" | ||
105 | |||
106 | do | ||
107 | 表格 = {} | ||
108 | |||
109 | switch 表格 | ||
110 | when {:变量a = 1, :变量b = 2} | ||
111 | 打印 变量a, 变量b | ||
112 | |||
113 | switch 表格 | ||
114 | when {:变量a, :变量b = 2} | ||
115 | 打印 "部分匹配", 变量a, 变量b | ||
116 | |||
117 | switch 表格 | ||
118 | when {:变量a, :变量b} | ||
119 | 打印 变量a, 变量b | ||
120 | else | ||
121 | 打印 "没有匹配" | ||
122 | |||
123 | do | ||
124 | 表格 = 变量x: "abc" | ||
125 | switch 表格 | ||
126 | when :变量x, :变量y | ||
127 | 打印 "变量x: #{变量x} 和 变量y: #{变量y}" | ||
128 | when :变量x | ||
129 | 打印 "只有 变量x: #{变量x}" | ||
130 | |||
131 | do | ||
132 | 匹配 = switch 表格 | ||
133 | when 1 | ||
134 | "1" | ||
135 | when :变量x | ||
136 | 变量x | ||
137 | when false | ||
138 | "false" | ||
139 | else | ||
140 | nil | ||
141 | |||
142 | do | ||
143 | return switch 表格 | ||
144 | when nil | ||
145 | "无效" | ||
146 | when :变量a, :变量b | ||
147 | "#{变量a + 变量b}" | ||
148 | when 1, 2, 3, 4, 5 | ||
149 | "数字 1 - 5" | ||
150 | when {:匹配任何表格 = "后备"} | ||
151 | 匹配任何表格 | ||
152 | else | ||
153 | "除非它不是一个表格,否则不应到达这里" | ||
154 | |||
155 | do | ||
156 | switch 变量y | ||
157 | when {变量x: <>: 表} | ||
158 | 打印 表 | ||
159 | |||
160 | nil | ||
161 | |||
diff --git a/spec/inputs/unicode/syntax.yue b/spec/inputs/unicode/syntax.yue new file mode 100644 index 0000000..f382688 --- /dev/null +++ b/spec/inputs/unicode/syntax.yue | |||
@@ -0,0 +1,448 @@ | |||
1 | #!/this/is/ignored | ||
2 | |||
3 | 变量a = 1 + 2 * 3 / 6 | ||
4 | |||
5 | 变量a, 一堆, 去, 这里 = 另外, 世界, nil, nil | ||
6 | |||
7 | 函数 参数1, 参数2, 另外, 参数3 | ||
8 | |||
9 | 这里, 我们 = () ->, 是的 | ||
10 | 这个, 不同 = () -> 方法; 是的 | ||
11 | |||
12 | 爸爸() | ||
13 | 爸爸(主) | ||
14 | 你好(一,二)() | ||
15 | (5 + 5)(世界) | ||
16 | |||
17 | 乐趣(变量a)(变量b) | ||
18 | |||
19 | 乐趣(变量a) 变量b | ||
20 | |||
21 | 乐趣(变量a) 变量b, 坏 你好 | ||
22 | |||
23 | 你好 世界 你在这里做什么 | ||
24 | |||
25 | 什么(这个)[3243] 世界, 哎呀 | ||
26 | |||
27 | 毛茸茸[手][是](恶心) 好的 好的[世界] | ||
28 | |||
29 | _ = (得到[某事] + 5)[年] | ||
30 | |||
31 | 变量i,变量x = 200, 300 | ||
32 | |||
33 | 是的 = (1 + 5) * 3 | ||
34 | 是的 = ((1+5)*3)/2 | ||
35 | 是的 = ((1+5)*3)/2 + 变量i % 100 | ||
36 | |||
37 | 哇 = (1+2) * (3+4) * (4+5) | ||
38 | |||
39 | _ = -> | ||
40 | if 某事 | ||
41 | return 1,2,4 | ||
42 | |||
43 | 打印 "你好" | ||
44 | |||
45 | _ = -> | ||
46 | if 你好 | ||
47 | "你好", "世界" | ||
48 | else | ||
49 | 不, 方法 | ||
50 | |||
51 | |||
52 | _ = -> 1,2,34 | ||
53 | |||
54 | return 5 + () -> 4 + 2 | ||
55 | |||
56 | return 5 + (() -> 4) + 2 | ||
57 | |||
58 | 打印 5 + () -> | ||
59 | _ = 34 | ||
60 | 好 球 | ||
61 | |||
62 | 某事 '其他', "是" | ||
63 | |||
64 | 某事'其他' | ||
65 | 某事"其他" | ||
66 | |||
67 | _ = 某事[[嘿]] * 2 | ||
68 | _ = 某事[======[嘿]======] * 2 | ||
69 | _ = 某事[ [======[嘿]======] ] * 2 | ||
70 | |||
71 | _, _ = 某事'其他', 2 | ||
72 | _, _ = 某事"其他", 2 | ||
73 | _, _ = 某事[[其他]], 2 | ||
74 | _, _ = 某事[ [[其他]] ], 2 | ||
75 | |||
76 | 某事 '其他', 2 | ||
77 | 某事 "其他", 2 | ||
78 | 某事 [[其他]], 2 | ||
79 | |||
80 | _ = 这里(我们)"去"[12123] | ||
81 | |||
82 | 分裂"abc xyz 123"\映射"#"\打印全部! | ||
83 | |||
84 | _ = f""[变量a] | ||
85 | _ = f""\变量b! | ||
86 | _ = f"".变量c! | ||
87 | |||
88 | f ""[变量a] | ||
89 | f ""\变量b! | ||
90 | f "".变量c! | ||
91 | |||
92 | 列表{"abc", "xyz", "123"}\映射"#"\打印全部! | ||
93 | |||
94 | _ = f{}[变量a] | ||
95 | _ = f{}\变量b! | ||
96 | _ = f{}.变量c! | ||
97 | |||
98 | 某事 = | ||
99 | 测试: 12323 | ||
100 | 什么: -> 打印 "你好 世界" | ||
101 | |||
102 | 打印 某事.测试 | ||
103 | |||
104 | 天哪 = 你好: "世界" | ||
105 | |||
106 | 氩 = | ||
107 | 数字: 100 | ||
108 | 世界: (自己) -> | ||
109 | 打印 自己.数字 | ||
110 | return { | ||
111 | 某事: -> 打印 "嗨 从某事" | ||
112 | } | ||
113 | 某事: (自己, 字符串) -> | ||
114 | 打印 "字符串是", 字符串 | ||
115 | return 世界: (变量a,变量b) -> 打印 "总和", 变量a + 变量b | ||
116 | |||
117 | 某事.什么() | ||
118 | 氩\世界().某事() | ||
119 | |||
120 | 氩\某事"200".世界(1,2) | ||
121 | |||
122 | 变量x = -434 | ||
123 | |||
124 | 变量x = -你好 世界 一 二 | ||
125 | |||
126 | 嗨 = -"herfef" | ||
127 | |||
128 | 变量x = -[变量x for 变量x in 变量x] | ||
129 | |||
130 | 打印 "你好" if 酷 | ||
131 | 打印 "你好" unless 酷 | ||
132 | 打印 "你好" unless 1212 and 3434 | ||
133 | 打印 "你好" for i=1,10 | ||
134 | |||
135 | 打印 "疯子" | ||
136 | |||
137 | if 你好 then _ = 343 | ||
138 | |||
139 | 打印 "什么" if 酷 | ||
140 | |||
141 | 阅读者\解析_行! until 阅读者\结束! | ||
142 | |||
143 | 阅读者\解析_行! while not 阅读者\结束! | ||
144 | |||
145 | ((...)-> 参数 = {...})! | ||
146 | |||
147 | 变量x = (...) -> | ||
148 | dump {...} | ||
149 | |||
150 | 变量x = not true | ||
151 | |||
152 | 变量y = not(5+5) | ||
153 | |||
154 | 变量y = #"你好" | ||
155 | |||
156 | 变量x = #{#{},#{1},#{1,2}} | ||
157 | |||
158 | _, _ = 你好, 世界 | ||
159 | |||
160 | 某事\你好(什么) 变量a,变量b | ||
161 | 某事\你好 什么 | ||
162 | 某事.你好\世界 变量a,变量b | ||
163 | 某事.你好\世界(1,2,3) 变量a,变量b | ||
164 | |||
165 | 变量x = 1232 | ||
166 | 变量x += 10 + 3 | ||
167 | 变量j -= "你好" | ||
168 | 变量y *= 2 | ||
169 | 变量y /= 100 | ||
170 | 变量y //= 100 | ||
171 | 变量m %= 2 | ||
172 | 你好 ..= "世界" | ||
173 | |||
174 | @@某事 += 10 | ||
175 | @某事 += 10 | ||
176 | |||
177 | 变量a["你好"] += 10 | ||
178 | 变量a["你好#{tostring ff}"] += 10 | ||
179 | 变量a[四].字段x += 10 | ||
180 | |||
181 | 变量a.变量b += 1 | ||
182 | 变量a.变量b[1].变量c[2 + 3] += 1 | ||
183 | with 表 | ||
184 | .字段a.变量c += 1 | ||
185 | |||
186 | 表[] = 10 | ||
187 | 变量a.变量b.变量c[] = 1 | ||
188 | 变量x[] = if 条件v | ||
189 | 1 | ||
190 | else | ||
191 | 2 | ||
192 | with 表 | ||
193 | .变量b.变量c[] = with 向量 | ||
194 | .字段x = 1 | ||
195 | .字段y = 2 | ||
196 | 对象a | ||
197 | .变量b.变量c | ||
198 | .变量d\函数! | ||
199 | .变量g[] = 1 | ||
200 | |||
201 | 表 = {} | ||
202 | 表[] = 1 | ||
203 | 表[] = 2 | ||
204 | 表[] = 3 | ||
205 | |||
206 | 变量x = 0 | ||
207 | _ = (if ntype(变量v) == "函数定义" then 变量x + 1) for 变量v in *值 | ||
208 | |||
209 | 你好 = | ||
210 | 某物: 世界 | ||
211 | 如果: "你好" | ||
212 | 否则: 3434 | ||
213 | 函数: "好的" | ||
214 | 好的: 230203 | ||
215 | |||
216 | 表 = { | ||
217 | 执行: 变量b | ||
218 | 执行 :变量b | ||
219 | } | ||
220 | |||
221 | div 类: "酷" | ||
222 | |||
223 | _ = 5 + 什么 无聊 | ||
224 | 什么 无聊 + 5 | ||
225 | |||
226 | _ = 5 - 什么 无聊 | ||
227 | 什么 无聊 - 5 | ||
228 | |||
229 | 变量x = 你好 - 世界 - 某物 | ||
230 | |||
231 | ((某物 = 与 什么 | ||
232 | \酷 100) -> | ||
233 | 打印 某物)! | ||
234 | |||
235 | if 某物 | ||
236 | _ = 03589 | ||
237 | |||
238 | -- 好的 什么 关于这个 | ||
239 | |||
240 | else | ||
241 | _ = 3434 | ||
242 | |||
243 | if 某物 | ||
244 | _ = 是的 | ||
245 | |||
246 | elseif "嗯嗯嗯" | ||
247 | |||
248 | 打印 "酷" | ||
249 | |||
250 | else | ||
251 | |||
252 | _ = 好的 | ||
253 | |||
254 | -- 测试名字包含关键词 | ||
255 | 变量x = 不是某物 | ||
256 | 变量y = 如果某物 | ||
257 | 变量z = 变量x 与 变量b | ||
258 | 变量z = 变量x 与b | ||
259 | |||
260 | while 10 > 某物( | ||
261 | 某物: "世界" | ||
262 | ) | ||
263 | 打印 "是的" | ||
264 | |||
265 | -- 无界表 | ||
266 | |||
267 | 变量x = | ||
268 | 好的: 确定 | ||
269 | |||
270 | 是的 | ||
271 | 好的: 男人 | ||
272 | 确定: 先生 | ||
273 | |||
274 | 你好 "无逗号" | ||
275 | 是的: 爸爸 | ||
276 | 另一个: 世界 | ||
277 | |||
278 | 你好 "逗号", | ||
279 | 某物: 你好_世界 | ||
280 | 骂人: 你 | ||
281 | |||
282 | -- 创建一个表 | ||
283 | 另一个 你好, 一个, | ||
284 | 二, 三, 四, 是的: 男人 | ||
285 | 好的: 是的 | ||
286 | 好: 好的 | ||
287 | |||
288 | 另一个 你好, 一个, | ||
289 | 二, 三, 四, | ||
290 | 是的: 男人, 好的: 是的 | ||
291 | * 好: 好的, | ||
292 | 好的: 1 | ||
293 | * 好: 好的, | ||
294 | 好的: 2 | ||
295 | |||
296 | 另一个 你好, 一个, 二, 三, 四, | ||
297 | 是的: 男人 | ||
298 | 好的: 是的 | ||
299 | |||
300 | 另一个 你好, 一个, 二, 三, 四, 是的: 男人 | ||
301 | 好的: 是的 | ||
302 | |||
303 | 阿贾克斯 地址, | ||
304 | (数据) -> | ||
305 | 处理 数据, | ||
306 | (错误) -> | ||
307 | 打印 错误 | ||
308 | |||
309 | -- | ||
310 | 变量a += 3 - 5 | ||
311 | 变量a *= 3 + 5 | ||
312 | 变量a *= 3 | ||
313 | 变量a >>= 3 | ||
314 | 变量a <<= 3 | ||
315 | 变量a /= 函数 "酷" | ||
316 | |||
317 | --- | ||
318 | |||
319 | 变量x.然后 = "你好" | ||
320 | 变量x.当.真 = "你好" | ||
321 | 变量x | ||
322 | .当 | ||
323 | .真 = "你好" | ||
324 | |||
325 | -- | ||
326 | |||
327 | 变量x or= "你好" | ||
328 | 变量x and= "你好" | ||
329 | |||
330 | -- | ||
331 | |||
332 | 变量z = 变量a-变量b | ||
333 | 变量z = 变量a -变量b | ||
334 | 变量z = 变量a - 变量b | ||
335 | 变量z = 变量a- 变量b | ||
336 | |||
337 | -- 酷 | ||
338 | |||
339 | 字符串 = --[[ | ||
340 | 这是一个多行注释。 | ||
341 | 没问题。 | ||
342 | ]] 字符串A \ -- 注释 1 | ||
343 | .. 字符串B \ -- 注释 2 | ||
344 | .. 字符串C | ||
345 | |||
346 | 函数 --[[端口]] 3000, --[[ip]] "192.168.1.1" | ||
347 | |||
348 | f = -> | ||
349 | 变量a,变量b, \ | ||
350 | 变量c,变量d, \ | ||
351 | 变量e,变量f | ||
352 | |||
353 | f = -> | ||
354 | 变量a,变量b \ | ||
355 | ,变量c,变量d \ | ||
356 | ,变量e,变量f | ||
357 | |||
358 | with 对象 | ||
359 | 调用( | ||
360 | --[[参数1]] \函数!, | ||
361 | --[[参数2]] 123, | ||
362 | --[[参数3]] "abc" | ||
363 | ) | ||
364 | |||
365 | 调用A( | ||
366 | 调用B( | ||
367 | 调用C 123 | ||
368 | ) | ||
369 | ) | ||
370 | |||
371 | 123 | ||
372 | |> 调用C | ||
373 | |> 调用B | ||
374 | |> 调用A | ||
375 | |||
376 | 变量v = { | ||
377 | 变量a -1 | ||
378 | 变量a( | ||
379 | -1) | ||
380 | 变量a \ | ||
381 | - 1 | ||
382 | 变量a-1 | ||
383 | 变量a - 1 | ||
384 | 变量a - | ||
385 | 1 | ||
386 | 变量a- | ||
387 | 1 | ||
388 | 变量a - --[[123]]1 | ||
389 | |||
390 | 变量a ~1 | ||
391 | 变量a( | ||
392 | ~1) | ||
393 | 变量a \ | ||
394 | ~ 1 | ||
395 | 变量a~1 | ||
396 | 变量a ~ 1 | ||
397 | 变量a ~ | ||
398 | 1 | ||
399 | 变量a~ | ||
400 | 1 | ||
401 | 变量a ~ --[[123]]1 | ||
402 | } | ||
403 | |||
404 | do | ||
405 | 变量a = 1 \ | ||
406 | + 2 \ | ||
407 | * 3 / | ||
408 | 4 | ||
409 | |||
410 | 变量_1 = f1 -1 \ | ||
411 | + 2 \ | ||
412 | + 3 | ||
413 | |||
414 | 变量_2 = f1 - 1 \ | ||
415 | + 2 \ | ||
416 | + 3 | ||
417 | |||
418 | f2 = (变量x)-> 打印 变量x \ | ||
419 | +1 | ||
420 | |||
421 | 变量a = f2! | ||
422 | -1 |> f2 | ||
423 | |||
424 | 变量a = f2! \ | ||
425 | - 1 |> f2 | ||
426 | |||
427 | 变量_1 \ | ||
428 | ,变量_2 \ | ||
429 | ,变量_3 \ | ||
430 | ,变量_4 = 1 \ | ||
431 | ,f 2 \ | ||
432 | ,3 \ | ||
433 | ,f 4, \ | ||
434 | 4 | ||
435 | |||
436 | do | ||
437 | f = ( | ||
438 | 变量a -- 参数a | ||
439 | 变量b -- 参数b | ||
440 | )-> 变量a + 变量b | ||
441 | f( | ||
442 | 变量a -- 值a | ||
443 | 变量b -- 值b | ||
444 | ) | ||
445 | f ! | ||
446 | |||
447 | nil | ||
448 | |||
diff --git a/spec/inputs/unicode/tables.yue b/spec/inputs/unicode/tables.yue new file mode 100644 index 0000000..04ed91d --- /dev/null +++ b/spec/inputs/unicode/tables.yue | |||
@@ -0,0 +1,299 @@ | |||
1 | 背包 = | ||
2 | 东西: | ||
3 | 是的: 200 | ||
4 | 他们: -> | ||
5 | print "你好" | ||
6 | 你的脚"小" | ||
7 | 美丽: 头发变量 | ||
8 | 金: 嗯变量 | ||
9 | 您: 1000 | ||
10 | |||
11 | 吃: goo变量 | ||
12 | 是的: dudd变量 | ||
13 | |||
14 | 开始 = | ||
15 | 东西: "冷" | ||
16 | |||
17 | 浴 = | ||
18 | 开: "火" | ||
19 | |||
20 | 另一个 = | ||
21 | [4]: 232 | ||
22 | ["好食物"]: "是最好的" | ||
23 | |||
24 | fwip变量 = | ||
25 | 东西: 你好"什么", 数字: 2323, | ||
26 | 什么: yo变量 "妈妈", "是的", | ||
27 | 水果: basket变量 | ||
28 | 坚果: day变量 | ||
29 | |||
30 | frick变量 = 你好: "世界" | ||
31 | |||
32 | frack变量, 最好 = 你好: "世界", 米饭: 3434, "什么" | ||
33 | |||
34 | ya变量 = { 1,2,3, 键: 100, 343, "你好", 嗯: 232 } | ||
35 | |||
36 | x变量 = { 1,2, | ||
37 | 4343, 343 ,343 } | ||
38 | |||
39 | g变量, p变量 = { | ||
40 | 1,2, nowy变量: "是", 3,4, | ||
41 | 嘿: 232, 另一个: "天" | ||
42 | }, 234 | ||
43 | |||
44 | annother变量 = { | ||
45 | 1,2,3 | ||
46 | 3,4,5 | ||
47 | 6,7,8 | ||
48 | } | ||
49 | |||
50 | 是的变量 = { | ||
51 | [232]: 3434, "你好" | ||
52 | 冰: "蛋糕" | ||
53 | } | ||
54 | |||
55 | -- 混淆的东西... | ||
56 | whatabout变量 = { | ||
57 | 你好 世界, 另一个变量 | ||
58 | 什么, 关于, 现在 | ||
59 | |||
60 | 你好"世界", 是的变量 | ||
61 | 你好 "世界", 是的变量 | ||
62 | } | ||
63 | |||
64 | x变量 = | ||
65 | -- 是的 | ||
66 | 东西: => "你好" | ||
67 | 酷: -- 嗯 | ||
68 | --so ething | ||
69 | 床: { | ||
70 | 2323,2323 | ||
71 | } | ||
72 | 红: 2343 -- 这里 | ||
73 | -- 什么 | ||
74 | 名字: (node变量) => @value node变量 -- 这里 | ||
75 | -- 评论我 | ||
76 | -- 好的 | ||
77 | |||
78 | x变量 = { :东西, 东西: 东西变量 } | ||
79 | |||
80 | y变量 = { | ||
81 | :你好, :那里, :怎么样, :你 | ||
82 | :事情 | ||
83 | } | ||
84 | |||
85 | 电话我 "你好", :x变量, :y变量, :z变量 | ||
86 | |||
87 | t变量 = { | ||
88 | a变量: 'a' | ||
89 | [b变量]: 'b' | ||
90 | } | ||
91 | |||
92 | xam变量 = { | ||
93 | 你好: 1234 | ||
94 | "你好": 12354 | ||
95 | [[你好变量]]: 12354 | ||
96 | ["你好"]: 12354 | ||
97 | [ [[你好变量]] ]: 12354 | ||
98 | } | ||
99 | |||
100 | kam变量 = | ||
101 | 你好: 12 | ||
102 | 好奶酪: | ||
103 | "嗯" | ||
104 | |||
105 | 是的: | ||
106 | 12 + 232 | ||
107 | |||
108 | 让我们: | ||
109 | keepit 继续: 真的, | ||
110 | 好的: "是的" | ||
111 | |||
112 | 更多: | ||
113 | { | ||
114 | 1, [x变量 for x变量=1,10] | ||
115 | } | ||
116 | |||
117 | [{"一个", "两个"}]: | ||
118 | 一件事情 => | ||
119 | |||
120 | -- 这两者都有令人满意的输出 | ||
121 | keepit 继续: 真的, | ||
122 | 好的: "是的", | ||
123 | workd变量: "好的" | ||
124 | |||
125 | 事情 什么: | ||
126 | "伟大", 没有: | ||
127 | "更多" | ||
128 | 好的: 123 | ||
129 | |||
130 | |||
131 | -- | ||
132 | 事情 什么: | ||
133 | "伟大", 没有: | ||
134 | "更多" | ||
135 | _变量 = 好的: 123 -- 一个匿名表 | ||
136 | |||
137 | |||
138 | -- | ||
139 | |||
140 | k变量 = { "你好": "世界" } | ||
141 | k变量 = { '你好': '世界' } | ||
142 | k变量 = { "你好": '世界', "帽子": "zat变量" } | ||
143 | |||
144 | 请 "你好": "世界" | ||
145 | k变量 = "你好": "世界", "一个": "区域" | ||
146 | |||
147 | f1变量, f2变量, f3变量 = "一个", "两个": three变量, "四" | ||
148 | f1变量, f2变量 = "两个": three变量, "四" | ||
149 | f1变量 = { "一个", "两个": three变量, "四" } | ||
150 | |||
151 | j1变量, j2变量, j3变量, j4变量 = "一个", "两个": three变量, "四": five变量, 6, 7 | ||
152 | |||
153 | 女英雄 = | ||
154 | 名字: "克里斯蒂娜" | ||
155 | 年龄: 18 | ||
156 | 工作: "公主" | ||
157 | 喜欢: | ||
158 | * 名字: "小猫" | ||
159 | img变量: "/image/kittens.png" | ||
160 | * 名字: "花" | ||
161 | img变量: "/image/flower.png" | ||
162 | 物品: | ||
163 | * 名字: "戒指" | ||
164 | 数量: 2 | ||
165 | * 名字: "项链" | ||
166 | 数量: 1 | ||
167 | 状态: | ||
168 | desc变量: "弱" | ||
169 | * 属性: "健康" | ||
170 | 价值: 50 | ||
171 | * 属性: "魔法" | ||
172 | 价值: 100 | ||
173 | |||
174 | 库存 = | ||
175 | 设备: | ||
176 | * "剑" | ||
177 | * "盾" | ||
178 | 物品: | ||
179 | * 名字: "药水" | ||
180 | 计数: 10 | ||
181 | * 名字: "面包" | ||
182 | 计数: 3 | ||
183 | |||
184 | 物品 = | ||
185 | * 函数! | ||
186 | * with 变量tb | ||
187 | .abc = 123 | ||
188 | * {1, 2, 3} | ||
189 | * 函数 {1, 2, 3} | ||
190 | * 函数 | ||
191 | * 1 | ||
192 | * 2 | ||
193 | * 3 | ||
194 | * [变量i for 变量i = 1, 3] | ||
195 | * "#{if 变量a then 变量b}" | ||
196 | |||
197 | 双项 = | ||
198 | * | ||
199 | * "国王" | ||
200 | * "王后" | ||
201 | * | ||
202 | * "英雄" | ||
203 | * "公主" | ||
204 | |||
205 | 物品 = | ||
206 | * | ||
207 | 名称: "戒指" | ||
208 | 数量: 2 | ||
209 | * | ||
210 | 名称: "项链" | ||
211 | 数量: 1 | ||
212 | |||
213 | 菜单 = | ||
214 | * 文本: "保存" | ||
215 | 子菜单: | ||
216 | * 文本: "插槽1:" .. (插槽[1].名称 or "无") | ||
217 | 点击: -> | ||
218 | * 文本: {"插槽2"} | ||
219 | 点击: -> | ||
220 | * 文本: [[插槽3]] | ||
221 | 点击: -> | ||
222 | * 文本: ("插槽4")\名称! | ||
223 | 点击: -> | ||
224 | * 文本: ({{"插槽5"}})[1]\名称! | ||
225 | 点击: -> | ||
226 | [6]: { | ||
227 | 文本: ("插槽6") | ||
228 | 点击: -> | ||
229 | } | ||
230 | |||
231 | 变量tb = {...其他} | ||
232 | |||
233 | tb混合 = { | ||
234 | 1, 2, 3 | ||
235 | ... with 物品 | ||
236 | .x = 1 | ||
237 | \函数! | ||
238 | "a", "b", "c" | ||
239 | ...函数?! | ||
240 | 键: "值" | ||
241 | ... -- 在此处执行Lua表行为 | ||
242 | } | ||
243 | |||
244 | tb混合A = { | ||
245 | ...[变量i for 变量i = 1, 10] | ||
246 | 11 | ||
247 | } | ||
248 | |||
249 | tb混合B = { | ||
250 | ... ... -- 此处仅访问vararg中的第一个项 | ||
251 | ... {...} | ||
252 | ... {......} | ||
253 | 1, 2, 3 | ||
254 | } | ||
255 | |||
256 | const 模板 = { | ||
257 | foo: "你好" | ||
258 | bar: "世界" | ||
259 | baz: "!" | ||
260 | } | ||
261 | |||
262 | const 专门化 = { | ||
263 | ...模板 | ||
264 | bar: "鲍勃" | ||
265 | } | ||
266 | |||
267 | 专门化B = { | ||
268 | 函数: -> | ||
269 | ...模板 | ||
270 | 结束: -> | ||
271 | 如果: true | ||
272 | 否则: false | ||
273 | } | ||
274 | |||
275 | 部分 = | ||
276 | * "肩膀" | ||
277 | * "膝盖" | ||
278 | |||
279 | 歌词 = | ||
280 | * "头" | ||
281 | * ...部分 | ||
282 | * "和" | ||
283 | * "脚趾" | ||
284 | |||
285 | tb块 = | ||
286 | 子菜单: | ||
287 | :值 | ||
288 | * ...物品 | ||
289 | * ... | ||
290 | |||
291 | 函数 | ||
292 | * ...物品 | ||
293 | :值 | ||
294 | * ... | ||
295 | k: 变量v | ||
296 | * ... | ||
297 | |||
298 | nil | ||
299 | |||
diff --git a/spec/inputs/unicode/try_catch.yue b/spec/inputs/unicode/try_catch.yue new file mode 100644 index 0000000..71e03ee --- /dev/null +++ b/spec/inputs/unicode/try_catch.yue | |||
@@ -0,0 +1,60 @@ | |||
1 | try | ||
2 | 函数 1, 2, 3 | ||
3 | catch 错误 | ||
4 | 打印 错误 | ||
5 | |||
6 | try 函数 1, 2, 3 | ||
7 | catch 错误 | ||
8 | 打印 错误 | ||
9 | |||
10 | try | ||
11 | 打印 "正在try" | ||
12 | 函数 1, 2, 3 | ||
13 | |||
14 | do | ||
15 | 成功, 结果 = try | ||
16 | 函数 1, 2, 3 | ||
17 | catch 错误 | ||
18 | 打印 错误 | ||
19 | |||
20 | 成功, 结果 = try 函数 1, 2, 3 | ||
21 | |||
22 | try 表.函数 | ||
23 | try 表.函数! | ||
24 | try 表.函数() | ||
25 | try (表.函数!) | ||
26 | try (表\函数(1, 2, 3)) | ||
27 | |||
28 | try 表.函数 1 | ||
29 | try 表.函数(1) | ||
30 | |||
31 | if (try 函数 1 | ||
32 | catch 错误 | ||
33 | 打印 错误) | ||
34 | 打印 "好的" | ||
35 | |||
36 | if try (函数 1) | ||
37 | catch 错误 | ||
38 | 打印 错误 | ||
39 | 打印 "好的" | ||
40 | |||
41 | do | ||
42 | if 成功, 结果 = try 函数 "abc", 123 | ||
43 | 打印 结果 | ||
44 | |||
45 | 成功, 结果 = try 函数 "abc", 123 | ||
46 | catch 错误 | ||
47 | 打印 错误 | ||
48 | |||
49 | 打印 结果 if 成功, 结果 = try 函数 "abc", 123 | ||
50 | catch 错误 | ||
51 | 打印 错误 | ||
52 | |||
53 | do | ||
54 | try | ||
55 | 函数 1, 2, 3 | ||
56 | |||
57 | try 函数 1, 2, 3 | ||
58 | |||
59 | nil | ||
60 | |||
diff --git a/spec/inputs/unicode/unless_else.yue b/spec/inputs/unicode/unless_else.yue new file mode 100644 index 0000000..73db6ef --- /dev/null +++ b/spec/inputs/unicode/unless_else.yue | |||
@@ -0,0 +1,5 @@ | |||
1 | if 变量a | ||
2 | unless 变量b | ||
3 | 打印 "嗨" | ||
4 | elseif 变量c | ||
5 | 打印 "不嗨" | ||
diff --git a/spec/inputs/unicode/using.yue b/spec/inputs/unicode/using.yue new file mode 100644 index 0000000..c700b47 --- /dev/null +++ b/spec/inputs/unicode/using.yue | |||
@@ -0,0 +1,29 @@ | |||
1 | |||
2 | 你好 = "你好" | ||
3 | 世界 = "世界" | ||
4 | |||
5 | _ = (using nil) -> | ||
6 | 你好 = 3223 | ||
7 | |||
8 | _ = (参数a using nil) -> | ||
9 | 你好 = 3223 | ||
10 | 参数a = 323 | ||
11 | |||
12 | _ = (参数a,参数b,参数c using 参数a,参数b,参数c) -> | ||
13 | 参数a,参数b,参数c = 1,2,3 | ||
14 | 世界 = 12321 | ||
15 | |||
16 | _ = (参数a,参数e,参数f using 参数a,参数b,参数c, 你好) -> | ||
17 | 参数a,参数b,参数c = 1,2,3 | ||
18 | 你好 = 12321 | ||
19 | 世界 = "yeah" | ||
20 | |||
21 | _ = (using nil) -> | ||
22 | 你好 or= 2 | ||
23 | |||
24 | do | ||
25 | 变量a = {} | ||
26 | (using nil) <- _ | ||
27 | {元素x, 元素y} = 变量a | ||
28 | |||
29 | nil | ||
diff --git a/spec/inputs/unicode/vararg.yue b/spec/inputs/unicode/vararg.yue new file mode 100644 index 0000000..5e7f3c4 --- /dev/null +++ b/spec/inputs/unicode/vararg.yue | |||
@@ -0,0 +1,96 @@ | |||
1 | 连接 = (...) -> | ||
2 | 带有 with 变量a | ||
3 | \函数! | ||
4 | 带有 with 变量a | ||
5 | \函数 ... | ||
6 | |||
7 | 列表生成 [项目[i] for i = 1, 10] | ||
8 | 列表生成 [项目[i] ... for i = 1, 10] | ||
9 | 列表生成 [物品 for 物品 in *项目] | ||
10 | 列表生成 [物品 ... for 物品 in *项目] | ||
11 | |||
12 | 类生成 class 变量A | ||
13 | 函数! | ||
14 | 类生成 class 变量A | ||
15 | 函数 ... | ||
16 | |||
17 | 表生成 {键, 值 for 键, 值 in pairs 表} | ||
18 | 表生成 {键, 值 ... for 键, 值 in pairs 表} | ||
19 | 表生成 {物品, true for 物品 in *项目} | ||
20 | 表生成 {物品(...), true for 物品 in *项目} | ||
21 | |||
22 | 做操作 do | ||
23 | 函数! | ||
24 | 做操作 do | ||
25 | 函数 ... | ||
26 | |||
27 | 当操作 while false | ||
28 | 函数! | ||
29 | 当操作 while false | ||
30 | 函数 ... | ||
31 | |||
32 | 如果操作 if false | ||
33 | 函数! | ||
34 | 如果操作 if false | ||
35 | 函数 ... | ||
36 | |||
37 | 除非操作 unless true | ||
38 | 函数! | ||
39 | 除非操作 unless true | ||
40 | 函数 ... | ||
41 | |||
42 | 切换操作 switch 变量x | ||
43 | when "abc" | ||
44 | 函数! | ||
45 | 切换操作 switch 变量x | ||
46 | when "abc" | ||
47 | 函数 ... | ||
48 | |||
49 | 表达式操作 函数?! | ||
50 | 表达式操作 函数? ... | ||
51 | |||
52 | 冒号 f!\函数 | ||
53 | 冒号 f(...)\函数 | ||
54 | |||
55 | _ = -> | ||
56 | 列表 = {1, 2, 3, 4, 5} | ||
57 | 函数名 = (确定) -> | ||
58 | 确定, table.unpack 列表 | ||
59 | 确定, ... = 函数名 true | ||
60 | 打印 确定, ... | ||
61 | |||
62 | 多参数函数 = -> | ||
63 | 10, nil, 20, nil, 30 | ||
64 | |||
65 | ... = 多参数函数! | ||
66 | 打印 select "#", ... | ||
67 | 打印 ... | ||
68 | |||
69 | do | ||
70 | ... = 1, 2 if true | ||
71 | 打印 ... | ||
72 | |||
73 | do | ||
74 | 变量a, ... = 1, 2 unless true | ||
75 | 打印 变量a, select '#', ... | ||
76 | |||
77 | do | ||
78 | ... = switch 变量x when 1 | ||
79 | with 表 | ||
80 | .变量x = 123 | ||
81 | else | ||
82 | 表2 | ||
83 | 打印 ... | ||
84 | |||
85 | do | ||
86 | ... = 1, 2, if 条件 | ||
87 | 3, 4, 5 | ||
88 | 打印 ... | ||
89 | |||
90 | do | ||
91 | 表, ... = | ||
92 | 名字: "abc" | ||
93 | 值: 123 | ||
94 | 打印 ... | ||
95 | nil | ||
96 | |||
diff --git a/spec/inputs/unicode/whitespace.yue b/spec/inputs/unicode/whitespace.yue new file mode 100644 index 0000000..efe55ce --- /dev/null +++ b/spec/inputs/unicode/whitespace.yue | |||
@@ -0,0 +1,133 @@ | |||
1 | _ = { | ||
2 | 1, 2 | ||
3 | } | ||
4 | |||
5 | _ = { 1, 2 | ||
6 | } | ||
7 | |||
8 | _ = { 1, 2 } | ||
9 | |||
10 | _ = {1,2} | ||
11 | |||
12 | _ = { | ||
13 | 1,2 | ||
14 | } | ||
15 | |||
16 | _ = { 事情 1,2, | ||
17 | 4,5,6, | ||
18 | 3,4,5 | ||
19 | } | ||
20 | |||
21 | _ = { | ||
22 | 变量a 1,2,3, | ||
23 | 4,5,6 | ||
24 | 1,2,3 | ||
25 | } | ||
26 | |||
27 | _ = { | ||
28 | 变量b 1,2,3, | ||
29 | 4,5,6 | ||
30 | 1,2,3, | ||
31 | 1,2,3 | ||
32 | } | ||
33 | |||
34 | _ = { 1,2,3 } | ||
35 | |||
36 | _ = { 变量c 1,2,3, | ||
37 | } | ||
38 | |||
39 | 你好 1,2,3,4, | ||
40 | 1,2,3,4,4,5 | ||
41 | |||
42 | 变量x 1, | ||
43 | 2, 3, | ||
44 | 4, 5, 6 | ||
45 | |||
46 | 你好 1,2,3, | ||
47 | 世界 4,5,6, | ||
48 | 5,6,7,8 | ||
49 | |||
50 | 你好 1,2,3, | ||
51 | 世界 4,5,6, | ||
52 | 5,6,7,8, | ||
53 | 9,9 | ||
54 | |||
55 | _ = { | ||
56 | 你好 1,2, | ||
57 | 3,4, | ||
58 | 5, 6 | ||
59 | } | ||
60 | |||
61 | 变量x = { | ||
62 | 你好 1,2,3,4, | ||
63 | 5,6,7 | ||
64 | 1,2,3,4 | ||
65 | } | ||
66 | |||
67 | if 你好 1,2,3, | ||
68 | 世界, | ||
69 | 世界 | ||
70 | 打印 "你好" | ||
71 | |||
72 | if 你好 1,2,3, | ||
73 | 世界, | ||
74 | 世界 | ||
75 | 打印 "你好" | ||
76 | |||
77 | -- | ||
78 | |||
79 | 变量a( | ||
80 | 一个, 两个, 三个 | ||
81 | ) | ||
82 | |||
83 | 变量b( | ||
84 | 一个, | ||
85 | 两个, | ||
86 | 三个 | ||
87 | ) | ||
88 | |||
89 | 变量c(一个, 两个, | ||
90 | 三个, 四个) | ||
91 | |||
92 | -- | ||
93 | |||
94 | v = -> | ||
95 | 变量a, \-- v1 | ||
96 | 变量b, \-- v2 | ||
97 | 变量c -- v3 | ||
98 | |||
99 | v1, v2, \ | ||
100 | v3 = -> | ||
101 | 变量a; \-- 函数结束于v1 | ||
102 | 变量b, \-- v2 | ||
103 | 变量c -- v3 | ||
104 | |||
105 | 变量a, 变量b, \ | ||
106 | 变量c, 变量d, \ | ||
107 | 变量e, 变量f = 1, \ | ||
108 | f2 | ||
109 | :abc; \-- 参数2 | ||
110 | 3, \ | ||
111 | 4, \ | ||
112 | 函数5 abc; \-- 参数5 | ||
113 | 6 | ||
114 | |||
115 | for 变量a, \-- 解构1 | ||
116 | 变量b, \-- 解构2 | ||
117 | --[[解构 3]] 变量c \ | ||
118 | in pairs 对象tb | ||
119 | 打印 变量a, \ | ||
120 | 变量b, \ | ||
121 | 变量c | ||
122 | |||
123 | for i = 1, \-- 初始 | ||
124 | 10, \-- 停止 | ||
125 | -1 -- 步进 | ||
126 | 打印 i | ||
127 | |||
128 | local 变量a,\ | ||
129 | 变量b,\ | ||
130 | 变量c | ||
131 | |||
132 | nil | ||
133 | |||
diff --git a/spec/inputs/unicode/with.yue b/spec/inputs/unicode/with.yue new file mode 100644 index 0000000..ecbfdab --- /dev/null +++ b/spec/inputs/unicode/with.yue | |||
@@ -0,0 +1,144 @@ | |||
1 | do | ||
2 | 变量a = -> | ||
3 | with 东西 | ||
4 | 打印 .你好 | ||
5 | 打印 你好 | ||
6 | 打印 "世界" | ||
7 | |||
8 | do | ||
9 | with 叶子 | ||
10 | .世界! | ||
11 | .世界 1,2,3 | ||
12 | |||
13 | 变量g = .什么.是.这 | ||
14 | |||
15 | .你好 1,2,3 | ||
16 | |||
17 | \你好(1,2).世界 2323 | ||
18 | |||
19 | \你好 "是的", "伙计" | ||
20 | .世界 = 200 | ||
21 | |||
22 | do | ||
23 | 滋滋滋 = with 东西 | ||
24 | .设置状态 "你好 世界" | ||
25 | |||
26 | do | ||
27 | 变量x = 5 + with 某事! | ||
28 | \写 "你好 世界" | ||
29 | |||
30 | do | ||
31 | 变量x = { | ||
32 | 你好: with 好的 | ||
33 | \确定! | ||
34 | } | ||
35 | |||
36 | do | ||
37 | with 东西 | ||
38 | _ = \属性"某物".你好 | ||
39 | .属性\发送(一个) | ||
40 | .属性\发送 一个 | ||
41 | |||
42 | -- | ||
43 | |||
44 | do | ||
45 | with 变量a | ||
46 | 打印 .世界 | ||
47 | |||
48 | 模块 = with _模块 = {} | ||
49 | .事物 = "你好" | ||
50 | |||
51 | with 变量a, 变量b = 东西, 布 | ||
52 | 打印 .世界 | ||
53 | |||
54 | 变量x = with 变量a, 变量b = 1, 2 | ||
55 | 打印 变量a + 变量b | ||
56 | |||
57 | 打印 with 变量a, 变量b = 1, 2 | ||
58 | 打印 变量a + 变量b | ||
59 | |||
60 | p = with 你好!.字段x, 世界!.字段y = 1, 2 | ||
61 | 打印 变量a + 变量b | ||
62 | |||
63 | -- | ||
64 | |||
65 | do | ||
66 | 变量x = "你好" | ||
67 | with 变量x | ||
68 | 变量x\大写! | ||
69 | |||
70 | do | ||
71 | with 变量k = "乔" | ||
72 | 打印 \大写! | ||
73 | |||
74 | do | ||
75 | with 变量a,变量b,变量c = "", "", "" | ||
76 | 打印 \大写! | ||
77 | |||
78 | do | ||
79 | 变量a = "床铺" | ||
80 | with 变量a,变量b,变量c = "", "", "" | ||
81 | 打印 \大写! | ||
82 | |||
83 | do | ||
84 | with 变量j | ||
85 | 打印 \大写! | ||
86 | |||
87 | do | ||
88 | with 变量k.变量j = "乔" | ||
89 | 打印 \大写! | ||
90 | |||
91 | do | ||
92 | with 变量a | ||
93 | 打印 .b | ||
94 | with .c | ||
95 | 打印 .d | ||
96 | |||
97 | do | ||
98 | with 变量a | ||
99 | with .b = 2 | ||
100 | 打印 .c | ||
101 | |||
102 | do | ||
103 | _ = -> | ||
104 | with 嗨 | ||
105 | return .a, .b | ||
106 | |||
107 | do | ||
108 | with 表格 | ||
109 | .x = 项目 | ||
110 | .字段 | ||
111 | \函数 123 | ||
112 | |||
113 | do | ||
114 | with 爸爸 | ||
115 | .如果 "是的" | ||
116 | 变量y = .结束.函数 | ||
117 | |||
118 | do | ||
119 | with 表格 | ||
120 | [1] = [2]?\函数! | ||
121 | ["%a-b-c%"] = 123 | ||
122 | [ [[x y z]]] = [变量] | ||
123 | 打印 [ [3]] | ||
124 | with [4] | ||
125 | [1] = 1 | ||
126 | [] = "abc" | ||
127 | [] = | ||
128 | 类型: "你好" | ||
129 | * 名字: "xyz" | ||
130 | 值: 998 | ||
131 | |||
132 | do | ||
133 | global 掩码 | ||
134 | with? 掩码 = 实心矩形 宽: w, 高: h, 颜色: 0x66000000 | ||
135 | .触摸启用 = true | ||
136 | .吞噬触摸 = true | ||
137 | |||
138 | do | ||
139 | with? 掩码 = 实心矩形 宽: w, 高: h, 颜色: 0x66000000 | ||
140 | .触摸启用 = true | ||
141 | .吞噬触摸 = true | ||
142 | |||
143 | nil | ||
144 | |||