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/unicode | |
| 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/unicode')
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 | |||
