aboutsummaryrefslogtreecommitdiff
path: root/spec/inputs
diff options
context:
space:
mode:
authorLi Jin <dragon-fly@qq.com>2023-08-17 10:36:15 +0800
committerLi Jin <dragon-fly@qq.com>2023-08-17 10:36:15 +0800
commite61cce21ef7def2c2e52dd6cb6a5b540ebcac29d (patch)
tree6e7c5e7e6f13157e9f8db26c38f6d8cba75683e5 /spec/inputs
parent289faf45ac26f7e0ac1a1e4305e5c42fc1e5b866 (diff)
downloadyuescript-e61cce21ef7def2c2e52dd6cb6a5b540ebcac29d.tar.gz
yuescript-e61cce21ef7def2c2e52dd6cb6a5b540ebcac29d.tar.bz2
yuescript-e61cce21ef7def2c2e52dd6cb6a5b540ebcac29d.zip
add unicode identifier support, fix more issue from #144
Diffstat (limited to 'spec/inputs')
-rw-r--r--spec/inputs/unicode/ambiguous.yue82
-rw-r--r--spec/inputs/unicode/assign.yue92
-rw-r--r--spec/inputs/unicode/attrib.yue53
-rw-r--r--spec/inputs/unicode/backcall.yue79
-rw-r--r--spec/inputs/unicode/bubbling.yue27
-rw-r--r--spec/inputs/unicode/class.yue245
-rw-r--r--spec/inputs/unicode/comprehension.yue52
-rw-r--r--spec/inputs/unicode/cond.yue232
-rw-r--r--spec/inputs/unicode/destructure.yue228
-rw-r--r--spec/inputs/unicode/do.yue27
-rw-r--r--spec/inputs/unicode/existential.yue58
-rw-r--r--spec/inputs/unicode/export.yue90
-rw-r--r--spec/inputs/unicode/export_default.yue15
-rw-r--r--spec/inputs/unicode/funcs.yue161
-rw-r--r--spec/inputs/unicode/global.yue77
-rw-r--r--spec/inputs/unicode/goto.yue41
-rw-r--r--spec/inputs/unicode/import.yue78
-rw-r--r--spec/inputs/unicode/in_expression.yue52
-rw-r--r--spec/inputs/unicode/lists.yue67
-rw-r--r--spec/inputs/unicode/literals.yue55
-rw-r--r--spec/inputs/unicode/local.yue91
-rw-r--r--spec/inputs/unicode/loops.yue194
-rw-r--r--spec/inputs/unicode/macro.yue291
-rw-r--r--spec/inputs/unicode/macro_export.yue49
-rw-r--r--spec/inputs/unicode/macro_todo.yue13
-rw-r--r--spec/inputs/unicode/metatable.yue87
-rw-r--r--spec/inputs/unicode/multiline_chain.yue99
-rw-r--r--spec/inputs/unicode/nil_coalescing.yue48
-rw-r--r--spec/inputs/unicode/operators.yue70
-rw-r--r--spec/inputs/unicode/pipe.yue84
-rw-r--r--spec/inputs/unicode/plus.yue41
-rw-r--r--spec/inputs/unicode/return.yue66
-rw-r--r--spec/inputs/unicode/string.yue74
-rw-r--r--spec/inputs/unicode/stub.yue18
-rw-r--r--spec/inputs/unicode/switch.yue161
-rw-r--r--spec/inputs/unicode/syntax.yue448
-rw-r--r--spec/inputs/unicode/tables.yue299
-rw-r--r--spec/inputs/unicode/try_catch.yue60
-rw-r--r--spec/inputs/unicode/unless_else.yue5
-rw-r--r--spec/inputs/unicode/using.yue29
-rw-r--r--spec/inputs/unicode/vararg.yue96
-rw-r--r--spec/inputs/unicode/whitespace.yue133
-rw-r--r--spec/inputs/unicode/with.yue144
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 @@
1import 绑定 from 抓取
2(绑定 声明) 颜色: "Red"
3
4变量a = 'b'
5变量c = 变量d
6(变量a 变量b) 变量c 变量d
7import 变量c from 变量d
8(变量a 变量b) 变量c 变量d
9(变量c 变量d) 变量a 变量b
10变量a, 变量b = 变量c, 变量d
11(变量d 变量a) 变量c
12
13macro 宏 = (函数, 参数)-> "(#{函数}) #{参数}"
14for 计数 = 1, 10
15 变量a = ->
16 $宏 打印, 1
17 变量a = 变量f
18 $宏 打印, 2
19 if 条件
20 $宏 打印, 3
21 ::跳转位置::
22 (打印) 4
23 goto 跳转位置
24 (打印) 5
25
26macro 🌛 = (代码)-> {
27 code: 代码
28 type: "lua"
29}
30
31do
32 打印()
33 1 |> b变量 |> (a变量)
34 打印()
35 <- (fn)
36
37do
38 打印()
39 () <- 异步函数()
40 打印()
41 $🌛[==[
42 --[[a comment to insert]]
43 (haha)()
44 ]==]
45 nil
46
47macro 宏v = -> '打印 123'
48do
49 global *
50 $宏v!
51
52do
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
82nil
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
15joop变量 = 2345
16
17变量a, 变量b = if 你好
18 "你好", nil
19else
20 "没啥", "✌️"
21
22
23变量a, 变量b = if 你好
24 if ✌️ then "一", "二" else "mmhh", nil
25else
26 打印 "其它东西"
27 "没啥事", "✌️"
28
29变量c, 变量d = 1, 2 if true
30
31变量x = (do
32 函数!
33 123) if 函数 = 获取处理函数!
34
35(using nil) <- _无效变量
36
37a变量.<> = do
38 打印 123
39 {}
40
41do
42 {元素a, 元素b} = switch 对象c
43 when "a"
44 字典
45 when "b"
46 函数!
47
48a数组[] = if 条件x
49 1
50else
51 2
52
53do
54 变量a, 变量b[] = if x条件
55 switch 对象y
56 when 1
57 函数!
58
59do
60 变量a, {元素b} = if x条件
61 函数!
62 else
63 123, 表
64
65do
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
79do
80 变量a = 变量b = 变量c = 变量d = 0
81
82do
83 a变量 = b变量 = c变量 = d变量 = 函数!
84
85do
86 {a元素} = :字段b = 对象c.字段d = 变量e = 数组对象
87
88do
89 值 = 123
90 变量a = 变量b = 变量c = 值
91
92nil
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 @@
1const 常量a, 常量b, 常量c, 常量d = 1, 2, 3, 4
2
3do
4 close 关闭变量a, 关闭变量b = setmetatable {},__close:=> 打印 "已关闭"
5 const 变量c, 常量d = 123, 'abc'
6
7 close 常量a, 常量b
8 const 常量c, 常量d
9
10do
11 const 常量a, {元素b, 元素c}, {元素d} = 函数!, 函数1!
12
13do
14 const 常量a, {元素b, 元素c}, {元素d} = 函数!
15
16do
17 close 关闭变量v = if 标记为真
18 函数调用!
19 else
20 <close>: =>
21
22 close 关闭变量f = with io.open "文件.txt"
23 \write "你好"
24
25do
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
33do
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
49do
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 @@
1do
2 (项目) <- 映射 {1,2,3}
3 项目 * 2
4
5do
6 (项目) <- 映射 _,{1,2,3}
7 项目 * 2
8
9do
10 (项目) <- 过滤 _, do
11 (项目) <- 映射 _,{1,2,3,4}
12 项目 * 2
13 项目 > 2
14
15do
16 (数据) <- 网络?.获取 "测试地址"
17 网页体[".结果"]\网页 数据
18 (是否处理成功) <- 网络.请求 "测试地址", 数据
19 网页体[".结果"]\添加 是否处理成果
20 <- 设置超时回调 1000
21 打印 "完成"
22
23do
24 <- 同步状态
25 (错误信息, 数据="nil") <- 异步加载 "文件.yue"
26 if 错误信息
27 打印 错误信息
28 return
29 (代码) <- 异步编译 数据
30 结果函数 = 加载字符串 代码
31 结果函数!
32
33do
34 <- 函数1
35 <- 函数2
36 do
37 <- 函数3
38 <- 函数4
39 <- 函数5
40 <- 函数6
41 函数7!
42
43do
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
70local 变量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
78nil
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
2class 你好
3 new: (@测试, @世界) =>
4 打印 "创建对象.."
5 你好: =>
6 打印 @测试, @世界
7 __tostring: => "你好 世界"
8
9对象x = 你好 1,2
10对象x\你好()
11
12打印 对象x
13
14class 简单
15 酷: => 打印 "酷"
16
17class 伊克斯 extends 简单
18 new: => 打印 "你好已创建"
19
20x对象 = 伊克斯()
21x对象\酷()
22
23
24class 嗨
25 new: (参数) =>
26 打印 "初始化参数", 参数
27
28 酷: (数值) =>
29 打印 "数值", 数值
30
31
32class 简单 extends 嗨
33 new: => super "伙计"
34 酷: => super 120302
35
36x对象 = 简单()
37x对象\酷()
38
39打印 x对象.__class == 简单
40
41
42class 好吧
43 -- what is going on
44 一些东西: 20323
45 -- yeaha
46
47
48class 好哒 extends 好吧
49 一些东西: =>
50 super 1,2,3,4
51 super.一些东西 另一个自己, 1,2,3,4
52 断言 super == 好吧
53
54
55class 好
56 不错: =>
57 super\一些东西 1,2,3,4
58
59
60class 什么
61 一些东西: => 打印 "值:", @值
62
63class 你好 extends 什么
64 值: 2323
65 一些东西: => super\一些东西
66
67with 你好!
68 对象x = \一些对象!
69 打印 对象x
70 对象x!
71
72class 超级酷
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
97class 一个类
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
120class 怪怪的
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
140class 对象a.字段b.字段c.子类D
141 _ = nil
142
143
144class 对象a.字段b["你好"]
145 _ = nil
146
147class (-> 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
161global ^
162class 一个类
163 _ = nil
164
165
166--
167
168-- hoisting
169class 一个类
170 值 = 23
171 {:插入} = 表
172 new: => 打印 插入, 值 -- prints nil 23
173
174--
175
176class X类
177 new: 嗨
178
179
180--
181
182class 酷 extends 东西
183 当: =>
184 {
185 你好: -> super!
186 世界: -> super.one
187 }
188
189--
190
191class 奇怪 extends 东西
192 当: 做点事 =>
193 super!
194
195---
196
197class 喔哈 extends 东西
198 @底部: ->
199 super!
200 _ = super.你好
201 super\你好!
202 super\你好
203
204
205 @空间: 酷 {
206 ->
207 super!
208 _ = super.你好
209 super\你好!
210 super\你好
211 }
212
213do
214 class 测试
215 new: => @@如果 = true
216 @做: => 1
217 测试: => @@如果 and @@做!
218 测试实例 = 测试!
219 测试实例\测试!
220
221do
222 class 测试
223 new: => @如果 = true
224 做: => 1
225 测试: => @如果 and @做!
226 测试实例 = 测试!
227 测试实例\测试!
228
229class extends 青.应用
230 "/": => json: { 状态: true }
231
232class 类A using 类B, 类C, 类D, {值: 123}
233
234class 示例
235 @字段1 = 1
236 @字段2 = @字段1 + 1
237
238class 随便
239 new: (参数) => @x字段 = 参数
240 <mul>: (参数y) => @x字段 * 参数y
241 <"任意名称">: 123
242 :相加
243 :<add>
244
245nil
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
52nil
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
12else
13
14
15_无效变量 = if 酷 then 否
16_无效变量 = if 酷 then 否 else 是
17
18if 酷 then 喔 酷 else
19 没那么 酷
20
21if 在工作
22 _无效变量 = if 酷 then if 酷 then 好吧 else 什么 else 呐
23
24
25if ✌️ then 无 日 elseif 酷 我 then 好吧 呀 else u型 路
26if ✌️ then 无 父 else if 酷 你 then 好吧 吧 else p型 路
27
28
29if (->)() then 随便 怎样
30
31if nil then 翻转 我 else
32 这个 是, 弧度
33
34
35if 东西 不错 then 没 法 elseif 好的 确定
36 什么 这里
37
38
39if 很多东西 then 没 机会
40elseif 好吧
41 现在 怎么办
42
43
44if 很多东西
45 是 伙计
46elseif 好的 人 then 嗨 好呀 else 嗯 确定
47
48if 我们 走吧
49 打印 "打招呼"
50elseif "只有我们"
51 打印 "威尔史密斯" else 显示 5555555
52
53--
54
55if 某东西 = 10
56 打印 某东西
57else
58 打印 "其它"
59
60你好 = if 某东西 = 10
61 打印 某东西
62else
63 打印 "其它"
64
65
66你好 = 5 + if 某东西 = 10
67 打印 某东西
68
69---
70
71z变量 = false
72
73_无效变量 = if false
74
75elseif 条件x = true
76
77elseif 条件z = true
78
79else
80
81
82
83输出 = if false
84
85elseif 条件x = true
86
87elseif 条件z = true
88
89else
90
91
92变量 = ->
93 if 某东西 = true
94 1
95 elseif 另一个 = false
96 2
97
98---
99
100unless true
101 打印 "酷!"
102
103unless true and false
104 打印 "酷!"
105
106unless false then 打印 "酷!"
107unless false then 打印 "酷!" else 打印 "no way!"
108
109unless nil
110 打印 "hello"
111else
112 打印 "world"
113
114--
115
116x = unless true
117 打印 "酷!"
118
119x = unless true and false
120 打印 "酷!"
121
122y = unless false then 打印 "酷!"
123y = unless false then 打印 "酷!" else 打印 "没门!"
124
125z = unless nil
126 打印 "你好"
127else
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 打印 "你好"
141else
142 打印 "世界"
143
144--
145
146打印 "你好" unless 值
147
148变量dddd = {1,2,3} unless 值
149
150
151--
152
153do
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
170else 6
171
172
173变量m = if 1
174
175
176
177 if 2
178
179
180 3
181
182
183else 6
184
185do
186 函数a
187 :字段b
188 return if 函数a
189 :字段b
190 else if 函数c
191 字段d: 变量e
192 else
193 字段f: 123
194
195do
196 函数c
197 字段d: 变量e
198 if 条件a
199 :字段b = 变量tb
200 elseif 条件c
201 字段d: 变量e = 变量tb
202
203if :派 = 数学库
204 打印 派
205
206do
207 local 数学库
208 if :派 = 数学库
209 打印 派
210
211do
212 if _模块 = {}
213 :东西 = _模块
214 :a功能, :b功能 = _模块
215
216do
217 global _模块
218 if _模块 = {}
219 :东西 = _模块
220 :a功能, :b功能 = _模块
221
222do
223 变量v = if 1 and do
224 0 ~= 1
225 1
226 else
227 2
228
229nil
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
2do
3 {元素a, 元素b} = 你好
4
5 {{元素a}, 元素b, {元素c}} = 你好
6
7 { :你好, :世界 } = 值
8
9do
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
33do
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
56do
57 字段a:
58 字段b: 变量c
59 字段d: 变量e = 对象tb
60
61do
62 字段a:
63 * 字段b: 变量c
64 * 字段d: 变量e
65 * 元素f = 对象tb
66
67--
68
69do
70 { @世界 } = 变量x
71 { 对象a.字段b, 对象c.字段y, 函数!.字段z } = 变量x
72
73 { 世界: @世界 } = 变量x
74
75--
76
77do
78 东西 = {{1,2}, {3,4}}
79
80 for {元素x,元素y} in *东西
81 打印 元素x,元素y
82
83
84--
85
86do
87 with {元素a,元素b} = 东西
88 打印 元素a, 元素b
89
90
91--
92
93do
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
113do
114 变量z = "好"
115 {元素a,元素b,元素c} = 变量z
116
117do
118 {元素a,元素b,元素c} = 变量z
119
120_ = (参数z) ->
121 {元素a,元素b,元素c} = 参数z
122
123do
124 变量z = "〇〇"
125 _ = (参数k) ->
126 {元素a,元素b,元素c} = 参数z
127
128do
129 {函数:{结束:结束变量}} = 东西
130
131do
132 {如果:{元素a,元素b,元素c}} = 东西
133
134do
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
145do
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
169do
170 {<>: 元表 = {}, <sub>: 减函数} = 对象tb.字段x
171
172do
173 {x字段: {<>: 元表 = {}, <sub>: 减函数}} = 对象tb
174
175do
176 {元素a = 1, 元素b = 2, 字段c: {对像d.字段e = 3}} = 对象tb
177
178 for {左 = "null", 右 = false} in *元组列表
179 打印 左, 右
180
181do
182 {_, a元素, _, b元素} = 对象tb -- list placeholder
183
184do
185 {字段x: 对象a.字段b = 1, y字段: a对象.c字段 = 2} = 对象x.字段x.字段x
186
187do
188 const :宽, :高 = 视区.尺寸
189 const {:x坐标 = 0.0, :y坐标 = 0.0} = 点
190
191do
192 变量1, 变量2, 变量3, 数组a[], 变量d, {元素b}, 变量e, 对象c.<> = 1, 2, 3, 函数!
193 变量y1, :字段y2, :字段y3, 变量y4 = 函数1!, 函数2!
194
195do
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
203do
204 <[名称]>: 元值, [名称]: 值 = 对象tb
205
206do
207 {:<tostring> = (-> "名称"), :<add>} = 对象tb
208
209 switch 对象tb
210 when {:<name> = "项目", <"123">: 元字段}
211 打印 name, 元字段
212
213do
214 对象tb = {}
215 <[变量a + 变量b]>: 变量v1, [函数c!]: 变量v2 = 对象tb
216
217do
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, 有默认值
227nil
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
2do
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
10if 打印 and 变量x?
11 打印 变量x
12
13@?\函数 998
14
15with 对象abc?!\函数?!
16 if \函数p? "abc"
17 return 123
18
19if {: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
34unless 专业?
35 选修课程 '葡萄酒入门'
36
37if 窗体?
38 环境 = '浏览器(有可能)'
39
40邮编 = 抽奖.中奖者?!.地址?.邮政编码
41
42长度 = utf8?.长度 or 字符串?.长度 or (对象) -> #对象
43
44变量a = 表1?\结束? 123 + 表2?\然后 456
45
46变量b = 表1?\结束? or 表2?\然后
47
48with? io.open "测试.txt", "w"
49 \write "你好"
50 \close!
51
52表?.<call>? 123
53
54with? 表.<>?.<index>
55 .字段a = 1
56
57nil
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
2export 变量a,变量b,变量c = 223, 343, 123
3export 酷 = "🧧"
4
5变量d,变量e,变量f = 3, 2, 1
6export 变量d, 变量e, 变量f
7
8export class 某类
9 嗯: "酷"
10
11export if 这个
12 232
13else
14 4343
15
16export 什么 = if 这个
17 232
18else
19 4343
20
21export 变量y = ->
22 你好 = 3434
23
24export with 临时
25 变量j = 2000
26
27export cb的值 = do
28 变量h = 100
29 (参数)<- 函数
30 return 参数 h变量
31
32export 丫丫 = ->
33 变量h = 100
34 变量k = 100
35
36export switch 变量h
37 when 100, 150 then 200
38 when 200 then 300
39 else 0
40
41export 常量 = switch 值
42 when "好" then 1
43 when "更好" then 2
44 when "最好" then 3
45
46export 项目 = 123
47 |> 函数
48
49export 变量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
81local *
82变量1 = 1
83export 变量2 = 2
84export 变量3 = class 类4
85变量5 = 5
86
87export.<"🀄️"> = 1
88export.<name> = "导出"
89export.<call> = => {}
90export["导出-任意-名称"] = 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
4export default ->
5 打印 "你好"
6 123
7
8(参数x, 回调y)<- 函数 123, "abc" unless 是否结束
9打印 参数x
10(参数y, 结果)<- 回调y
11return if 结果
12 变量abc + 参数y
13else
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
161nil
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
2do
3 global 全局变量a,全局变量b,全局变量c = 223, 343, nil
4 global 酷 = "📉"
5
6do
7 global class 全局类
8 嗯: "🆒"
9
10do
11 global 全局变量a,全局变量b,全局变量c
12 全局变量a,全局变量b,变量c,变量d = "你好", nil, nil, nil
13
14
15do
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
34do
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
51do
52 global *
53 变量x = 3434
54 if 条件y then
55 变量x = 10
56
57do
58 global *
59 if 条件y then
60 变量x = 10
61 变量x = 3434
62
63do
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 @@
1do
2 变量a = 0
3 ::开始::
4 变量a += 1
5 goto 结束 if 变量a == 5
6 goto 开始
7 ::结束::
8
9do
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
16do
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
25do
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
34do
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
3import 你好 from 好的
4import 好呀, 世界 from 表["酷"]
5
6import 字段x, \字段y, 字段z from 道具组
7
8import 领主, \👻 from 找到 "我的表"
9
10_obj_0 = 232
11
12import 某物 from 一个 表格
13
14
15if 缩进
16 import 好吧, \很好 from 很多表[100]
17
18do
19 import 字段a, 字段b, 字段c from 对象z
20
21do
22 import 字段a,
23 字段b, 字段c from 对象z
24
25do
26 import 字段a
27 字段b
28 字段c from 对象z
29
30do
31 import
32 字段a
33 字段b
34 字段c from 对象z
35
36
37do
38 import
39 字段a
40 字段b
41 字段c
42 from 对象z
43
44
45do
46 import '模块'
47 打印 模块
48 import '模块_x'
49 打印 模块_x
50 import "下-划-线-模-块-啊"
51 打印 下_划_线_模_块_啊
52 import "模块.子模块"
53 打印 子模块
54
55do
56 import "小玩家" as 大玩家
57 import "lpeg库" as {:C, :Ct, :Cmt}
58 import "导出" as {一, 二, 某键:{嗯:{字符}}}
59 import "导出" as :又一个组件
60 打印 又一个组件
61
62do
63 global *
64 import '模块'
65 import '模块_x'
66 import "组织.包.模块-y"
67 打印 模块_y
68
69do
70 import "组织.包.模块" as 函数体:函数, 如果:如果变量
71
72do
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
9if 变量a in {1} and 变量b in {2, 3, 4} or 变量c in [1, 10]
10 打印 变量a, 变量b, 变量c
11
12switch 值
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
25do return 变量y not in (开始, 结束)
26
27do
28 存在 = 元素 in 表
29 检查 元素 in 表
30
31do
32 对象 = 获取!
33 存在 = 元素 in 表
34 检查 元素 in 表
35
36do
37 对象 = 获取!
38 列表 = {1, 2, 3}
39 不存在 = 元素 not in 列表
40 检查 元素 in 列表
41 检查 元素 in {1, 2, 3}
42 检查 元素(...) in {[1]: 1, [2]: 2, [3]: 3}
43
44do
45 检查 -> 对象x in 数组tb
46 检查 -> 对象x not in 数组tb
47 local 对象x, 数组tb
48 检查 -> return 对象x in 数组tb
49 检查 -> 对象x not in 数组tb
50
51nil
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
14require "实用"
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
2do
3 local 变量a
4 local 变量a, 变量b, 变量c
5
6 变量b, 变量g = 23232, nil
7
8do
9 变量x = 1212
10 某事 = ->
11 local 变量x
12 变量x = 1212
13
14do
15 local *
16 变量y = 2323
17 变量z = 2323
18
19do
20 local *
21 打印 "啥也没有!"
22
23do
24 local ^
25 x变量 = 3434
26 y变量 = 3434
27 X大写 = 3434
28 Y大写 = "好"
29
30do
31 local ^
32 x变量, y变量 = "a", "b"
33
34do
35 local *
36 x变量, y变量 = "a", "b"
37
38do
39 local *
40 if 某事
41 x变量 = 2323
42
43do
44 local *
45 do
46 变量x = "一"
47
48 变量x = 100
49 do
50 变量x = "二"
51
52do
53 local *
54 变量k = if 什么
55 10
56 变量x = 100
57 {变量a, 变量b, 变量c} = 变量y
58
59do
60 local *
61 变量a = 100
62 打印 "嗨"
63 变量b = 200
64 local *
65 变量c = 100
66 打印 "嗨"
67 变量d = 200
68 变量d = 2323
69
70do
71 local ^
72 a小写 = 5
73 A大写 = 3
74
75 class O一
76 F五 = 6
77
78 class T二
79 class N无
80
81do
82 local *
83 -- this generates a nil value in the body
84 for 变量a in *{} do _ = 变量a
85
86do
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
2for 变量x=1,10
3 打印 "yeah"
4
5for 变量x=1,#某物
6 打印 "yeah"
7
8for 变量y=100,60,-3
9 打印 "倒计时", 变量y
10
11for 变量a=1,10 do 打印 "好的"
12
13for 变量a=1,10
14 for 变量b = 2,43
15 打印 变量a,变量b
16
17for 变量i in 迭代器
18 for 变量j in 是的
19 变量x = 343 + 变量i + 变量j
20 打印 变量i, 变量j
21
22for 变量x in *某物
23 打印 变量x
24
25for 键,值 in pairs 你好 do 打印 键,值
26
27for 变量x in 变量y, 变量z
28 打印 变量x
29
30for 变量x in 变量y, 变量z, 键
31 打印 变量x
32
33for 名称, 成员们 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
65while true do 打印 "名称"
66
67while 5 + 5
68 打印 "好的 世界"
69 工作 人
70
71while 还有 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
92while true
93 continue if false
94 打印 "是的"
95 break if true
96 打印 "不"
97
98for 变量i = 1, 10
99 while true
100 if not true
101 continue
102 break
103
104变量a = 1
105repeat
106 变量a += 1
107 if 变量a == 5
108 continue
109 if 变量a == 6
110 break
111 打印 变量a
112until 变量a == 10
113
114变量x = 0
115repeat
116 变量x += 1
117 变量y = 变量x
118 continue if 变量x < 5
119 打印 变量y
120until 变量y == 10
121
122变量a = 3
123until 变量a == 0
124 变量a -= 1
125完成 = false
126until 完成 do 完成 = true
127repeat
128 打印 "你好"
129until true
130until 完成
131 变量x = 10
132 repeat
133 变量x -= 1
134 until 变量x == 0
135until 条件
136 打印 "好的"
137
138for 变量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
146for 变量a in *{1,2,3,4,5,6}
147 continue if 变量a == 1
148 continue if 变量a == 3
149 打印 变量a
150
151for 变量x=1,10
152 continue if 变量x % 2 == 0
153 for 变量y = 2,12
154 continue if 变量y % 3 == 0
155
156while true
157 continue if false
158 break
159
160while true
161 continue if false
162 return 22
163
164--
165
166do
167 三重x = {1,2,3,4}
168 for 东西 in *三重x
169 打印 东西
170
171do
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 @@
1import "unicode.macro_export" as {
2 $, -- import all macros
3 $配置: $我的配置, -- rename macro $config to $myconfig
4}
5
6import "unicode.macro_todo" as $
7
8$断言集 对象 == nil
9
10$我的配置 false
11
12结果 = $断言 对象 == nil
13
14macro 和 = (...)->
15 值们 = [元素 for 元素 in *{...}]
16 $显示宏 "和", "#{ table.concat 值们, " and " }"
17
18if $和 函数1!
19 打印 "没问题"
20
21if $和 函数1!, 函数2!, 函数3!
22 打印 "没问题"
23
24对象 = $复制(
25 @
26 {位置: {}, 标签: 标签::转数字!}
27 标识
28 连接们
29 位置.x坐标
30 位置.y坐标
31 位置.z坐标
32)
33
34macro 在 = (目标, ...)->
35 值们 = [元素 for 元素 in *{...}]
36 $显示宏 "在", table.concat ["#{目标} == #{值}" for 值 in *值们], " or "
37
38if 变量x |> $在 "🍎", "🐷", "🐶"
39 打印 "存在"
40
41macro 映射 = (数组, 动作)->
42 $显示宏 "映射", "[#{动作} for _ in *#{数组}]"
43
44macro 过滤 = (数组, 动作)->
45 $显示宏 "过滤", "[_ for _ in *#{数组} when #{动作}]"
46
47macro 合并 = (数组, 默认值, 动作)->
48 $显示宏 "合并", "if ##{数组} == 0
49 #{默认值}
50else
51 _1 = #{默认值}
52 for _2 in *#{数组}
53 _1 = #{动作}
54 _1"
55
56macro 每一个 = (数组, 动作)->
57 $显示宏 "每一个", "for _ in *#{数组}
58 #{动作}"
59
60macro 管道 = (...)->
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
86macro 加 = (参数a, 参数b)-> "#{参数a} + #{参数b}"
87
88$加(1,2)\调用 123
89
90结果 = 1 |> $加 2
91
92macro 柯里化 = (...)->
93 参数数组 = {...}
94 长度 = #参数数组
95 主体 = 参数数组[长度]
96 定义 = table.concat ["(#{参数数组[计数]})->" for 计数 = 1, 长度 - 1]
97 "#{定义}\n#{主体\gsub "^do%s*\n",""}"
98
99f = $柯里化 参数x,参数y,参数z,do
100 打印 参数x,参数y,参数z
101
102macro 获取里值 = (值)-> "do
103 变量a = 1
104 变量a + 1"
105
106macro 获取里值_保持卫生 = (值)-> "(->
107 local 变量a = 1
108 变量a + 1)!"
109
110do
111 变量a = 8
112 变量a = $获取里值!
113 变量a += $获取里值!
114 打印 变量a
115
116do
117 变量a = 8
118 变量a = $获取里值_保持卫生!
119 变量a += $获取里值_保持卫生!
120 打印 变量a
121
122macro Lua代码 = (代码)-> {
123 code: 代码
124 type: "lua"
125}
126
127变量x = 0
128
129$Lua代码 [[
130local function f(a)
131 return a + 1
132end
133x = x + f(3)
134]]
135
136$Lua代码[[
137function tb:func()
138 print(123)
139end
140]]
141
142打印 变量x
143
144macro 定义函数 = (函数名, ...)->
145 参数数组 = {...}
146 最后一个 = table.remove 参数数组
147 {
148 code: $显示宏 "定义函数", "local function #{函数名}(#{table.concat 参数数组, ', '})
149 #{最后一个}
150end"
151 type: "lua"
152 }
153
154sel = (参数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
166macro 插入注释 = (文本)-> {
167 code: "-- #{文本\match '[\'"](.*)[\'"]'}"
168 type: "lua"
169}
170
171$插入注释 "这有个注释"
172
173import '下划线' as _
174
175macro 链式调用 = (...)->
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
207macro 链式调用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
237macro 链式调用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
265macro 表 = -> "{'abc', 字段a:123, <call>:=> 998}"
266打印 $表[1], $表.字段a, ($表)!, $表!
267
268打印 "当前代码行数: #{ $LINE }"
269
270$待办
271
272macro 跳过 = -> ""
273
274do
275 打印 1
276 <- $跳过
277 打印 2
278 打印 3
279
280macro 跳过 = -> "while false do break"
281
282_1 = ->
283 打印 1
284 <- $跳过
285 打印 2
286 打印 3
287
288macro 隐式返回宏是允许的 = -> "打印 '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 @@
1import "unicode.macro_todo" as $
2import "unicode.macro_todo" as {$, $todo: $待办}
3
4export macro 配置 = (调试 = true)->
5 global 调试模式 = 调试 == "true"
6 global 调试宏 = true
7 ""
8
9export macro 显示宏 = (名称, 结果)->
10 if 调试宏 then "
11do
12 文本 = #{结果}
13 print '[宏 ' .. #{名称} .. ']'
14 print 文本
15 文本
16"
17 else
18 结果
19
20export macro 断言集 = (条件)->
21 if 调试模式
22 $显示宏 "断言集", "assert #{条件}"
23 else
24 ""
25
26export macro 断言 = (条件)->
27 if 调试模式
28 $显示宏 "断言", "assert #{条件}"
29 else
30 "#{条件}"
31
32export macro 复制 = (源, 目标, ...)->
33 $断言集(
34 源 != "_源_" and 源 != "_目标_" and 目标 != "_源_" and 目标 != "_目标_"
35 "复制目标的参数不能是 _源_ or _目标_"
36 )
37 "
38do
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 @@
1export macro 待办内部实现 = (模块, 行数, 消息)->
2 print "待实现#{消息 and ': ' .. 消息 or ''}, 文件为: #{模块}, 代码行数: #{行数}"
3 {
4 code: "-- 待实现#{消息 and ': ' .. 消息 or ''}"
5 type: "lua"
6 }
7
8export 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
7do close _ = <close>: -> 打印 "离开作用域"
8
9变量d, 变量e = 变量a.关闭, 变量a.<close>
10
11变量f = 变量a\<close> 1
12变量a.<add> = (x, y)-> x + y
13
14do
15 {:新, :<close>, <close>: 关闭A} = 变量a
16 打印 新, close, 关闭A
17
18do
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
37mt = 变量a.<>
38
39表\函数 #列表
40表\<"函数">列表
41表\<"函数"> 列表
42
43import "模块" as :<index>, <newindex>:设置函数
44
45with 表
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
55local index
56<>:__index:索引 = 变量a
57:<index> = 变量a
58
59do <>:{新:构造, :更新} = 变量a
60do {新:构造, :更新} = 变量a.<>
61
62表 = {}
63do
64 变量f = 表\<"值#{x < y}">(123, ...)
65 变量f 表\<'值'> 123, ...
66 表\<[[
67
68 1
69 ]]>(123, ...)
70 return 表\<["值" .. tostring x > y]>(123, ...)
71
72do
73 变量f = 表\<'值'>(123, ...)
74 变量f 表\<'值'>(123, ...)
75 表\<'值'>(123, ...)
76 return 表\<'值'> 123, ...
77
78do
79 变量f = 表.<["值"]> 123, ...
80 变量f = 表.<"值#{x < y}">(123, ...)
81 变量f 表.<'值'> 123, ...
82 表.<[[ 值
831]]>(123, ...)
84 return 表.<["值" .. tostring x > y]>(123, ...)
85
86nil
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
65with 项目
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
98nil
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 @@
1do
2 变量a = 变量b ?? 变量c
3
4do
5 :字段a = 变量b ?? 变量c
6
7do
8 变量a = 函数!
9 变量a ??= false
10
11do
12 变量a ??= 函数!
13
14do
15 local 变量a, 变量b, 变量c, 变量d, 变量e
16 变量a = 变量b ?? 变量c ?? 变量d ?? 变量e
17
18do
19 变量a = 变量b ?? 变量c ?? 变量d ?? 变量e
20
21do
22 函数 变量x ?? "你好"
23
24do
25 with 函数A! ?? 函数B!
26 打印 .字段
27
28do
29 变量a = 1 + 2 + 变量b ?? 变量c + 3 + 4
30
31do
32 变量a = 1 + 2 + (变量b ?? 变量c) + 3 + 4
33
34do
35 :字段a, :字段b = 函数!
36 变量a or= 1
37 变量b ??= 变量c ?? 2
38
39do
40 变量a = 1 ?? 2 ?? 3
41
42do
43 变量a.字段.字段 ??= 1
44 变量a = 变量b.字段 ?? 变量c.字段 ?? 变量d.字段
45 变量a.字段 ??= 1
46
47nil
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 ^
482
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
14if 变量x = 233 |> math.max 998
15 打印 变量x
16
17with 变量b |> 创建? "new"
18 .value = 123
19 打印 \工作!
20
21123 |> 函数f?
22
23"abc" |> 函数1? |> 函数2?
24
25变量c = "abc" |> 函数1? |> 函数2?
26
27函数f = ->
28 参数 |> x.y?\如果
29
30998 |> 函数2 "abc", 233 |> 函数0 |> 函数1
31998 |> 函数0("abc", 233) |> 函数1 |> 函数2
32
331 |> 函数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
60123 |> not 函数! |> 函数f
61
62do
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
83nil
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
11if 颜色 = 消息\匹配 "<%w*>" then 消息 = 消息\替换 "<%->", 颜色
12
13消息 = 消息\替换 "<%->", 颜色 if 颜色 = 消息\匹配 "<%w*>"
14
15数值A = 方法! if 方法 = 获取方法!
16
17local 数值A = 方法! if 方法 = 获取方法!
18
19数值B = do
20 方法 = 获取方法!
21 方法?!
22
23global 背包 =
24 东西:
25 好的: 200
26 他们: ->
27 打印 "你好"
28 你的脚"小"
29 美丽: 头发
30 黄金: 嗯哼
31 为什么: 1000
32
33 吃: 食物
34 好的: 朋友
35
36开始 =
37 东西: "冷"
38
39local 洗澡 =
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
8do
9 for 变量x in *物品 do return 变量x
10
11do
12 return [变量x for 变量x in *物品]
13
14do
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
34do
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
51do
52 return
53 :值
54 物品A: 123
55 物品B: "abc"
56
57do
58 return
59 * 1
60 * 2
61 * ...三
62 * 4
63
64_ = -> 变量a\变量b
65do 变量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
30nil
31Fail 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
17nil
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 @@
1switch 值
2 when "酷"
3 打印 "你好,世界"
4
5switch 值
6 when "酷"
7 打印 "你好,世界"
8 else
9 打印 "好的,很棒"
10
11switch 值
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
30with 东西
31 switch \值!
32 when .确定
33 变量_ = "世界"
34 else
35 变量_ = "是的"
36
37修复 这个
38call_func switch 某物
39 when 1 then "是"
40 else "否"
41
42--
43
44switch 嗨
45 when 你好 or 世界
46 变量_ = 绿色
47
48--
49
50switch 嗨
51 when "一个", "两个"
52 打印 "酷"
53 when "爸爸"
54 变量_ = 否
55
56switch 嗨
57 when 3+1, 你好!, (-> 4)!
58 变量_ = 黄色
59 else
60 打印 "酷"
61
62do
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
79do
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
106do
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
123do
124 表格 = 变量x: "abc"
125 switch 表格
126 when :变量x, :变量y
127 打印 "变量x: #{变量x} 和 变量y: #{变量y}"
128 when :变量x
129 打印 "只有 变量x: #{变量x}"
130
131do
132 匹配 = switch 表格
133 when 1
134 "1"
135 when :变量x
136 变量x
137 when false
138 "false"
139 else
140 nil
141
142do
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
155do
156 switch 变量y
157 when {变量x: <>: 表}
158 打印 表
159
160nil
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
54return 5 + () -> 4 + 2
55
56return 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
88f ""[变量a]
89f ""\变量b!
90f "".变量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
137if 你好 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
183with 表
184 .字段a.变量c += 1
185
186表[] = 10
187变量a.变量b.变量c[] = 1
188变量x[] = if 条件v
189 1
190else
191 2
192with 表
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
221div 类: "酷"
222
223_ = 5 + 什么 无聊
224什么 无聊 + 5
225
226_ = 5 - 什么 无聊
227什么 无聊 - 5
228
229变量x = 你好 - 世界 - 某物
230
231((某物 = 与 什么
232 \酷 100) ->
233 打印 某物)!
234
235if 某物
236 _ = 03589
237
238-- 好的 什么 关于这个
239
240else
241 _ = 3434
242
243if 某物
244 _ = 是的
245
246elseif "嗯嗯嗯"
247
248 打印 "酷"
249
250else
251
252 _ = 好的
253
254-- 测试名字包含关键词
255变量x = 不是某物
256变量y = 如果某物
257变量z = 变量x 与 变量b
258变量z = 变量x 与b
259
260while 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
348f = ->
349 变量a,变量b, \
350 变量c,变量d, \
351 变量e,变量f
352
353f = ->
354 变量a,变量b \
355 ,变量c,变量d \
356 ,变量e,变量f
357
358with 对象
359 调用(
360 --[[参数1]] \函数!,
361 --[[参数2]] 123,
362 --[[参数3]] "abc"
363 )
364
365调用A(
366 调用B(
367 调用C 123
368 )
369)
370
371123
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 -
3851
386 变量a-
3871
388 变量a - --[[123]]1
389
390 变量a ~1
391 变量a(
392~1)
393 变量a \
394~ 1
395 变量a~1
396 变量a ~ 1
397 变量a ~
3981
399 变量a~
4001
401 变量a ~ --[[123]]1
402}
403
404do
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
436do
437 f = (
438 变量a -- 参数a
439 变量b -- 参数b
440 )-> 变量a + 变量b
441 f(
442 变量a -- 值a
443 变量b -- 值b
444 )
445 f !
446
447nil
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
24fwip变量 =
25 东西: 你好"什么", 数字: 2323,
26 什么: yo变量 "妈妈", "是的",
27 水果: basket变量
28 坚果: day变量
29
30frick变量 = 你好: "世界"
31
32frack变量, 最好 = 你好: "世界", 米饭: 3434, "什么"
33
34ya变量 = { 1,2,3, 键: 100, 343, "你好", 嗯: 232 }
35
36x变量 = { 1,2,
37 4343, 343 ,343 }
38
39g变量, p变量 = {
40 1,2, nowy变量: "是", 3,4,
41 嘿: 232, 另一个: "天"
42}, 234
43
44annother变量 = {
45 1,2,3
46 3,4,5
47 6,7,8
48}
49
50是的变量 = {
51 [232]: 3434, "你好"
52 冰: "蛋糕"
53}
54
55-- 混淆的东西...
56whatabout变量 = {
57 你好 世界, 另一个变量
58 什么, 关于, 现在
59
60 你好"世界", 是的变量
61 你好 "世界", 是的变量
62}
63
64x变量 =
65 -- 是的
66 东西: => "你好"
67 酷: -- 嗯
68 --so ething
69 床: {
70 2323,2323
71 }
72 红: 2343 -- 这里
73 -- 什么
74 名字: (node变量) => @value node变量 -- 这里
75 -- 评论我
76-- 好的
77
78x变量 = { :东西, 东西: 东西变量 }
79
80y变量 = {
81 :你好, :那里, :怎么样, :你
82 :事情
83}
84
85电话我 "你好", :x变量, :y变量, :z变量
86
87t变量 = {
88 a变量: 'a'
89 [b变量]: 'b'
90}
91
92xam变量 = {
93 你好: 1234
94 "你好": 12354
95 [[你好变量]]: 12354
96 ["你好"]: 12354
97 [ [[你好变量]] ]: 12354
98}
99
100kam变量 =
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-- 这两者都有令人满意的输出
121keepit 继续: 真的,
122 好的: "是的",
123 workd变量: "好的"
124
125事情 什么:
126 "伟大", 没有:
127 "更多"
128 好的: 123
129
130
131--
132事情 什么:
133 "伟大", 没有:
134 "更多"
135_变量 = 好的: 123 -- 一个匿名表
136
137
138--
139
140k变量 = { "你好": "世界" }
141k变量 = { '你好': '世界' }
142k变量 = { "你好": '世界', "帽子": "zat变量" }
143
144请 "你好": "世界"
145k变量 = "你好": "世界", "一个": "区域"
146
147f1变量, f2变量, f3变量 = "一个", "两个": three变量, "四"
148f1变量, f2变量 = "两个": three变量, "四"
149f1变量 = { "一个", "两个": three变量, "四" }
150
151j1变量, 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
233tb混合 = {
234 1, 2, 3
235 ... with 物品
236 .x = 1
237 \函数!
238 "a", "b", "c"
239 ...函数?!
240 键: "值"
241 ... -- 在此处执行Lua表行为
242}
243
244tb混合A = {
245 ...[变量i for 变量i = 1, 10]
246 11
247}
248
249tb混合B = {
250 ... ... -- 此处仅访问vararg中的第一个项
251 ... {...}
252 ... {......}
253 1, 2, 3
254}
255
256const 模板 = {
257 foo: "你好"
258 bar: "世界"
259 baz: "!"
260}
261
262const 专门化 = {
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
285tb块 =
286 子菜单:
287 :值
288 * ...物品
289 * ...
290
291函数
292 * ...物品
293 :值
294 * ...
295 k: 变量v
296 * ...
297
298nil
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 @@
1try
2 函数 1, 2, 3
3catch 错误
4 打印 错误
5
6try 函数 1, 2, 3
7catch 错误
8 打印 错误
9
10try
11 打印 "正在try"
12 函数 1, 2, 3
13
14do
15 成功, 结果 = try
16 函数 1, 2, 3
17 catch 错误
18 打印 错误
19
20 成功, 结果 = try 函数 1, 2, 3
21
22try 表.函数
23try 表.函数!
24try 表.函数()
25try (表.函数!)
26try (表\函数(1, 2, 3))
27
28try 表.函数 1
29try 表.函数(1)
30
31if (try 函数 1
32catch 错误
33 打印 错误)
34 打印 "好的"
35
36if try (函数 1)
37catch 错误
38 打印 错误
39 打印 "好的"
40
41do
42 if 成功, 结果 = try 函数 "abc", 123
43 打印 结果
44
45 成功, 结果 = try 函数 "abc", 123
46 catch 错误
47 打印 错误
48
49 打印 结果 if 成功, 结果 = try 函数 "abc", 123
50 catch 错误
51 打印 错误
52
53do
54 try
55 函数 1, 2, 3
56
57 try 函数 1, 2, 3
58
59nil
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 @@
1if 变量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
24do
25 变量a = {}
26 (using nil) <- _
27 {元素x, 元素y} = 变量a
28
29nil
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_ = {
131,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
67if 你好 1,2,3,
68 世界,
69 世界
70 打印 "你好"
71
72if 你好 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
94v = ->
95 变量a, \-- v1
96 变量b, \-- v2
97 变量c -- v3
98
99v1, 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
115for 变量a, \-- 解构1
116 变量b, \-- 解构2
117 --[[解构 3]] 变量c \
118 in pairs 对象tb
119 打印 变量a, \
120 变量b, \
121 变量c
122
123for i = 1, \-- 初始
124 10, \-- 停止
125 -1 -- 步进
126 打印 i
127
128local 变量a,\
129 变量b,\
130 变量c
131
132nil
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 @@
1do
2 变量a = ->
3 with 东西
4 打印 .你好
5 打印 你好
6 打印 "世界"
7
8do
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
22do
23 滋滋滋 = with 东西
24 .设置状态 "你好 世界"
25
26do
27 变量x = 5 + with 某事!
28 \写 "你好 世界"
29
30do
31 变量x = {
32 你好: with 好的
33 \确定!
34 }
35
36do
37 with 东西
38 _ = \属性"某物".你好
39 .属性\发送(一个)
40 .属性\发送 一个
41
42--
43
44do
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
65do
66 变量x = "你好"
67 with 变量x
68 变量x\大写!
69
70do
71 with 变量k = "乔"
72 打印 \大写!
73
74do
75 with 变量a,变量b,变量c = "", "", ""
76 打印 \大写!
77
78do
79 变量a = "床铺"
80 with 变量a,变量b,变量c = "", "", ""
81 打印 \大写!
82
83do
84 with 变量j
85 打印 \大写!
86
87do
88 with 变量k.变量j = "乔"
89 打印 \大写!
90
91do
92 with 变量a
93 打印 .b
94 with .c
95 打印 .d
96
97do
98 with 变量a
99 with .b = 2
100 打印 .c
101
102do
103 _ = ->
104 with 嗨
105 return .a, .b
106
107do
108 with 表格
109 .x = 项目
110 .字段
111 \函数 123
112
113do
114 with 爸爸
115 .如果 "是的"
116 变量y = .结束.函数
117
118do
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
132do
133 global 掩码
134 with? 掩码 = 实心矩形 宽: w, 高: h, 颜色: 0x66000000
135 .触摸启用 = true
136 .吞噬触摸 = true
137
138do
139 with? 掩码 = 实心矩形 宽: w, 高: h, 颜色: 0x66000000
140 .触摸启用 = true
141 .吞噬触摸 = true
142
143nil
144