From e61cce21ef7def2c2e52dd6cb6a5b540ebcac29d Mon Sep 17 00:00:00 2001 From: Li Jin Date: Thu, 17 Aug 2023 10:36:15 +0800 Subject: add unicode identifier support, fix more issue from #144 --- spec/inputs/unicode/ambiguous.yue | 82 ++++++ spec/inputs/unicode/assign.yue | 92 +++++++ spec/inputs/unicode/attrib.yue | 53 ++++ spec/inputs/unicode/backcall.yue | 79 ++++++ spec/inputs/unicode/bubbling.yue | 27 ++ spec/inputs/unicode/class.yue | 245 +++++++++++++++++ spec/inputs/unicode/comprehension.yue | 52 ++++ spec/inputs/unicode/cond.yue | 232 +++++++++++++++++ spec/inputs/unicode/destructure.yue | 228 ++++++++++++++++ spec/inputs/unicode/do.yue | 27 ++ spec/inputs/unicode/existential.yue | 58 +++++ spec/inputs/unicode/export.yue | 90 +++++++ spec/inputs/unicode/export_default.yue | 15 ++ spec/inputs/unicode/funcs.yue | 161 ++++++++++++ spec/inputs/unicode/global.yue | 77 ++++++ spec/inputs/unicode/goto.yue | 41 +++ spec/inputs/unicode/import.yue | 78 ++++++ spec/inputs/unicode/in_expression.yue | 52 ++++ spec/inputs/unicode/lists.yue | 67 +++++ spec/inputs/unicode/literals.yue | 55 ++++ spec/inputs/unicode/local.yue | 91 +++++++ spec/inputs/unicode/loops.yue | 194 ++++++++++++++ spec/inputs/unicode/macro.yue | 291 +++++++++++++++++++++ spec/inputs/unicode/macro_export.yue | 49 ++++ spec/inputs/unicode/macro_todo.yue | 13 + spec/inputs/unicode/metatable.yue | 87 +++++++ spec/inputs/unicode/multiline_chain.yue | 99 +++++++ spec/inputs/unicode/nil_coalescing.yue | 48 ++++ spec/inputs/unicode/operators.yue | 70 +++++ spec/inputs/unicode/pipe.yue | 84 ++++++ spec/inputs/unicode/plus.yue | 41 +++ spec/inputs/unicode/return.yue | 66 +++++ spec/inputs/unicode/string.yue | 74 ++++++ spec/inputs/unicode/stub.yue | 18 ++ spec/inputs/unicode/switch.yue | 161 ++++++++++++ spec/inputs/unicode/syntax.yue | 448 ++++++++++++++++++++++++++++++++ spec/inputs/unicode/tables.yue | 299 +++++++++++++++++++++ spec/inputs/unicode/try_catch.yue | 60 +++++ spec/inputs/unicode/unless_else.yue | 5 + spec/inputs/unicode/using.yue | 29 +++ spec/inputs/unicode/vararg.yue | 96 +++++++ spec/inputs/unicode/whitespace.yue | 133 ++++++++++ spec/inputs/unicode/with.yue | 144 ++++++++++ 43 files changed, 4411 insertions(+) create mode 100644 spec/inputs/unicode/ambiguous.yue create mode 100644 spec/inputs/unicode/assign.yue create mode 100644 spec/inputs/unicode/attrib.yue create mode 100644 spec/inputs/unicode/backcall.yue create mode 100644 spec/inputs/unicode/bubbling.yue create mode 100644 spec/inputs/unicode/class.yue create mode 100644 spec/inputs/unicode/comprehension.yue create mode 100644 spec/inputs/unicode/cond.yue create mode 100644 spec/inputs/unicode/destructure.yue create mode 100644 spec/inputs/unicode/do.yue create mode 100644 spec/inputs/unicode/existential.yue create mode 100644 spec/inputs/unicode/export.yue create mode 100644 spec/inputs/unicode/export_default.yue create mode 100644 spec/inputs/unicode/funcs.yue create mode 100644 spec/inputs/unicode/global.yue create mode 100644 spec/inputs/unicode/goto.yue create mode 100644 spec/inputs/unicode/import.yue create mode 100644 spec/inputs/unicode/in_expression.yue create mode 100644 spec/inputs/unicode/lists.yue create mode 100644 spec/inputs/unicode/literals.yue create mode 100644 spec/inputs/unicode/local.yue create mode 100644 spec/inputs/unicode/loops.yue create mode 100644 spec/inputs/unicode/macro.yue create mode 100644 spec/inputs/unicode/macro_export.yue create mode 100644 spec/inputs/unicode/macro_todo.yue create mode 100644 spec/inputs/unicode/metatable.yue create mode 100644 spec/inputs/unicode/multiline_chain.yue create mode 100644 spec/inputs/unicode/nil_coalescing.yue create mode 100644 spec/inputs/unicode/operators.yue create mode 100644 spec/inputs/unicode/pipe.yue create mode 100644 spec/inputs/unicode/plus.yue create mode 100644 spec/inputs/unicode/return.yue create mode 100644 spec/inputs/unicode/string.yue create mode 100644 spec/inputs/unicode/stub.yue create mode 100644 spec/inputs/unicode/switch.yue create mode 100644 spec/inputs/unicode/syntax.yue create mode 100644 spec/inputs/unicode/tables.yue create mode 100644 spec/inputs/unicode/try_catch.yue create mode 100644 spec/inputs/unicode/unless_else.yue create mode 100644 spec/inputs/unicode/using.yue create mode 100644 spec/inputs/unicode/vararg.yue create mode 100644 spec/inputs/unicode/whitespace.yue create mode 100644 spec/inputs/unicode/with.yue (limited to 'spec/inputs/unicode') 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 @@ +import 绑定 from 抓取 +(绑定 声明) 颜色: "Red" + +变量a = 'b' +变量c = 变量d +(变量a 变量b) 变量c 变量d +import 变量c from 变量d +(变量a 变量b) 变量c 变量d +(变量c 变量d) 变量a 变量b +变量a, 变量b = 变量c, 变量d +(变量d 变量a) 变量c + +macro 宏 = (函数, 参数)-> "(#{函数}) #{参数}" +for 计数 = 1, 10 + 变量a = -> + $宏 打印, 1 + 变量a = 变量f + $宏 打印, 2 + if 条件 + $宏 打印, 3 + ::跳转位置:: + (打印) 4 + goto 跳转位置 + (打印) 5 + +macro 🌛 = (代码)-> { + code: 代码 + type: "lua" +} + +do + 打印() + 1 |> b变量 |> (a变量) + 打印() + <- (fn) + +do + 打印() + () <- 异步函数() + 打印() + $🌛[==[ + --[[a comment to insert]] + (haha)() + ]==] + nil + +macro 宏v = -> '打印 123' +do + global * + $宏v! + +do + 函数f + :v变量 + + 数组 = while 条件f + :v变量 + + repeat + 打印 变量v + until 条件f + :变量v + + with 条件f + :变量v = 数组 + .字段x = 1 + + 变量x = if 条件f + :字段v + + 变量x = switch 条件f + :字段v + when 条件f + :字段v + + 数字数组 = for 数字 = 1, 长度 + :数字 + + 对象数组 = for 物件 in *物件数组 + 名称: 物件 + +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 @@ + +_无效变量 = -> + joop变量 = 2302 + + (好) -> + 变量d = 100 + 好 = 1021 + + 变量a,变量b,变量c,变量d = 1,2,3,4 + + 你好[232], (5+5)[121], 你好, 变量x[99] = 100, 200, 300, 400 + + joop变量 = 12 + +joop变量 = 2345 + +变量a, 变量b = if 你好 + "你好", nil +else + "没啥", "✌️" + + +变量a, 变量b = if 你好 + if ✌️ then "一", "二" else "mmhh", nil +else + 打印 "其它东西" + "没啥事", "✌️" + +变量c, 变量d = 1, 2 if true + +变量x = (do + 函数! + 123) if 函数 = 获取处理函数! + +(using nil) <- _无效变量 + +a变量.<> = do + 打印 123 + {} + +do + {元素a, 元素b} = switch 对象c + when "a" + 字典 + when "b" + 函数! + +a数组[] = if 条件x + 1 +else + 2 + +do + 变量a, 变量b[] = if x条件 + switch 对象y + when 1 + 函数! + +do + 变量a, {元素b} = if x条件 + 函数! + else + 123, 表 + +do + 变量a, 数组b[], 对象c, 对象d. = if 条件x + switch 对象y + when 1 + 函数! + elseif 条件x2 + if 条件y2 + 函数1! + else + 打印 "hello" + do + 打印 123 + 1, 函数2! + +do + 变量a = 变量b = 变量c = 变量d = 0 + +do + a变量 = b变量 = c变量 = d变量 = 函数! + +do + {a元素} = :字段b = 对象c.字段d = 变量e = 数组对象 + +do + 值 = 123 + 变量a = 变量b = 变量c = 值 + +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 @@ +const 常量a, 常量b, 常量c, 常量d = 1, 2, 3, 4 + +do + close 关闭变量a, 关闭变量b = setmetatable {},__close:=> 打印 "已关闭" + const 变量c, 常量d = 123, 'abc' + + close 常量a, 常量b + const 常量c, 常量d + +do + const 常量a, {元素b, 元素c}, {元素d} = 函数!, 函数1! + +do + const 常量a, {元素b, 元素c}, {元素d} = 函数! + +do + close 关闭变量v = if 标记为真 + 函数调用! + else + : => + + close 关闭变量f = with io.open "文件.txt" + \write "你好" + +do + const 常量a = 1 if true + close 关闭变量b = (if 条件x then 1) unless false + const 常量c = (switch 条件x + when "abc" then 998) if true + close 关闭变量d = + :数值 if 条件a ?? 条件b + +do + close _无效变量 = with io.open "文件.txt" + \write "你好" + + close _无效变量 = : -> 打印 "第二" + + close _无效变量 = : -> 打印 "第一" + +_延迟对象数组 = : => + @[#@]! + @[#@] = nil + +延迟 = (项目)-> + _延迟对象数组[] = 项目 + _延迟对象数组 + +do + close _无效变量 = 延迟 -> 打印 3 + close _无效变量 = 延迟 -> 打印 2 + close _无效变量 = 延迟 -> 打印 1 + 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 @@ +do + (项目) <- 映射 {1,2,3} + 项目 * 2 + +do + (项目) <- 映射 _,{1,2,3} + 项目 * 2 + +do + (项目) <- 过滤 _, do + (项目) <- 映射 _,{1,2,3,4} + 项目 * 2 + 项目 > 2 + +do + (数据) <- 网络?.获取 "测试地址" + 网页体[".结果"]\网页 数据 + (是否处理成功) <- 网络.请求 "测试地址", 数据 + 网页体[".结果"]\添加 是否处理成果 + <- 设置超时回调 1000 + 打印 "完成" + +do + <- 同步状态 + (错误信息, 数据="nil") <- 异步加载 "文件.yue" + if 错误信息 + 打印 错误信息 + return + (代码) <- 异步编译 数据 + 结果函数 = 加载字符串 代码 + 结果函数! + +do + <- 函数1 + <- 函数2 + do + <- 函数3 + <- 函数4 + <- 函数5 + <- 函数6 + 函数7! + +do + :结果,:消息 = do + (数据) <- 异步接收 "文件名.txt" + 打印 数据 + (信息) <- 异步处理 数据 + 检查 信息 + 打印 结果, 消息 + + 总大小 = (for 文件 in *文件数组 + (数据) <- 异步加载 文件 + 加入缓存 文件, 数据) |> 合并 0, (对象a, 对象b)-> 对象a + 对象b + +属性A = do + (值) <= 属性定义 => @_值 + 打印 "之前值: #{@_值}" + 打印 "最新值: #{值}" + @_值 = 值 + +属性B = do + <= 属性定义 _, (值)=> + 打印 "之前值: #{@_值}" + 打印 "最新值: #{值}" + @_值 = 值 + @_值 + +警告 "嗨" + +local 变量x, 变量y, 变量z +变量x = do (变量a) < -变量b +变量x, 变量y, 变量z = do (变量a) <- 变量b +变量x, 变量y, 变量z = do (变量a) <-变量b + +变量x = do 变量a <= 变量b +变量x, 变量y, 变量z = do (变量a) <= 变量b + +nil + 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 @@ + +-- vararg bubbling +函数 = (...) -> #{...} + +不要冒泡 = -> + [元素 for 元素 in ((...)-> 打印 ...)("你好")] + +变量k = [元素 for 元素 in ((...)-> 打印 ...)("你好")] + +变量j = for 计数 = 1, 10 + (...) -> 打印 ... + +-- bubble me + +变量m = (...) -> + [元素 for 元素 in *{...} when 函数(...) > 4] + +_无效变量 = (...)-> + 数组x = for 计数 in *{...} do 计数 + 数组y = [元素 for 元素 in *{...}] + 数组z = [元素 for 元素 in 列表 when 函数(...) > 4] + + 数组a = for 计数 = 1, 10 do ... + + 数组b = for 计数 = 1, 10 + (...)-> 打印 ... + 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 @@ + +class 你好 + new: (@测试, @世界) => + 打印 "创建对象.." + 你好: => + 打印 @测试, @世界 + __tostring: => "你好 世界" + +对象x = 你好 1,2 +对象x\你好() + +打印 对象x + +class 简单 + 酷: => 打印 "酷" + +class 伊克斯 extends 简单 + new: => 打印 "你好已创建" + +x对象 = 伊克斯() +x对象\酷() + + +class 嗨 + new: (参数) => + 打印 "初始化参数", 参数 + + 酷: (数值) => + 打印 "数值", 数值 + + +class 简单 extends 嗨 + new: => super "伙计" + 酷: => super 120302 + +x对象 = 简单() +x对象\酷() + +打印 x对象.__class == 简单 + + +class 好吧 + -- what is going on + 一些东西: 20323 + -- yeaha + + +class 好哒 extends 好吧 + 一些东西: => + super 1,2,3,4 + super.一些东西 另一个自己, 1,2,3,4 + 断言 super == 好吧 + + +class 好 + 不错: => + super\一些东西 1,2,3,4 + + +class 什么 + 一些东西: => 打印 "值:", @值 + +class 你好 extends 什么 + 值: 2323 + 一些东西: => super\一些东西 + +with 你好! + 对象x = \一些对象! + 打印 对象x + 对象x! + +class 超级酷 + 👋: => + super(1,2,3,4) 1,2,3,4 + super.一些东西 1,2,3,4 + _ = super.一些东西(1,2,3,4).世界 + super\好吧"世界".不错 哈, 哈, 哈 + _ = 一些东西.上级 + _ = super.上级.上级.上级 + _ = super\你好 + nil + + +-- selfing +变量x = @你好 +变量x = @@你好 + +@你好 "世界" +@@你好 "世界" + +@@一 @@二(4,5) @三, @四 + +变量xx = (@你好, @@世界, 酷) -> + + +-- class properties +class 一个类 + @好: 343 + 蓝色: => + @你好: 3434, @世界: 23423 + 绿色: => + @红色: => + + +变量x = @ +变量y = @@ + +@ 一些东西 + +@@ 一些东西 + +@ = @ + @ / @ + +@ = 343 +@.你好 2,3,4 + +_ = 你好[@].世界 + + +class 怪怪的 + _ = @你好 + if 一些东西 + 打印 "你好世界" + + 你好 = "世界" + @另一 = "天" + + 打印 "好" if 一些东西 -- this is briken + + +打印 "你好" + +变量yyy = -> + class 酷 + _ = nil + + +-- + +class 对象a.字段b.字段c.子类D + _ = nil + + +class 对象a.字段b["你好"] + _ = nil + +class (-> require "moon")!.某个成员 extends 你好.世界 + _ = nil + +-- + +类a = class +类b = class 一个类 +类c = class 一个类 extends 你好 +类d = class extends 世界 + +打印 (class 啥事).__name + +-- + +global ^ +class 一个类 + _ = nil + + +-- + +-- hoisting +class 一个类 + 值 = 23 + {:插入} = 表 + new: => 打印 插入, 值 -- prints nil 23 + +-- + +class X类 + new: 嗨 + + +-- + +class 酷 extends 东西 + 当: => + { + 你好: -> super! + 世界: -> super.one + } + +-- + +class 奇怪 extends 东西 + 当: 做点事 => + super! + +--- + +class 喔哈 extends 东西 + @底部: -> + super! + _ = super.你好 + super\你好! + super\你好 + + + @空间: 酷 { + -> + super! + _ = super.你好 + super\你好! + super\你好 + } + +do + class 测试 + new: => @@如果 = true + @做: => 1 + 测试: => @@如果 and @@做! + 测试实例 = 测试! + 测试实例\测试! + +do + class 测试 + new: => @如果 = true + 做: => 1 + 测试: => @如果 and @做! + 测试实例 = 测试! + 测试实例\测试! + +class extends 青.应用 + "/": => json: { 状态: true } + +class 类A using 类B, 类C, 类D, {值: 123} + +class 示例 + @字段1 = 1 + @字段2 = @字段1 + 1 + +class 随便 + new: (参数) => @x字段 = 参数 + : (参数y) => @x字段 * 参数y + <"任意名称">: 123 + :相加 + : + +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 @@ + +-- see lists.moon for list comprehension tests + +列表 = {1,2,3,4,5,6} +输出 = {元素, 元素 * 2 for 元素 in 对象数组} + + +字典x = 你好: "世界", 好吧: 2323 + +复制 = {键, 值 for 键, 值 in pairs 对象x when 键 != "好吧"} + +-- + +_无效变量 = { 解包(元素) for 元素 in 是的 } +_无效变量 = { 解包(元素) for 元素 in *是的 } + +_无效变量 = { 元素元素 for 元素 in 是的 } +_无效变量 = { 解包 [对象 * 计数 for 计数, 对象 in ipairs x对象] for x对象 in *{{1,2}, {3,4}} } + + +-- + +变量1 = [计数 for 计数 = 1, 10] +变量2 = [计数 for 计数 = 1, 10 when 计数 % 2 == 1] + +变量aa = [{计数x,计数y} for 计数x=1,10 for 计数y=5,14] +变量bb = [对象y for 元素 in 对象y for 计数i=1,10] +变量cc = [对象y for 计数=1,10 for 元素 in 对象y] +变量dd = [对象y for 计数=1,10 when 酷 for 元素 in 对象y when 变量x > 3 when 变量c + 3] + +_无效变量 = {"你好", "世界" for 计数=1,10} + +-- + +变量j = [元素a for {元素a,元素b,元素c} in 很多东西] +变量k = [元素a for {元素a,元素b,元素c} in *很多东西] +变量i = [你好 for {:你好, :世界} in *很多东西] + +变量hj = {元素a,元素c for {元素a,元素b,元素c} in 很多东西} +变量hk = {元素a,元素c for {元素a,元素b,元素c} in *很多东西} +变量hi = {你好,世界 for {:你好,:世界} in *很多东西} + +没错(元素a,元素b,元素c) for {元素a,元素b,元素c} in 很多东西 + +-- + +_无效变量 = [项目 for 项目 in *列表[1 + 2,3+4]] +_无效变量 = [项目 for 项目 in *列表[你好! * 4, 2 - 东西[4]]] + +列表 = [项目?\调用 123 for 项目 in 列表] + +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 @@ + +你很酷 = false + +_无效变量 = if 酷 + if 你很酷 + 一 + else if 吃东西 + 好 + else + _无效变量 = 二 + 三 +else + 否 + +_无效变量 = if 酷 then 否 +_无效变量 = if 酷 then 否 else 是 + +if 酷 then 喔 酷 else + 没那么 酷 + +if 在工作 + _无效变量 = if 酷 then if 酷 then 好吧 else 什么 else 呐 + + +if ✌️ then 无 日 elseif 酷 我 then 好吧 呀 else u型 路 +if ✌️ then 无 父 else if 酷 你 then 好吧 吧 else p型 路 + + +if (->)() then 随便 怎样 + +if nil then 翻转 我 else + 这个 是, 弧度 + + +if 东西 不错 then 没 法 elseif 好的 确定 + 什么 这里 + + +if 很多东西 then 没 机会 +elseif 好吧 + 现在 怎么办 + + +if 很多东西 + 是 伙计 +elseif 好的 人 then 嗨 好呀 else 嗯 确定 + +if 我们 走吧 + 打印 "打招呼" +elseif "只有我们" + 打印 "威尔史密斯" else 显示 5555555 + +-- + +if 某东西 = 10 + 打印 某东西 +else + 打印 "其它" + +你好 = if 某东西 = 10 + 打印 某东西 +else + 打印 "其它" + + +你好 = 5 + if 某东西 = 10 + 打印 某东西 + +--- + +z变量 = false + +_无效变量 = if false + 一 +elseif 条件x = true + 二 +elseif 条件z = true + 三 +else + 四 + + +输出 = if false + 一 +elseif 条件x = true + 二 +elseif 条件z = true + 三 +else + 四 + +变量 = -> + if 某东西 = true + 1 + elseif 另一个 = false + 2 + +--- + +unless true + 打印 "酷!" + +unless true and false + 打印 "酷!" + +unless false then 打印 "酷!" +unless false then 打印 "酷!" else 打印 "no way!" + +unless nil + 打印 "hello" +else + 打印 "world" + +-- + +x = unless true + 打印 "酷!" + +x = unless true and false + 打印 "酷!" + +y = unless false then 打印 "酷!" +y = unless false then 打印 "酷!" else 打印 "没门!" + +z = unless nil + 打印 "你好" +else + 打印 "世界" + +打印 unless true + 打印 "酷!" + +打印 unless true and false + 打印 "酷!" + +打印 unless false then 打印 "酷!" +打印 unless false then 打印 "酷!" else 打印 "没门!" + +打印 unless nil + 打印 "你好" +else + 打印 "世界" + +-- + +打印 "你好" unless 值 + +变量dddd = {1,2,3} unless 值 + + +-- + +do + j变量 = 100 + unless j变量 = 嗨! + 错误 "不是 j变量!" + +---------------- + +变量a = 12 +变量a,变量c,变量b = "酷", nil, nil if 某东西 + + + +--- + +变量j = if 1 + if 2 + 3 +else 6 + + +变量m = if 1 + + + + if 2 + + + 3 + + +else 6 + +do + 函数a + :字段b + return if 函数a + :字段b + else if 函数c + 字段d: 变量e + else + 字段f: 123 + +do + 函数c + 字段d: 变量e + if 条件a + :字段b = 变量tb + elseif 条件c + 字段d: 变量e = 变量tb + +if :派 = 数学库 + 打印 派 + +do + local 数学库 + if :派 = 数学库 + 打印 派 + +do + if _模块 = {} + :东西 = _模块 + :a功能, :b功能 = _模块 + +do + global _模块 + if _模块 = {} + :东西 = _模块 + :a功能, :b功能 = _模块 + +do + 变量v = if 1 and do + 0 ~= 1 + 1 + else + 2 + +nil + + + 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 @@ + +do + {元素a, 元素b} = 你好 + + {{元素a}, 元素b, {元素c}} = 你好 + + { :你好, :世界 } = 值 + +do + { 是: 否, 东西 } = 世界 + + {:字段a,:字段b,:字段c,:d字段} = 好 + + {a元素}, 变量b = 一, 二 + {b元素}, 变量c = 一, nil + {d元素}, 变量e = 一, 二 + + 变量x, {元素y} = 一, 二 + + 变量xx, 变量yy = 1, 2 + {元素yy, 元素xx} = {变量xx, 变量yy} + + {元素a, :字段b, 元素c, :字段d, 元素e, :字段f, 元素g} = 表 + + do :字段a, :字段b, 变量c = 表, nil + + do 变量a, :字段b, :字段c = 表, _无效变量 + + do :字段a, 变量b, :字段c = 表, _无效变量, _无效变量 + +--- + +do + 未来人们 = + 雕刻家: "翁贝托·博乔尼" + 画家: "弗拉基米尔·伯留克" + 诗人: + 姓名: "F.T.马里内蒂" + 地址: { + "罗马42R大街" + "贝拉焦,意大利 22021" + } + + do {诗人: {:姓名, 地址: {街道, 城市}}} = 未来人们 + + do { + :雕刻家 + :画家 + 诗人: + :姓名 + 地址: + * 街道 + * 城市 + } = 未来人们 + +do + 字段a: + 字段b: 变量c + 字段d: 变量e = 对象tb + +do + 字段a: + * 字段b: 变量c + * 字段d: 变量e + * 元素f = 对象tb + +-- + +do + { @世界 } = 变量x + { 对象a.字段b, 对象c.字段y, 函数!.字段z } = 变量x + + { 世界: @世界 } = 变量x + +-- + +do + 东西 = {{1,2}, {3,4}} + + for {元素x,元素y} in *东西 + 打印 元素x,元素y + + +-- + +do + with {元素a,元素b} = 东西 + 打印 元素a, 元素b + + +-- + +do + 东西 = nil + if {元素a} = 东西 + 打印 元素a + else + 打印 "没东西" + + 东东 = {1,2} + if {元素a,元素b} = 东东 + 打印 元素a,元素b + + if {元素a,元素b} = 东西 + 打印 元素a,元素b + elseif {元素c,元素d} = 东东 + 打印 元素c,元素d + else + 打印 "不" + +-- + +do + 变量z = "好" + {元素a,元素b,元素c} = 变量z + +do + {元素a,元素b,元素c} = 变量z + +_ = (参数z) -> + {元素a,元素b,元素c} = 参数z + +do + 变量z = "〇〇" + _ = (参数k) -> + {元素a,元素b,元素c} = 参数z + +do + {函数:{结束:结束变量}} = 东西 + +do + {如果:{元素a,元素b,元素c}} = 东西 + +do + {:字段a, :字段b} = {字段a: "你好", 字段b: "世界"} if true + + {天, 小时, 分钟, 秒} = [tonumber 元素 for 元素 in *{ + string.match "1 2 3 4", "(.+)%s(.+)%s(.+)%s(.+)" + }] + + {:一, :二, :三} = {匹配结果, true for 匹配结果 in 随机对象\全局匹配("%S+")} + + {:字段a},变量b = 对象a\如果(123) + 变量t, 123 + +do + {:名称 = "没名字", :工作 = "没工作"} = 个人 + + 请求 = (地址, 选项 = {}) -> + { + :方式 = "GET" + :请求头 = {} + :参数 = {} + :负载 = "" + :确认 + :错误 + :最终处理 + } = 选项 + 结果 = 发起请求(地址, 方式, 参数, 负载, 确认, 错误, 最终处理) + return 结果 + + {键1: {键2: 值1 = 123}, :键3 = "abc"} = 对象tb + + {<>: 元表 = {__index: {字段abc: 123}}, <>: {: = (-> {}), :}} = 对象tb + + {字段x: {<>: 元表x = {}}, :y字段, z字段: z变量, : = -> nil} = 对象tb + + {<>: {函数: a对象.b字段(-> 123).字段c = 项目?.默认值}} = 对象tb + +do + {<>: 元表 = {}, : 减函数} = 对象tb.字段x + +do + {x字段: {<>: 元表 = {}, : 减函数}} = 对象tb + +do + {元素a = 1, 元素b = 2, 字段c: {对像d.字段e = 3}} = 对象tb + + for {左 = "null", 右 = false} in *元组列表 + 打印 左, 右 + +do + {_, a元素, _, b元素} = 对象tb -- list placeholder + +do + {字段x: 对象a.字段b = 1, y字段: a对象.c字段 = 2} = 对象x.字段x.字段x + +do + const :宽, :高 = 视区.尺寸 + const {:x坐标 = 0.0, :y坐标 = 0.0} = 点 + +do + 变量1, 变量2, 变量3, 数组a[], 变量d, {元素b}, 变量e, 对象c.<> = 1, 2, 3, 函数! + 变量y1, :字段y2, :字段y3, 变量y4 = 函数1!, 函数2! + +do + { + [["abc"]]: 变量v1 = 111, + [1 + 1]: {变量v2 = 222, 变量v3 = 333}, + @x: 变量v4 = 444 + }, \ + 'x-y-z': 变量v5, [函数!]: {[函数2!]: 变量v6, 变量v7} = 对象tb, 对象tb2 + +do + <[名称]>: 元值, [名称]: 值 = 对象tb + +do + {: = (-> "名称"), :} = 对象tb + + switch 对象tb + when {: = "项目", <"123">: 元字段} + 打印 name, 元字段 + +do + 对象tb = {} + <[变量a + 变量b]>: 变量v1, [函数c!]: 变量v2 = 对象tb + +do + {a: {: = 加函数}, b: {<[字段名]>: 字段 = 123}} = 对象tb + {<"字段abc">: 元字段 = "默认值", <[[任意 字符串]]>: 变量abc = 123, <'字符串'>: 有默认值 = {}} = 对象tb + + switch 对象tb + when {字段a: {: = 加函数}, b: {<[字段名]>: 字段 = 123}} + 打印 add, 字段 + switch tb + when {字段c: {<"字段abc">: 元字段 = "默认值"}, <[[any string]]>: {字段d: 变量abc = 123}, <'字符串'>: {字段e: 有默认值 = {}}} + 打印 元字段, 变量abc, 有默认值 +nil + 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 @@ + +do + 打印 "你好" + 打印 "世界" + +变量x = do + 打印 "你好" + 打印 "世界" + +变量y = do + 东西 = "shhh" + -> "你好: " .. 东西 + +_ = -> if 某条件 then do "好的" + +变量t = { + y字段: do + 数字 = 100 + (参数x) -> 参数x + 数字 +} + +(参数y=(do + 变量x = 10 + 2 + 变量x), 参数k=do + "没啥") -> do + "啊" + 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? "参数0",123 + +变量x = 表?.值 + +打印 对象abc?["你好 世界"]?.字段xyz + +if 打印 and 变量x? + 打印 变量x + +@?\函数 998 + +with 对象abc?!\函数?! + if \函数p? "abc" + return 123 + +if {:x字段} = 对象a?.如果?\然后?(123)? @?\方法 998 + 打印 x字段 + +结果 = 对象b.方法\执行!\当?("没问题")\如果("默认",998)\函数? +打印 结果 + +自我为中心 = true if 思想? and not 世界? + +速度 = 0 +速度 or= 15 + +脚印 = 野人 or "熊" + +专业 = '计算机科学' + +unless 专业? + 选修课程 '葡萄酒入门' + +if 窗体? + 环境 = '浏览器(有可能)' + +邮编 = 抽奖.中奖者?!.地址?.邮政编码 + +长度 = utf8?.长度 or 字符串?.长度 or (对象) -> #对象 + +变量a = 表1?\结束? 123 + 表2?\然后 456 + +变量b = 表1?\结束? or 表2?\然后 + +with? io.open "测试.txt", "w" + \write "你好" + \close! + +表?.? 123 + +with? 表.<>?. + .字段a = 1 + +nil + 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 @@ + +export 变量a,变量b,变量c = 223, 343, 123 +export 酷 = "🧧" + +变量d,变量e,变量f = 3, 2, 1 +export 变量d, 变量e, 变量f + +export class 某类 + 嗯: "酷" + +export if 这个 + 232 +else + 4343 + +export 什么 = if 这个 + 232 +else + 4343 + +export 变量y = -> + 你好 = 3434 + +export with 临时 + 变量j = 2000 + +export cb的值 = do + 变量h = 100 + (参数)<- 函数 + return 参数 h变量 + +export 丫丫 = -> + 变量h = 100 + 变量k = 100 + +export switch 变量h + when 100, 150 then 200 + when 200 then 300 + else 0 + +export 常量 = switch 值 + when "好" then 1 + when "更好" then 2 + when "最好" then 3 + +export 项目 = 123 + |> 函数 + +export 变量x + +函数 if 条件a then 值b +函数 do 123 +函数 switch 对象a + when 变量b then 值c +函数 [计数 for 计数 = 1,10] +函数 for 计数 = 1,10 do 计数 +函数 {键,值 for 键,值 in pairs 表} +函数 for 键,值 in pairs 表 do {键,值} +函数 while 条件a do true +函数 with 条件a + .字段b = 123 +函数 对象a?.字段b +函数 对象a\字段b +函数 class A类 + +_ = "#{if 条件a then 值b}" +_ = "#{do 123}" +_ = "#{switch 对象a + when 变量b then 值c}" +_ = "#{[计数 for 计数 = 1,10]}" +_ = "#{for 计数 = 1,10 do 计数}" +_ = "#{{键,值 for 键,值 in pairs 表}}" +_ = "#{for 键,值 in pairs 表 do {键,值}}" +_ = "#{while 条件a do true}" +_ = "#{with 对象a + .字段b = 123}" +_ = "#{对象a?.字段b}" +_ = "#{对象a\字段b}" +_ = "#{class A类}" + +local * +变量1 = 1 +export 变量2 = 2 +export 变量3 = class 类4 +变量5 = 5 + +export.<"🀄️"> = 1 +export. = "导出" +export. = => {} +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 @@ + +打印 "没问题" + +export default -> + 打印 "你好" + 123 + +(参数x, 回调y)<- 函数 123, "abc" unless 是否结束 +打印 参数x +(参数y, 结果)<- 回调y +return if 结果 + 变量abc + 参数y +else + 变量abc + 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 @@ + + +变量x = -> 打印 什么 + +_无效变量 = -> + +_无效变量 = -> -> -> + +到 谷 仓 去 + +开 -> 这扇 -> 门 + +开 -> + 这扇 门 + 你好 = -> + 我的 函数 + +变量h = -> 👋 + +吃 ->, 世界 + + +(->)() + +变量x = (...) -> + +你好! +你好.世界! + +_无效变量 = 你好!.某物 +_无效变量 = 什么!["🥵🥵🥵"] + +什! 么! 情况! + +_无效变量 = (参数a,参数b,参数c,参数d,参数e) -> + +_无效变量 = (参数,参数,参数,参数,参数) -> + 打印 参数 + +_无效变量 = (参数x=23023) -> + +_无效变量 = (参数x=(参数y=()->) ->) -> + +_无效变量 = (变量x = if 某物 then 好 else 坏) -> + +某物 = (你好=100, 世界=(参数x=[[好 酷]])-> 打印 "吃米饭") -> + 打印 你好 + +_无效变量 = () => +_无效变量 = (参数x, 参数y) => +_无效变量 = (@参数x, @参数y) => +_无效变量 = (参数x=1) => +_无效变量 = (@参数x=1,参数y,@参数z="你好 世界") => + + +变量x -> return +变量y -> return 1 +变量z -> return 1, "你好", "世界" +变量k -> if 是 then return else return + +_无效变量 = -> 真名 if 某物 + +-- + +函数d( + -> + 打印 "你好 世界" + 10 +) + + + +函数d( + 1,2,3 + 4 + 5 + 6 + + if 某物 + 打印 "okay" + 10 + + 10,20 +) + + +函数f( + + )( + + )( + 什么 + )(-> + 打印 "srue" + 123) + +-- + +变量x = (参数a, + 参数b) -> + 打印 "什么" + + +变量y = (参数a="hi", + 参数b=23) -> + 打印 "什么" + +变量z = ( + 参数a="hi", + 参数b=23) -> + 打印 "什么" + + +变量j = (参数f,参数g,参数m, + 参数a="hi", + 参数b=23 +) -> + 打印 "什么" + + +变量y = (参数a="hi", + 参数b=23, + ...) -> + 打印 "什么" + + +变量y = (参数a="hi", + 参数b=23, + ... +) -> + 打印 "什么" + +-- + +多参数 = (参数a + 参数b) -> + 打印 "什么" + + +多参数 = (参数a="hi" + 参数b=23) -> + 打印 "什么" + +多参数 = ( + 参数a="hi" + 参数b=23) -> + 打印 "什么" + + +多参数 = (参数f,参数g,参数m + 参数a="hi" + 参数b=23 +) -> + 打印 "什么" + + +@ = (参数n)-> + return 1 if 参数n == 0 + 参数n * @(参数n-1) + +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 @@ + +do + global 全局变量a,全局变量b,全局变量c = 223, 343, nil + global 酷 = "📉" + +do + global class 全局类 + 嗯: "🆒" + +do + global 全局变量a,全局变量b,全局变量c + 全局变量a,全局变量b,变量c,变量d = "你好", nil, nil, nil + + +do + 什么 = if 这个 + 232 + else + 4343 + + global ^ + + 另一个 = 3434 + A另一个 = 7890 + + if 内部 then Y好 = "10000" + + 什么 = if 这个 + 232 + else + 4343 + + +do + global * + + 什么 = if 这个 + 232 + else + 4343 + + 全局变量x,全局变量y,全局变量z = 1,2,3 + + 全局变量y = -> + 好的 = 3434 + + with 全局临时变量 + 变量j = 2000 + + +do + global * + 变量x = 3434 + if 条件y then + 变量x = 10 + +do + global * + if 条件y then + 变量x = 10 + 变量x = 3434 + +do + do + global * + + 变量k = 1212 + + do + 变量h = 100 + + 全局变量y = -> + 变量h = 100 + 变量k = 100 + + 变量h = 100 + 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 @@ +do + 变量a = 0 + ::开始:: + 变量a += 1 + goto 结束 if 变量a == 5 + goto 开始 + ::结束:: + +do + for 计数z = 1, 10 do for 计数y = 1, 10 do for 计数x = 1, 10 + if 计数x^2 + 计数y^2 == 计数z^2 + 打印 '找到了毕达哥拉斯三元组:', 计数x, 计数y, 计数z + goto 完成 + ::完成:: + +do + for 计数z = 1, 10 + for 计数y = 1, 10 do for 计数x = 1, 10 + if 计数x^2 + 计数y^2 == 计数z^2 + 打印 '找到了毕达哥拉斯三元组:', 计数x, 计数y, 计数z + 打印 'now trying next z...' + goto 继续z + ::继续z:: + +do + ::重做:: + for 计数x = 1, 10 do for 计数y = 1, 10 + if not 函数f 计数x, 计数y then goto 继续 + if not 函数g 计数x, 计数y then goto 跳过 + if not 函数h 计数x, 计数y then goto 重做 + ::继续:: + ::跳过:: + +do + for 变量 in *列表 + if 变量 % 2 == 0 + 打印 '列表有偶数' + goto 有 + 打印 '列表没偶数' + ::有:: + 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 @@ + + +import 你好 from 好的 +import 好呀, 世界 from 表["酷"] + +import 字段x, \字段y, 字段z from 道具组 + +import 领主, \👻 from 找到 "我的表" + +_obj_0 = 232 + +import 某物 from 一个 表格 + + +if 缩进 + import 好吧, \很好 from 很多表[100] + +do + import 字段a, 字段b, 字段c from 对象z + +do + import 字段a, + 字段b, 字段c from 对象z + +do + import 字段a + 字段b + 字段c from 对象z + +do + import + 字段a + 字段b + 字段c from 对象z + + +do + import + 字段a + 字段b + 字段c + from 对象z + + +do + import '模块' + 打印 模块 + import '模块_x' + 打印 模块_x + import "下-划-线-模-块-啊" + 打印 下_划_线_模_块_啊 + import "模块.子模块" + 打印 子模块 + +do + import "小玩家" as 大玩家 + import "lpeg库" as {:C, :Ct, :Cmt} + import "导出" as {一, 二, 某键:{嗯:{字符}}} + import "导出" as :又一个组件 + 打印 又一个组件 + +do + global * + import '模块' + import '模块_x' + import "组织.包.模块-y" + 打印 模块_y + +do + import "组织.包.模块" as 函数体:函数, 如果:如果变量 + +do + import "块" as {: 变量b} + import "块" as {:} + import "块" as {字段e: 变量f, : 变量c} + import "块" as {字段c: 变量d} + import "块" as {元素g, {: 变量i}} + 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 @@ +-变量a^2 in {1, 2, 3} |> 函数 + +变量a, 变量b = 函数x(...) not in [1, 3], 2 + +变量d = (对象.字段x.字段y ...) not in [1, 3] + +在的 = "东" in { "东", "西" } + +if 变量a in {1} and 变量b in {2, 3, 4} or 变量c in [1, 10] + 打印 变量a, 变量b, 变量c + +switch 值 + when 1, 2, 3 + 打印 "1, 2, 3" + + when not in (0, 100] + 打印 "非 (0 < 值 <= 100)" + + when in [200, 300) + 打印 "200 <= 值 < 300)" + + when not in {333, 444, 555} + 打印 "非 333, 444 或 555" + +do return 变量y not in (开始, 结束) + +do + 存在 = 元素 in 表 + 检查 元素 in 表 + +do + 对象 = 获取! + 存在 = 元素 in 表 + 检查 元素 in 表 + +do + 对象 = 获取! + 列表 = {1, 2, 3} + 不存在 = 元素 not in 列表 + 检查 元素 in 列表 + 检查 元素 in {1, 2, 3} + 检查 元素(...) in {[1]: 1, [2]: 2, [3]: 3} + +do + 检查 -> 对象x in 数组tb + 检查 -> 对象x not in 数组tb + local 对象x, 数组tb + 检查 -> return 对象x in 数组tb + 检查 -> 对象x not in 数组tb + +nil + 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 @@ + +你好 = [变量x*2 for _, 变量x in ipairs{1,2,3,4}] + +物品 = {1,2,3,4,5,6} + +_ = [变量z for 变量z in ipairs 物品 when 变量z > 4] + +半径 = [{变量a} for 变量a in ipairs { + 1,2,3,4,5,6, +} when 好数字 变量a] + +_ = [变量z for 变量z in 物品 for 变量j in 列表 when 变量z > 4] + +require "实用" + +倾倒 = (变量x) -> 打印 实用.倾倒 变量x + +范围 = (数量) -> + 变量i = 0 + return coroutine.wrap -> + while 变量i < 数量 + coroutine.yield 变量i + 变量i = 变量i + 1 + +倾倒 [变量x for 变量x in 范围 10] +倾倒 [{变量x, 变量y} for 变量x in 范围 5 when 变量x > 2 for 变量y in 范围 5] + +东西 = [变量x + 变量y for 变量x in 范围 10 when 变量x > 5 for 变量y in 范围 10 when 变量y > 7] + +打印 变量x, 变量y for 变量x in ipairs{1,2,4} for 变量y in ipairs{1,2,3} when 变量x != 2 + +打印 "你好", 变量x for 变量x in 物品 + +_ = [变量x for 变量x in 变量x] +变量x = [变量x for 变量x in 变量x] + +打印 变量x, 变量y for 变量x in ipairs{1,2,4} for 变量y in ipairs{1,2,3} when 变量x != 2 + +双倍 = [变量x*2 for 变量x in *物品] + +打印 变量x for 变量x in *双倍 + +切 = [变量x for 变量x in *物品 when 变量x > 3] + +你好 = [变量x + 变量y for 变量x in *物品 for 变量y in *物品] + +打印 变量z for 变量z in *你好 + +-- 切片 +变量x = {1, 2, 3, 4, 5, 6, 7} +打印 变量y for 变量y in *变量x[2,-5,2] +打印 变量y for 变量y in *变量x[,3] +打印 变量y for 变量y in *变量x[2,] +打印 变量y for 变量y in *变量x[,,2] +打印 变量y for 变量y in *变量x[2,,2] + +变量a, 变量b, 变量c = 1, 5, 2 +打印 变量y for 变量y in *变量x[变量a,变量b,变量c] + +正常 = (你好) -> + [变量x for 变量x in 嗯哼] + +测试 = 变量x 1,2,3,4,5 +打印 事情 for 事情 in *测试 + +-> 变量a = 变量b for 行 in *行们 + 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 @@ + +数据 = { + 121 + 121.2323 + 121.2323e-1 + 121.2323e13434 + 2323E34 + 0x12323 + + 0xfF2323 + 0xabcdef + 0xABCDEF + 0x123p-123 + 0xABCP+321 + 0x.1p-111 + 0xA_B_CP-3_2_1 + + .2323 + .2323e-1 + .2323e13434 + + + 1LL + 1ULL + 9332LL + 9332 + 0x2aLL + 0x2aULL + + 1_000_000.000_000_1 + 1_234e567_8 + 1_234E-567_8 + 0xDE_AD_BE_EF + + [[ 你好 世界 ]] + + [=[ 你好 世界 ]=] + [====[ 你好 世界 ]====] + + "另一个 世界" + + '哪个 世界' + + + " + 你好 世界 + " + + '是的 + 发生了什么 + 这里有些很酷的东西' + +} +空值 + 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 @@ + +do + local 变量a + local 变量a, 变量b, 变量c + + 变量b, 变量g = 23232, nil + +do + 变量x = 1212 + 某事 = -> + local 变量x + 变量x = 1212 + +do + local * + 变量y = 2323 + 变量z = 2323 + +do + local * + 打印 "啥也没有!" + +do + local ^ + x变量 = 3434 + y变量 = 3434 + X大写 = 3434 + Y大写 = "好" + +do + local ^ + x变量, y变量 = "a", "b" + +do + local * + x变量, y变量 = "a", "b" + +do + local * + if 某事 + x变量 = 2323 + +do + local * + do + 变量x = "一" + + 变量x = 100 + do + 变量x = "二" + +do + local * + 变量k = if 什么 + 10 + 变量x = 100 + {变量a, 变量b, 变量c} = 变量y + +do + local * + 变量a = 100 + 打印 "嗨" + 变量b = 200 + local * + 变量c = 100 + 打印 "嗨" + 变量d = 200 + 变量d = 2323 + +do + local ^ + a小写 = 5 + A大写 = 3 + + class O一 + F五 = 6 + + class T二 + class N无 + +do + local * + -- this generates a nil value in the body + for 变量a in *{} do _ = 变量a + +do + local * + 变量x = 变量a or 变量b + +变量g = 2323 -- test if anything leaked + 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 @@ + +for 变量x=1,10 + 打印 "yeah" + +for 变量x=1,#某物 + 打印 "yeah" + +for 变量y=100,60,-3 + 打印 "倒计时", 变量y + +for 变量a=1,10 do 打印 "好的" + +for 变量a=1,10 + for 变量b = 2,43 + 打印 变量a,变量b + +for 变量i in 迭代器 + for 变量j in 是的 + 变量x = 343 + 变量i + 变量j + 打印 变量i, 变量j + +for 变量x in *某物 + 打印 变量x + +for 键,值 in pairs 你好 do 打印 键,值 + +for 变量x in 变量y, 变量z + 打印 变量x + +for 变量x in 变量y, 变量z, 键 + 打印 变量x + +for 名称, 成员们 in *模块 + 打印 名称, 成员 + +变量x = -> + for 变量x in 变量y + 变量_ = 变量y + +你好 = {1,2,3,4,5} + +变量x = for 变量y in *你好 + if 变量y % 2 == 0 + 变量y + +变量x = -> + for 变量x in *你好 + 变量_ = 变量y + +表格 = for 变量i=10,20 do 变量i * 2 + +哦 = 0 +变量y = for 变量j = 3,30, 8 + 哦 += 1 + 变量j * 哦 + +变量_ = -> + for 变量k=10,40 + 变量_ = "好的" + +变量_ = -> + return for 变量k=10,40 + "好的" + +while true do 打印 "名称" + +while 5 + 5 + 打印 "好的 世界" + 工作 人 + +while 还有 do + 我 也 工作 + 变量_ = "好的" + +变量i = 0 +变量x = while 变量i < 10 + 变量i += 1 + 变量i + +-- values that can't be coerced + +变量x = for 东西 in *3 + 变量y = "你好" + break + +变量x = for 变量x=1,2 + 变量y = "你好" + 变量y + +-- continue + +while true + continue if false + 打印 "是的" + break if true + 打印 "不" + +for 变量i = 1, 10 + while true + if not true + continue + break + +变量a = 1 +repeat + 变量a += 1 + if 变量a == 5 + continue + if 变量a == 6 + break + 打印 变量a +until 变量a == 10 + +变量x = 0 +repeat + 变量x += 1 + 变量y = 变量x + continue if 变量x < 5 + 打印 变量y +until 变量y == 10 + +变量a = 3 +until 变量a == 0 + 变量a -= 1 +完成 = false +until 完成 do 完成 = true +repeat + 打印 "你好" +until true +until 完成 + 变量x = 10 + repeat + 变量x -= 1 + until 变量x == 0 +until 条件 + 打印 "好的" + +for 变量x=1,10 + continue if 变量x > 3 and 变量x < 7 + 打印 变量x + +列表 = for 变量x=1,10 + continue if 变量x > 3 and 变量x < 7 + 变量x + +for 变量a in *{1,2,3,4,5,6} + continue if 变量a == 1 + continue if 变量a == 3 + 打印 变量a + +for 变量x=1,10 + continue if 变量x % 2 == 0 + for 变量y = 2,12 + continue if 变量y % 3 == 0 + +while true + continue if false + break + +while true + continue if false + return 22 + +-- + +do + 三重x = {1,2,3,4} + for 东西 in *三重x + 打印 东西 + +do + for 变量i = 1, 10 + repeat + with? 对象tb + .字段a = 1 + continue if .字段b + do + if .字段c + break + until true + switch 变量x + when 123 + break + else + continue + if 变量y + continue + else + break + do do do + 打印 变量i + continue + 打印 "abc" + 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 @@ +import "unicode.macro_export" as { + $, -- import all macros + $配置: $我的配置, -- rename macro $config to $myconfig +} + +import "unicode.macro_todo" as $ + +$断言集 对象 == nil + +$我的配置 false + +结果 = $断言 对象 == nil + +macro 和 = (...)-> + 值们 = [元素 for 元素 in *{...}] + $显示宏 "和", "#{ table.concat 值们, " and " }" + +if $和 函数1! + 打印 "没问题" + +if $和 函数1!, 函数2!, 函数3! + 打印 "没问题" + +对象 = $复制( + @ + {位置: {}, 标签: 标签::转数字!} + 标识 + 连接们 + 位置.x坐标 + 位置.y坐标 + 位置.z坐标 +) + +macro 在 = (目标, ...)-> + 值们 = [元素 for 元素 in *{...}] + $显示宏 "在", table.concat ["#{目标} == #{值}" for 值 in *值们], " or " + +if 变量x |> $在 "🍎", "🐷", "🐶" + 打印 "存在" + +macro 映射 = (数组, 动作)-> + $显示宏 "映射", "[#{动作} for _ in *#{数组}]" + +macro 过滤 = (数组, 动作)-> + $显示宏 "过滤", "[_ for _ in *#{数组} when #{动作}]" + +macro 合并 = (数组, 默认值, 动作)-> + $显示宏 "合并", "if ##{数组} == 0 + #{默认值} +else + _1 = #{默认值} + for _2 in *#{数组} + _1 = #{动作} + _1" + +macro 每一个 = (数组, 动作)-> + $显示宏 "每一个", "for _ in *#{数组} + #{动作}" + +macro 管道 = (...)-> + switch select "#", ... + when 0 then return "" + when 1 then return ... + 操作数组 = {...} + 最后一个 = 操作数组[1] + 声明数组 = for 计数 = 2, #操作数组 + 声明 = "\tlocal _#{计数} = #{最后一个} |> #{操作数组[计数]}" + 最后一个 = "_#{计数}" + 声明 + 结果 = "do +#{table.concat 声明数组, "\n"} + #{最后一个}" + $显示宏 "管道", 结果 + +{1,2,3} |> $映射(_ * 2) |> $过滤(_ > 4) |> $每一个 打印 _ + +$每一个 $过滤($映射({1,2,3}, _ * 2), _ > 4), 打印 _ + +值 = $管道( + {1, 2, 3} + [[$映射(_ * 2)]] + [[$过滤(_ > 4)]] + [[$合并(0, _1 + _2)]] +) + +macro 加 = (参数a, 参数b)-> "#{参数a} + #{参数b}" + +$加(1,2)\调用 123 + +结果 = 1 |> $加 2 + +macro 柯里化 = (...)-> + 参数数组 = {...} + 长度 = #参数数组 + 主体 = 参数数组[长度] + 定义 = table.concat ["(#{参数数组[计数]})->" for 计数 = 1, 长度 - 1] + "#{定义}\n#{主体\gsub "^do%s*\n",""}" + +f = $柯里化 参数x,参数y,参数z,do + 打印 参数x,参数y,参数z + +macro 获取里值 = (值)-> "do + 变量a = 1 + 变量a + 1" + +macro 获取里值_保持卫生 = (值)-> "(-> + local 变量a = 1 + 变量a + 1)!" + +do + 变量a = 8 + 变量a = $获取里值! + 变量a += $获取里值! + 打印 变量a + +do + 变量a = 8 + 变量a = $获取里值_保持卫生! + 变量a += $获取里值_保持卫生! + 打印 变量a + +macro Lua代码 = (代码)-> { + code: 代码 + type: "lua" +} + +变量x = 0 + +$Lua代码 [[ +local function f(a) + return a + 1 +end +x = x + f(3) +]] + +$Lua代码[[ +function tb:func() + print(123) +end +]] + +打印 变量x + +macro 定义函数 = (函数名, ...)-> + 参数数组 = {...} + 最后一个 = table.remove 参数数组 + { + code: $显示宏 "定义函数", "local function #{函数名}(#{table.concat 参数数组, ', '}) + #{最后一个} +end" + type: "lua" + } + +sel = (参数a, 参数b, 参数c)-> if 参数a then 参数b else 参数c + +$定义函数 sel, a, b, c, [[ + if a then + return b + else + return c + end +]] + +$定义函数 dummy,[[]] + +macro 插入注释 = (文本)-> { + code: "-- #{文本\match '[\'"](.*)[\'"]'}" + type: "lua" +} + +$插入注释 "这有个注释" + +import '下划线' as _ + +macro 链式调用 = (...)-> + 主调用 = nil + for 元素 in *{...} + 主调用 = 主调用? and "(#{主调用})\\#{元素}" or 元素 + $显示宏 "链式调用", 主调用 + +结果a = $链式调用( + _{1, 2, 3, 4, -2, 3} + 链! + 映射 => @ * 2 + 过滤 => @ > 3 + 取值! +) + +$链式调用( + _{1, 2, 3, 4, -2, 3} + 链! + 映射 => @ * 2 + 过滤 => @ > 3 + 每一个 => 打印 @ +) + +结果 = $链式调用( + 原点.变换.根节点.游戏对象\父节点! + 后代! + 选择启用! + 选择可见! + 标签等于 "fx" + 其中 (x)-> x.名称\结尾为 "(克隆)" + 摧毁! +) + +macro 链式调用B = (...)-> + switch select "#", ... + when 0 then return "" + when 1 then return ... + 参数数组 = {...} + 最后一个 = nil + 声明数组 = for 计数 = 1,#参数数组 + 声明 = if 计数 == #参数数组 + 最后的字符串 = 最后一个 and "#{最后一个}\\" or "" + "\t#{最后的字符串}#{参数数组[计数]}" + else + 最后的字符串 = 最后一个 and "#{最后一个}\\" or "" + "\tlocal _#{计数} = #{最后的字符串}#{参数数组[计数]}" + 最后一个 = "_#{计数}" + 声明 + 结果 = "do +#{table.concat 声明数组, '\n'} +" + $显示宏 "链式调用B", 结果 + +$链式调用B( + 原点.变换.根节点.游戏对象\父节点! + 后代! + 选择启用! + 选择可见! + 标签等于 "fx" + 其中 (x)-> x.名称\结尾为 "(克隆)" + 摧毁! +) + +macro 链式调用C = (...)-> + import "yue" as {:to_lua} + 主调用 = nil + 编译配置 = { + implicit_return_root: false + reserve_line_number: false + } + for 参数 in *{...} + 参数转代码 = to_lua(参数,编译配置)\gsub '%s*$','' + if 主调用? + 主调用 = "#{主调用}:#{参数转代码}" + else + 主调用 = 参数转代码 + { + code: $显示宏 "链式调用C", 主调用 + type: "lua" + } + +$链式调用C( + 原点.变换.根节点.游戏对象\父节点! + 后代! + 选择启用! + 选择可见! + 标签等于 "fx" + 其中 (x)-> x.名称\结尾为 "(克隆)" + 摧毁! +) + +macro 表 = -> "{'abc', 字段a:123, :=> 998}" +打印 $表[1], $表.字段a, ($表)!, $表! + +打印 "当前代码行数: #{ $LINE }" + +$待办 + +macro 跳过 = -> "" + +do + 打印 1 + <- $跳过 + 打印 2 + 打印 3 + +macro 跳过 = -> "while false do break" + +_1 = -> + 打印 1 + <- $跳过 + 打印 2 + 打印 3 + +macro 隐式返回宏是允许的 = -> "打印 'abc'\n123" + +$隐式返回宏是允许的 + 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 @@ +import "unicode.macro_todo" as $ +import "unicode.macro_todo" as {$, $todo: $待办} + +export macro 配置 = (调试 = true)-> + global 调试模式 = 调试 == "true" + global 调试宏 = true + "" + +export macro 显示宏 = (名称, 结果)-> + if 调试宏 then " +do + 文本 = #{结果} + print '[宏 ' .. #{名称} .. ']' + print 文本 + 文本 +" + else + 结果 + +export macro 断言集 = (条件)-> + if 调试模式 + $显示宏 "断言集", "assert #{条件}" + else + "" + +export macro 断言 = (条件)-> + if 调试模式 + $显示宏 "断言", "assert #{条件}" + else + "#{条件}" + +export macro 复制 = (源, 目标, ...)-> + $断言集( + 源 != "_源_" and 源 != "_目标_" and 目标 != "_源_" and 目标 != "_目标_" + "复制目标的参数不能是 _源_ or _目标_" + ) + " +do + local _源_, _目标_ + with _目标_ = #{目标} + with _源_ = #{源} +#{table.concat for 字段 in *{...} do " + _目标_.#{字段} = _源_.#{字段} +"}" + +$ -> + global 调试模式 = true + global 调试宏 = true + 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 @@ +export macro 待办内部实现 = (模块, 行数, 消息)-> + print "待实现#{消息 and ': ' .. 消息 or ''}, 文件为: #{模块}, 代码行数: #{行数}" + { + code: "-- 待实现#{消息 and ': ' .. 消息 or ''}" + type: "lua" + } + +export macro 待办 = (消息)-> + if 消息 + "$待办内部实现 $FILE, $LINE, #{消息}" + else + "$待办内部实现 $FILE, $LINE" + 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 @@ +变量a = 关闭: true, : => 打印 "离开作用域" +变量b = : (左, 右)-> 右 - 左 +变量c = 键1: true, :, 键2: true +变量w = <[名称]>:123, <"新建">:(值)=> {值} +变量w.<>["新建"] 变量w.<>[名称] + +do close _ = : -> 打印 "离开作用域" + +变量d, 变量e = 变量a.关闭, 变量a. + +变量f = 变量a\ 1 +变量a. = (x, y)-> x + y + +do + {:新, :, : 关闭A} = 变量a + 打印 新, close, 关闭A + +do + local * + 变量x, \ + {:新, :变量, :, : 关闭A}, \ + :num, :, : \ + = 123, 变量a.变量b.变量c, 函数! + +变量x.abc, 变量a.变量b.<> = 123, {} +函数!.<> = mt --, 额外 +变量a, 变量b.变量c.<>, 变量d, 变量e = 1, mt, "abc", nil + +相同 = 变量a.<>.__index == 变量a. + +-- +变量a.<> = __index: 表 +变量a.<>.__index = 表 +变量a. = 表 +-- + +mt = 变量a.<> + +表\函数 #列表 +表\<"函数">列表 +表\<"函数"> 列表 + +import "模块" as :, :设置函数 + +with 表 + 打印 ., .x\ "key" + 变量a = ..\<"新建"> 123 + 变量b = t#..测试 + 变量c = t #. .测试 + +<>:mt = 变量a +变量a = <>:mt +变量a = <>:__index:mt + +local index +<>:__index:索引 = 变量a +: = 变量a + +do <>:{新:构造, :更新} = 变量a +do {新:构造, :更新} = 变量a.<> + +表 = {} +do + 变量f = 表\<"值#{x < y}">(123, ...) + 变量f 表\<'值'> 123, ... + 表\<[[ + 值 + 1 + ]]>(123, ...) + return 表\<["值" .. tostring x > y]>(123, ...) + +do + 变量f = 表\<'值'>(123, ...) + 变量f 表\<'值'>(123, ...) + 表\<'值'>(123, ...) + return 表\<'值'> 123, ... + +do + 变量f = 表.<["值"]> 123, ... + 变量f = 表.<"值#{x < y}">(123, ...) + 变量f 表.<'值'> 123, ... + 表.<[[ 值 +1]]>(123, ...) + return 表.<["值" .. tostring x > y]>(123, ...) + +nil + 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 @@ +变量x = 变量a + .变量b + .变量c + --[[chain item]] .变量d + +变量x + .变量y = 变量a + .变量b + \变量c! + +函数 1, 参数2 + .值 + \获取!, 参数3 + .值 + \获取! + * 1 + * 变量x? + .变量y? + .变量z? + * 3 + +表bb = + 键1: 变量a + \变量b 123 + .变量c! + 键2: + 键w1: 变量a! + .变量b + \变量c! + +表b = 函数1{} + .变量a + |> 函数2? "abc", _ + +函数 = -> [变量a + .变量b + \变量c 123 for {变量a} in *值集合] + +函数1 = -> 变量x, 变量a + \变量b 123 + .变量c "abc" + +结果 = 原始 + .转换.root + .gameObject + \父节点! + \后代节点! + \选择启用! + \选择可见! + \标签相等 "fx" + \筛选 (元素)-> + if 元素\是否目标! + return false + 元素.名称\结束于 "(Clone)" + \销毁! + +原点.变换.根节点.游戏对象 + \父节点!\后代节点! + \选择启用! + \选择可见! + \标签相等 "fx" + \筛选 (元素)-> 元素.名称\结束于 "(Clone)" + \销毁! + +with 项目 + .项目字段A = 123 + + \调用方法!\连续调用! + + \调用方法! + \连续调用! + \连续调用! + + switch .项目字段B + \取值! + when "Valid", \获取项目状态! + \项目方法A!\取值! + else + \项目方法B! + \取值! + + 变量a = if .项目字段C + .项目字段D + else + .项目字段E + + for 变量v in *值集合 + \项目方法C 变量v + + for 变量i = 1, 计数器 + \项目方法C 变量i + + unless .变量b + .变量c = while .项目字段D + \下一个项目! + \取得! + +nil + 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 @@ +do + 变量a = 变量b ?? 变量c + +do + :字段a = 变量b ?? 变量c + +do + 变量a = 函数! + 变量a ??= false + +do + 变量a ??= 函数! + +do + local 变量a, 变量b, 变量c, 变量d, 变量e + 变量a = 变量b ?? 变量c ?? 变量d ?? 变量e + +do + 变量a = 变量b ?? 变量c ?? 变量d ?? 变量e + +do + 函数 变量x ?? "你好" + +do + with 函数A! ?? 函数B! + 打印 .字段 + +do + 变量a = 1 + 2 + 变量b ?? 变量c + 3 + 4 + +do + 变量a = 1 + 2 + (变量b ?? 变量c) + 3 + 4 + +do + :字段a, :字段b = 函数! + 变量a or= 1 + 变量b ??= 变量c ?? 2 + +do + 变量a = 1 ?? 2 ?? 3 + +do + 变量a.字段.字段 ??= 1 + 变量a = 变量b.字段 ?? 变量c.字段 ?? 变量d.字段 + 变量a.字段 ??= 1 + +nil + 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 @@ + +-- binary ops +数字x = 1 + 3 + +数字y = 1 + + 3 + +数字z = 1 + + 3 + + 4 + +-- + +数字k = 变量b and 变量c and + 变量g + +变量h = 东西 and + -> + 打印 "你好 世界" + +-- TODO: should fail, indent still set to previous line so it thinks body is +-- indented +变量i = 东西 or + -> + 打印 "你好 世界" + +变量p = 东西 and + -> +打印 "你好 世界" + +变量s = 东西 or + -> and 234 + +-- +变量u = { + 颜色: 1 and 2 and + 3 + 4 + 4 +} + +变量v = { + 颜色: 1 and + -> + "yeah" + "great" + 好的: 3 ^ +2 +} + +-- parens + +变量nno = ( + 是的 + 2 ) + +变量nn = ( + 是的 + 2 +) + +变量n = 你好( + 变量b +) -> + +你好 变量a, + ( + 是的 + + 2 + ) - + 好的 + 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 @@ + +{"abc", 123, 998} |> 每一个 打印 + +{1,2,3} + |> 映射 (变量x)-> 变量x * 2 + |> 过滤 (变量x)-> 变量x > 4 + |> 合并 0, (变量a,变量b)-> 变量a + 变量b + |> 打印 + +[i |> tostring for i = 0,10] |> table.concat(",") |> 打印 + +变量b = 1 + 2 + (4 |> tostring |> 打印(1) or 123) + +if 变量x = 233 |> math.max 998 + 打印 变量x + +with 变量b |> 创建? "new" + .value = 123 + 打印 \工作! + +123 |> 函数f? + +"abc" |> 函数1? |> 函数2? + +变量c = "abc" |> 函数1? |> 函数2? + +函数f = -> + 参数 |> x.y?\如果 + +998 |> 函数2 "abc", 233 |> 函数0 |> 函数1 +998 |> 函数0("abc", 233) |> 函数1 |> 函数2 + +1 |> 函数f 2, 3, 4, 5 +值(2) |> 函数f 1, _, 3, 4, 5 +数组[3] |> 函数f 1, 2, _, 4, 5 + +变量a = {"1","2","3"} |> table.concat("") |> tonumber |> 函数1(1, 2, 3, _) |> 函数2(1, _, 3) + +读文件("example.txt") |> + 提取(_, 语言, {}) |> + 解析(_, 语言) |> + 发出 |> + 渲染 |> + 打印 + +读文件("example.txt") \ + |> 提取(_, 语言, {}) \ + |> 解析(_, 语言) \ + |> 发出 \ + |> 渲染 \ + |> 打印 + +读文件 "example.txt" + |> 提取 _, 语言, {} + |> 解析 _, 语言 + |> 发出 + |> 渲染 + |> 打印 + +123 |> not 函数! |> 函数f + +do + _1 = 列表{"abc","xyz","123"}\映射"#"\值! + |> -函数! + |> abc 123, _, "x" + + global _2,_3,_4 = 1,2,3 + |> 函数f + + local _5 = 变量v |> 函数1 1 + |> 函数2 2 + |> 函数3 3 + |> 函数4 4 + +变量x = 123 |> 函数a |> 函数b or 456 |> 函数c |> 函数d or 函数a.if\那么("abc") or 函数a?.函数b\函数c?(123) or 变量x\函数y + +变量x1 = 3 * -4 |> 函数f + +变量x2 = 3 * -2 ^ 2 |> 函数f + +变量y = 1 + not # 2 |> (函数a ^ 函数c) |> 函数b(3,_) * 4 ^ -123 |> 函数f |> 函数1 or 123 + +nil + 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 @@ +变量x\执行 "工作" + +方法 变量a\执行!\结束("好")\如果 "abc", 123 + +结果 = 变量b.函数\执行!\当("好")\如果 "def", 998 + +变量c.重复.如果\然后("xyz")\否则 结果 + +打印 @循环, @@函数 123 + +if 颜色 = 消息\匹配 "<%w*>" then 消息 = 消息\替换 "<%->", 颜色 + +消息 = 消息\替换 "<%->", 颜色 if 颜色 = 消息\匹配 "<%w*>" + +数值A = 方法! if 方法 = 获取方法! + +local 数值A = 方法! if 方法 = 获取方法! + +数值B = do + 方法 = 获取方法! + 方法?! + +global 背包 = + 东西: + 好的: 200 + 他们: -> + 打印 "你好" + 你的脚"小" + 美丽: 头发 + 黄金: 嗯哼 + 为什么: 1000 + + 吃: 食物 + 好的: 朋友 + +开始 = + 东西: "冷" + +local 洗澡 = + 在: "火" + 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 @@ +-- testing `return` propagation + +_ = -> _ = 变量x for 变量x in *物品 +_ = -> [变量x for 变量x in *物品] + + +-- doesn't make sense on purpose +do + for 变量x in *物品 do return 变量x + +do + return [变量x for 变量x in *物品] + +do + return {变量x,变量y for 变量x,变量y in *物品} + +_ = -> + if 变量a + if 变量a + 变量a + else + 变量b + elseif 变量b + if 变量a + 变量a + else + 变量b + else + if 变量a + 变量a + else + 变量b + +do + return if 变量a + if 变量a + 变量a + else + 变量b + elseif 变量b + if 变量a + 变量a + else + 变量b + else + if 变量a + 变量a + else + 变量b + +do + return + :值 + 物品A: 123 + 物品B: "abc" + +do + return + * 1 + * 2 + * ...三 + * 4 + +_ = -> 变量a\变量b +do 变量a\变量b + 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 @@ + +你好 = "你好" +问候 = "啥事,好吧" +打印 你好 + +嗯 = '嗯' + +这里, 另一个 = "好的", '世界' + +呀 = "YU'M" +你 '我说:"嗯"' + +打印 呀, 你 + +另一个 = [[ 你好 世界 ]] + +你好_那里 = [[ + 你好呀 +]] + +好吧 = [==[ "helo" ]==] + +哈喽 = [===[ + eat noots]===] + +嗯嗯 = [[well trhere]] + +文字 = [[ + +nil +Fail to compile +]] + +文字[ [[abc]]] = [["#{变量i}" for 变量i = 1, 10] for 变量i = 1, 10]] + +哦哦 = "" + +变量x = "\\" +变量x = "a\\b" +变量x = "\\\n" +变量x = "\"" + +-- + +变量a = "你好 #{问候} 你好" +变量b = "#{问候} 你好" +变量c = "你好 #{5+1}" +变量d = "#{你好 世界}" +变量e = "#{1} #{2} #{3}" + +变量f = [[你好 #{世界} 世界]] +变量g = "\#{你好 世界}" + +-- + +变量a = '你好 #{问候} 你好' +变量b = '#{问候} 你好' +变量c = '你好 #{问候}' + + +-- + +变量_ = "你好" +"你好"\格式 1 +"你好"\格式(1,2,3) +"你好"\格式(1,2,3) 1,2,3 + +"你好"\世界! +"你好"\格式!.问候 1,2,3 +"你好"\格式 1,2,3 + +某事"你好"\世界! +某事 "你好"\世界! + 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 @@ + + +变量x = { + 值: 100 + 你好: => + 打印 @val +} + +函数 = 变量x\值 +打印 函数! +打印 变量x\值! + + +-- ... should be bubbled up anon functions +((...)-> 变量x = 你好(...)\世界)! + +nil + 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 @@ +switch 值 + when "酷" + 打印 "你好,世界" + +switch 值 + when "酷" + 打印 "你好,世界" + else + 打印 "好的,很棒" + +switch 值 + when "酷" + 打印 "你好,世界" + when "是的" + 变量_ = [[FFFF]] + [[MMMM]] + when 2323 + 32434 + 打印 "好的" + else + 打印 "好的,很棒" + +输出 = switch 值 + when "酷" then 打印 "你好,世界" + else 打印 "好的,很棒" + +输出 = switch 值 + when "酷" then 变量x + when "哦" then 34340 + else error "这大大地失败了" + +with 东西 + switch \值! + when .确定 + 变量_ = "世界" + else + 变量_ = "是的" + +修复 这个 +call_func switch 某物 + when 1 then "是" + else "否" + +-- + +switch 嗨 + when 你好 or 世界 + 变量_ = 绿色 + +-- + +switch 嗨 + when "一个", "两个" + 打印 "酷" + when "爸爸" + 变量_ = 否 + +switch 嗨 + when 3+1, 你好!, (-> 4)! + 变量_ = 黄色 + else + 打印 "酷" + +do + 字典 = { + {} + {1, 2, 3} + 变量a: 变量b: 变量c: 1 + 变量x: 变量y: 变量z: 1 + } + + switch 字典 + when { + 第一 + {一个, 两个, 三个} + 变量a: 变量b: :变量c + 变量x: 变量y: :变量z + } + 打印 第一, 一个, 两个, 三个, 变量c, 变量z + +do + 物品 = + * 变量x: 100 + 变量y: 200 + * 宽度: 300 + 高度: 400 + * false + + for 物 in *物品 + switch 物 + when :变量x, :变量y + 打印 "Vec2 #{变量x}, #{变量y}" + when :宽度, :高度 + 打印 "Size #{宽度}, #{高度}" + when false + 打印 "没有" + when __类: 类 + switch 类 + when 类别A + 打印 "对象 A" + when 类别B + 打印 "对象 B" + when <>: 表 + 打印 "带有元表的表" + else + 打印 "物品不被接受!" + +do + 表格 = {} + + switch 表格 + when {:变量a = 1, :变量b = 2} + 打印 变量a, 变量b + + switch 表格 + when {:变量a, :变量b = 2} + 打印 "部分匹配", 变量a, 变量b + + switch 表格 + when {:变量a, :变量b} + 打印 变量a, 变量b + else + 打印 "没有匹配" + +do + 表格 = 变量x: "abc" + switch 表格 + when :变量x, :变量y + 打印 "变量x: #{变量x} 和 变量y: #{变量y}" + when :变量x + 打印 "只有 变量x: #{变量x}" + +do + 匹配 = switch 表格 + when 1 + "1" + when :变量x + 变量x + when false + "false" + else + nil + +do + return switch 表格 + when nil + "无效" + when :变量a, :变量b + "#{变量a + 变量b}" + when 1, 2, 3, 4, 5 + "数字 1 - 5" + when {:匹配任何表格 = "后备"} + 匹配任何表格 + else + "除非它不是一个表格,否则不应到达这里" + +do + switch 变量y + when {变量x: <>: 表} + 打印 表 + +nil + 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 @@ +#!/this/is/ignored + +变量a = 1 + 2 * 3 / 6 + +变量a, 一堆, 去, 这里 = 另外, 世界, nil, nil + +函数 参数1, 参数2, 另外, 参数3 + +这里, 我们 = () ->, 是的 +这个, 不同 = () -> 方法; 是的 + +爸爸() +爸爸(主) +你好(一,二)() +(5 + 5)(世界) + +乐趣(变量a)(变量b) + +乐趣(变量a) 变量b + +乐趣(变量a) 变量b, 坏 你好 + +你好 世界 你在这里做什么 + +什么(这个)[3243] 世界, 哎呀 + +毛茸茸[手][是](恶心) 好的 好的[世界] + +_ = (得到[某事] + 5)[年] + +变量i,变量x = 200, 300 + +是的 = (1 + 5) * 3 +是的 = ((1+5)*3)/2 +是的 = ((1+5)*3)/2 + 变量i % 100 + +哇 = (1+2) * (3+4) * (4+5) + +_ = -> + if 某事 + return 1,2,4 + + 打印 "你好" + +_ = -> + if 你好 + "你好", "世界" + else + 不, 方法 + + +_ = -> 1,2,34 + +return 5 + () -> 4 + 2 + +return 5 + (() -> 4) + 2 + +打印 5 + () -> + _ = 34 + 好 球 + +某事 '其他', "是" + +某事'其他' +某事"其他" + +_ = 某事[[嘿]] * 2 +_ = 某事[======[嘿]======] * 2 +_ = 某事[ [======[嘿]======] ] * 2 + +_, _ = 某事'其他', 2 +_, _ = 某事"其他", 2 +_, _ = 某事[[其他]], 2 +_, _ = 某事[ [[其他]] ], 2 + +某事 '其他', 2 +某事 "其他", 2 +某事 [[其他]], 2 + +_ = 这里(我们)"去"[12123] + +分裂"abc xyz 123"\映射"#"\打印全部! + +_ = f""[变量a] +_ = f""\变量b! +_ = f"".变量c! + +f ""[变量a] +f ""\变量b! +f "".变量c! + +列表{"abc", "xyz", "123"}\映射"#"\打印全部! + +_ = f{}[变量a] +_ = f{}\变量b! +_ = f{}.变量c! + +某事 = + 测试: 12323 + 什么: -> 打印 "你好 世界" + +打印 某事.测试 + +天哪 = 你好: "世界" + +氩 = + 数字: 100 + 世界: (自己) -> + 打印 自己.数字 + return { + 某事: -> 打印 "嗨 从某事" + } + 某事: (自己, 字符串) -> + 打印 "字符串是", 字符串 + return 世界: (变量a,变量b) -> 打印 "总和", 变量a + 变量b + +某事.什么() +氩\世界().某事() + +氩\某事"200".世界(1,2) + +变量x = -434 + +变量x = -你好 世界 一 二 + +嗨 = -"herfef" + +变量x = -[变量x for 变量x in 变量x] + +打印 "你好" if 酷 +打印 "你好" unless 酷 +打印 "你好" unless 1212 and 3434 +打印 "你好" for i=1,10 + +打印 "疯子" + +if 你好 then _ = 343 + +打印 "什么" if 酷 + +阅读者\解析_行! until 阅读者\结束! + +阅读者\解析_行! while not 阅读者\结束! + +((...)-> 参数 = {...})! + +变量x = (...) -> + dump {...} + +变量x = not true + +变量y = not(5+5) + +变量y = #"你好" + +变量x = #{#{},#{1},#{1,2}} + +_, _ = 你好, 世界 + +某事\你好(什么) 变量a,变量b +某事\你好 什么 +某事.你好\世界 变量a,变量b +某事.你好\世界(1,2,3) 变量a,变量b + +变量x = 1232 +变量x += 10 + 3 +变量j -= "你好" +变量y *= 2 +变量y /= 100 +变量y //= 100 +变量m %= 2 +你好 ..= "世界" + +@@某事 += 10 +@某事 += 10 + +变量a["你好"] += 10 +变量a["你好#{tostring ff}"] += 10 +变量a[四].字段x += 10 + +变量a.变量b += 1 +变量a.变量b[1].变量c[2 + 3] += 1 +with 表 + .字段a.变量c += 1 + +表[] = 10 +变量a.变量b.变量c[] = 1 +变量x[] = if 条件v + 1 +else + 2 +with 表 + .变量b.变量c[] = with 向量 + .字段x = 1 + .字段y = 2 +对象a + .变量b.变量c + .变量d\函数! + .变量g[] = 1 + +表 = {} +表[] = 1 +表[] = 2 +表[] = 3 + +变量x = 0 +_ = (if ntype(变量v) == "函数定义" then 变量x + 1) for 变量v in *值 + +你好 = + 某物: 世界 + 如果: "你好" + 否则: 3434 + 函数: "好的" + 好的: 230203 + +表 = { + 执行: 变量b + 执行 :变量b +} + +div 类: "酷" + +_ = 5 + 什么 无聊 +什么 无聊 + 5 + +_ = 5 - 什么 无聊 +什么 无聊 - 5 + +变量x = 你好 - 世界 - 某物 + +((某物 = 与 什么 + \酷 100) -> + 打印 某物)! + +if 某物 + _ = 03589 + +-- 好的 什么 关于这个 + +else + _ = 3434 + +if 某物 + _ = 是的 + +elseif "嗯嗯嗯" + + 打印 "酷" + +else + + _ = 好的 + +-- 测试名字包含关键词 +变量x = 不是某物 +变量y = 如果某物 +变量z = 变量x 与 变量b +变量z = 变量x 与b + +while 10 > 某物( + 某物: "世界" + ) + 打印 "是的" + +-- 无界表 + +变量x = + 好的: 确定 + +是的 + 好的: 男人 + 确定: 先生 + +你好 "无逗号" + 是的: 爸爸 + 另一个: 世界 + +你好 "逗号", + 某物: 你好_世界 + 骂人: 你 + +-- 创建一个表 +另一个 你好, 一个, + 二, 三, 四, 是的: 男人 + 好的: 是的 + 好: 好的 + +另一个 你好, 一个, + 二, 三, 四, + 是的: 男人, 好的: 是的 + * 好: 好的, + 好的: 1 + * 好: 好的, + 好的: 2 + +另一个 你好, 一个, 二, 三, 四, + 是的: 男人 + 好的: 是的 + +另一个 你好, 一个, 二, 三, 四, 是的: 男人 + 好的: 是的 + +阿贾克斯 地址, + (数据) -> + 处理 数据, + (错误) -> + 打印 错误 + +-- +变量a += 3 - 5 +变量a *= 3 + 5 +变量a *= 3 +变量a >>= 3 +变量a <<= 3 +变量a /= 函数 "酷" + +--- + +变量x.然后 = "你好" +变量x.当.真 = "你好" +变量x + .当 + .真 = "你好" + +-- + +变量x or= "你好" +变量x and= "你好" + +-- + +变量z = 变量a-变量b +变量z = 变量a -变量b +变量z = 变量a - 变量b +变量z = 变量a- 变量b + +-- 酷 + +字符串 = --[[ +这是一个多行注释。 +没问题。 +]] 字符串A \ -- 注释 1 + .. 字符串B \ -- 注释 2 + .. 字符串C + +函数 --[[端口]] 3000, --[[ip]] "192.168.1.1" + +f = -> + 变量a,变量b, \ + 变量c,变量d, \ + 变量e,变量f + +f = -> + 变量a,变量b \ + ,变量c,变量d \ + ,变量e,变量f + +with 对象 + 调用( + --[[参数1]] \函数!, + --[[参数2]] 123, + --[[参数3]] "abc" + ) + +调用A( + 调用B( + 调用C 123 + ) +) + +123 + |> 调用C + |> 调用B + |> 调用A + +变量v = { + 变量a -1 + 变量a( +-1) + 变量a \ +- 1 + 变量a-1 + 变量a - 1 + 变量a - +1 + 变量a- +1 + 变量a - --[[123]]1 + + 变量a ~1 + 变量a( +~1) + 变量a \ +~ 1 + 变量a~1 + 变量a ~ 1 + 变量a ~ +1 + 变量a~ +1 + 变量a ~ --[[123]]1 +} + +do + 变量a = 1 \ + + 2 \ + * 3 / + 4 + + 变量_1 = f1 -1 \ + + 2 \ + + 3 + + 变量_2 = f1 - 1 \ + + 2 \ + + 3 + + f2 = (变量x)-> 打印 变量x \ + +1 + + 变量a = f2! + -1 |> f2 + + 变量a = f2! \ + - 1 |> f2 + + 变量_1 \ + ,变量_2 \ + ,变量_3 \ + ,变量_4 = 1 \ + ,f 2 \ + ,3 \ + ,f 4, \ + 4 + +do + f = ( + 变量a -- 参数a + 变量b -- 参数b + )-> 变量a + 变量b + f( + 变量a -- 值a + 变量b -- 值b + ) + f ! + +nil + 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 @@ +背包 = + 东西: + 是的: 200 + 他们: -> + print "你好" + 你的脚"小" + 美丽: 头发变量 + 金: 嗯变量 + 您: 1000 + + 吃: goo变量 + 是的: dudd变量 + +开始 = + 东西: "冷" + +浴 = + 开: "火" + +另一个 = + [4]: 232 + ["好食物"]: "是最好的" + +fwip变量 = + 东西: 你好"什么", 数字: 2323, + 什么: yo变量 "妈妈", "是的", + 水果: basket变量 + 坚果: day变量 + +frick变量 = 你好: "世界" + +frack变量, 最好 = 你好: "世界", 米饭: 3434, "什么" + +ya变量 = { 1,2,3, 键: 100, 343, "你好", 嗯: 232 } + +x变量 = { 1,2, + 4343, 343 ,343 } + +g变量, p变量 = { + 1,2, nowy变量: "是", 3,4, + 嘿: 232, 另一个: "天" +}, 234 + +annother变量 = { + 1,2,3 + 3,4,5 + 6,7,8 +} + +是的变量 = { + [232]: 3434, "你好" + 冰: "蛋糕" +} + +-- 混淆的东西... +whatabout变量 = { + 你好 世界, 另一个变量 + 什么, 关于, 现在 + + 你好"世界", 是的变量 + 你好 "世界", 是的变量 +} + +x变量 = + -- 是的 + 东西: => "你好" + 酷: -- 嗯 + --so ething + 床: { + 2323,2323 + } + 红: 2343 -- 这里 + -- 什么 + 名字: (node变量) => @value node变量 -- 这里 + -- 评论我 +-- 好的 + +x变量 = { :东西, 东西: 东西变量 } + +y变量 = { + :你好, :那里, :怎么样, :你 + :事情 +} + +电话我 "你好", :x变量, :y变量, :z变量 + +t变量 = { + a变量: 'a' + [b变量]: 'b' +} + +xam变量 = { + 你好: 1234 + "你好": 12354 + [[你好变量]]: 12354 + ["你好"]: 12354 + [ [[你好变量]] ]: 12354 +} + +kam变量 = + 你好: 12 + 好奶酪: + "嗯" + + 是的: + 12 + 232 + + 让我们: + keepit 继续: 真的, + 好的: "是的" + + 更多: + { + 1, [x变量 for x变量=1,10] + } + + [{"一个", "两个"}]: + 一件事情 => + +-- 这两者都有令人满意的输出 +keepit 继续: 真的, + 好的: "是的", + workd变量: "好的" + +事情 什么: + "伟大", 没有: + "更多" + 好的: 123 + + +-- +事情 什么: + "伟大", 没有: + "更多" +_变量 = 好的: 123 -- 一个匿名表 + + +-- + +k变量 = { "你好": "世界" } +k变量 = { '你好': '世界' } +k变量 = { "你好": '世界', "帽子": "zat变量" } + +请 "你好": "世界" +k变量 = "你好": "世界", "一个": "区域" + +f1变量, f2变量, f3变量 = "一个", "两个": three变量, "四" +f1变量, f2变量 = "两个": three变量, "四" +f1变量 = { "一个", "两个": three变量, "四" } + +j1变量, j2变量, j3变量, j4变量 = "一个", "两个": three变量, "四": five变量, 6, 7 + +女英雄 = + 名字: "克里斯蒂娜" + 年龄: 18 + 工作: "公主" + 喜欢: + * 名字: "小猫" + img变量: "/image/kittens.png" + * 名字: "花" + img变量: "/image/flower.png" + 物品: + * 名字: "戒指" + 数量: 2 + * 名字: "项链" + 数量: 1 + 状态: + desc变量: "弱" + * 属性: "健康" + 价值: 50 + * 属性: "魔法" + 价值: 100 + +库存 = + 设备: + * "剑" + * "盾" + 物品: + * 名字: "药水" + 计数: 10 + * 名字: "面包" + 计数: 3 + +物品 = + * 函数! + * with 变量tb + .abc = 123 + * {1, 2, 3} + * 函数 {1, 2, 3} + * 函数 + * 1 + * 2 + * 3 + * [变量i for 变量i = 1, 3] + * "#{if 变量a then 变量b}" + +双项 = + * + * "国王" + * "王后" + * + * "英雄" + * "公主" + +物品 = + * + 名称: "戒指" + 数量: 2 + * + 名称: "项链" + 数量: 1 + +菜单 = + * 文本: "保存" + 子菜单: + * 文本: "插槽1:" .. (插槽[1].名称 or "无") + 点击: -> + * 文本: {"插槽2"} + 点击: -> + * 文本: [[插槽3]] + 点击: -> + * 文本: ("插槽4")\名称! + 点击: -> + * 文本: ({{"插槽5"}})[1]\名称! + 点击: -> + [6]: { + 文本: ("插槽6") + 点击: -> + } + +变量tb = {...其他} + +tb混合 = { + 1, 2, 3 + ... with 物品 + .x = 1 + \函数! + "a", "b", "c" + ...函数?! + 键: "值" + ... -- 在此处执行Lua表行为 +} + +tb混合A = { + ...[变量i for 变量i = 1, 10] + 11 +} + +tb混合B = { + ... ... -- 此处仅访问vararg中的第一个项 + ... {...} + ... {......} + 1, 2, 3 +} + +const 模板 = { + foo: "你好" + bar: "世界" + baz: "!" +} + +const 专门化 = { + ...模板 + bar: "鲍勃" +} + +专门化B = { + 函数: -> + ...模板 + 结束: -> + 如果: true + 否则: false +} + +部分 = + * "肩膀" + * "膝盖" + +歌词 = + * "头" + * ...部分 + * "和" + * "脚趾" + +tb块 = + 子菜单: + :值 + * ...物品 + * ... + +函数 + * ...物品 + :值 + * ... + k: 变量v + * ... + +nil + 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 @@ +try + 函数 1, 2, 3 +catch 错误 + 打印 错误 + +try 函数 1, 2, 3 +catch 错误 + 打印 错误 + +try + 打印 "正在try" + 函数 1, 2, 3 + +do + 成功, 结果 = try + 函数 1, 2, 3 + catch 错误 + 打印 错误 + + 成功, 结果 = try 函数 1, 2, 3 + +try 表.函数 +try 表.函数! +try 表.函数() +try (表.函数!) +try (表\函数(1, 2, 3)) + +try 表.函数 1 +try 表.函数(1) + +if (try 函数 1 +catch 错误 + 打印 错误) + 打印 "好的" + +if try (函数 1) +catch 错误 + 打印 错误 + 打印 "好的" + +do + if 成功, 结果 = try 函数 "abc", 123 + 打印 结果 + + 成功, 结果 = try 函数 "abc", 123 + catch 错误 + 打印 错误 + + 打印 结果 if 成功, 结果 = try 函数 "abc", 123 + catch 错误 + 打印 错误 + +do + try + 函数 1, 2, 3 + + try 函数 1, 2, 3 + +nil + 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 @@ +if 变量a + unless 变量b + 打印 "嗨" + elseif 变量c + 打印 "不嗨" 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 @@ + +你好 = "你好" +世界 = "世界" + +_ = (using nil) -> + 你好 = 3223 + +_ = (参数a using nil) -> + 你好 = 3223 + 参数a = 323 + +_ = (参数a,参数b,参数c using 参数a,参数b,参数c) -> + 参数a,参数b,参数c = 1,2,3 + 世界 = 12321 + +_ = (参数a,参数e,参数f using 参数a,参数b,参数c, 你好) -> + 参数a,参数b,参数c = 1,2,3 + 你好 = 12321 + 世界 = "yeah" + +_ = (using nil) -> + 你好 or= 2 + +do + 变量a = {} + (using nil) <- _ + {元素x, 元素y} = 变量a + +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 @@ +连接 = (...) -> + 带有 with 变量a + \函数! + 带有 with 变量a + \函数 ... + + 列表生成 [项目[i] for i = 1, 10] + 列表生成 [项目[i] ... for i = 1, 10] + 列表生成 [物品 for 物品 in *项目] + 列表生成 [物品 ... for 物品 in *项目] + + 类生成 class 变量A + 函数! + 类生成 class 变量A + 函数 ... + + 表生成 {键, 值 for 键, 值 in pairs 表} + 表生成 {键, 值 ... for 键, 值 in pairs 表} + 表生成 {物品, true for 物品 in *项目} + 表生成 {物品(...), true for 物品 in *项目} + + 做操作 do + 函数! + 做操作 do + 函数 ... + + 当操作 while false + 函数! + 当操作 while false + 函数 ... + + 如果操作 if false + 函数! + 如果操作 if false + 函数 ... + + 除非操作 unless true + 函数! + 除非操作 unless true + 函数 ... + + 切换操作 switch 变量x + when "abc" + 函数! + 切换操作 switch 变量x + when "abc" + 函数 ... + + 表达式操作 函数?! + 表达式操作 函数? ... + + 冒号 f!\函数 + 冒号 f(...)\函数 + + _ = -> + 列表 = {1, 2, 3, 4, 5} + 函数名 = (确定) -> + 确定, table.unpack 列表 + 确定, ... = 函数名 true + 打印 确定, ... + + 多参数函数 = -> + 10, nil, 20, nil, 30 + + ... = 多参数函数! + 打印 select "#", ... + 打印 ... + + do + ... = 1, 2 if true + 打印 ... + + do + 变量a, ... = 1, 2 unless true + 打印 变量a, select '#', ... + + do + ... = switch 变量x when 1 + with 表 + .变量x = 123 + else + 表2 + 打印 ... + + do + ... = 1, 2, if 条件 + 3, 4, 5 + 打印 ... + + do + 表, ... = + 名字: "abc" + 值: 123 + 打印 ... + nil + 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 +} + +_ = { 1, 2 } + +_ = {1,2} + +_ = { +1,2 +} + +_ = { 事情 1,2, + 4,5,6, + 3,4,5 +} + +_ = { + 变量a 1,2,3, + 4,5,6 + 1,2,3 +} + +_ = { + 变量b 1,2,3, + 4,5,6 + 1,2,3, + 1,2,3 +} + +_ = { 1,2,3 } + +_ = { 变量c 1,2,3, +} + +你好 1,2,3,4, + 1,2,3,4,4,5 + +变量x 1, + 2, 3, + 4, 5, 6 + +你好 1,2,3, + 世界 4,5,6, + 5,6,7,8 + +你好 1,2,3, + 世界 4,5,6, + 5,6,7,8, + 9,9 + +_ = { + 你好 1,2, + 3,4, + 5, 6 +} + +变量x = { + 你好 1,2,3,4, + 5,6,7 + 1,2,3,4 +} + +if 你好 1,2,3, + 世界, + 世界 + 打印 "你好" + +if 你好 1,2,3, + 世界, + 世界 + 打印 "你好" + +-- + +变量a( + 一个, 两个, 三个 +) + +变量b( + 一个, + 两个, + 三个 +) + +变量c(一个, 两个, + 三个, 四个) + +-- + +v = -> + 变量a, \-- v1 + 变量b, \-- v2 + 变量c -- v3 + +v1, v2, \ + v3 = -> + 变量a; \-- 函数结束于v1 + 变量b, \-- v2 + 变量c -- v3 + +变量a, 变量b, \ + 变量c, 变量d, \ +变量e, 变量f = 1, \ + f2 + :abc; \-- 参数2 + 3, \ + 4, \ + 函数5 abc; \-- 参数5 + 6 + +for 变量a, \-- 解构1 + 变量b, \-- 解构2 + --[[解构 3]] 变量c \ + in pairs 对象tb + 打印 变量a, \ + 变量b, \ + 变量c + +for i = 1, \-- 初始 + 10, \-- 停止 + -1 -- 步进 + 打印 i + +local 变量a,\ + 变量b,\ + 变量c + +nil + 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 @@ +do + 变量a = -> + with 东西 + 打印 .你好 + 打印 你好 + 打印 "世界" + +do + with 叶子 + .世界! + .世界 1,2,3 + + 变量g = .什么.是.这 + + .你好 1,2,3 + + \你好(1,2).世界 2323 + + \你好 "是的", "伙计" + .世界 = 200 + +do + 滋滋滋 = with 东西 + .设置状态 "你好 世界" + +do + 变量x = 5 + with 某事! + \写 "你好 世界" + +do + 变量x = { + 你好: with 好的 + \确定! + } + +do + with 东西 + _ = \属性"某物".你好 + .属性\发送(一个) + .属性\发送 一个 + +-- + +do + with 变量a + 打印 .世界 + + 模块 = with _模块 = {} + .事物 = "你好" + + with 变量a, 变量b = 东西, 布 + 打印 .世界 + + 变量x = with 变量a, 变量b = 1, 2 + 打印 变量a + 变量b + + 打印 with 变量a, 变量b = 1, 2 + 打印 变量a + 变量b + + p = with 你好!.字段x, 世界!.字段y = 1, 2 + 打印 变量a + 变量b + +-- + +do + 变量x = "你好" + with 变量x + 变量x\大写! + +do + with 变量k = "乔" + 打印 \大写! + +do + with 变量a,变量b,变量c = "", "", "" + 打印 \大写! + +do + 变量a = "床铺" + with 变量a,变量b,变量c = "", "", "" + 打印 \大写! + +do + with 变量j + 打印 \大写! + +do + with 变量k.变量j = "乔" + 打印 \大写! + +do + with 变量a + 打印 .b + with .c + 打印 .d + +do + with 变量a + with .b = 2 + 打印 .c + +do + _ = -> + with 嗨 + return .a, .b + +do + with 表格 + .x = 项目 + .字段 + \函数 123 + +do + with 爸爸 + .如果 "是的" + 变量y = .结束.函数 + +do + with 表格 + [1] = [2]?\函数! + ["%a-b-c%"] = 123 + [ [[x y z]]] = [变量] + 打印 [ [3]] + with [4] + [1] = 1 + [] = "abc" + [] = + 类型: "你好" + * 名字: "xyz" + 值: 998 + +do + global 掩码 + with? 掩码 = 实心矩形 宽: w, 高: h, 颜色: 0x66000000 + .触摸启用 = true + .吞噬触摸 = true + +do + with? 掩码 = 实心矩形 宽: w, 高: h, 颜色: 0x66000000 + .触摸启用 = true + .吞噬触摸 = true + +nil + -- cgit v1.2.3-55-g6feb