meaoiu 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. package/LANGUAGE_GUIDE.md +511 -0
  2. package/LICENSE +21 -0
  3. package/README.md +336 -0
  4. package/dist/api/execution.d.ts +9 -0
  5. package/dist/api/execution.d.ts.map +1 -0
  6. package/dist/api/execution.js +17 -0
  7. package/dist/api/execution.js.map +1 -0
  8. package/dist/api/serviceState.d.ts +24 -0
  9. package/dist/api/serviceState.d.ts.map +1 -0
  10. package/dist/api/serviceState.js +53 -0
  11. package/dist/api/serviceState.js.map +1 -0
  12. package/dist/api/services/completions.d.ts +15 -0
  13. package/dist/api/services/completions.d.ts.map +1 -0
  14. package/dist/api/services/completions.js +48 -0
  15. package/dist/api/services/completions.js.map +1 -0
  16. package/dist/api/services/diagnostics.d.ts +9 -0
  17. package/dist/api/services/diagnostics.d.ts.map +1 -0
  18. package/dist/api/services/diagnostics.js +5 -0
  19. package/dist/api/services/diagnostics.js.map +1 -0
  20. package/dist/api/services/formatting.d.ts +2 -0
  21. package/dist/api/services/formatting.d.ts.map +1 -0
  22. package/dist/api/services/formatting.js +223 -0
  23. package/dist/api/services/formatting.js.map +1 -0
  24. package/dist/api/services/highlight.d.ts +14 -0
  25. package/dist/api/services/highlight.d.ts.map +1 -0
  26. package/dist/api/services/highlight.js +58 -0
  27. package/dist/api/services/highlight.js.map +1 -0
  28. package/dist/api/services/inlayHints.d.ts +22 -0
  29. package/dist/api/services/inlayHints.d.ts.map +1 -0
  30. package/dist/api/services/inlayHints.js +100 -0
  31. package/dist/api/services/inlayHints.js.map +1 -0
  32. package/dist/api/services/search.d.ts +17 -0
  33. package/dist/api/services/search.d.ts.map +1 -0
  34. package/dist/api/services/search.js +35 -0
  35. package/dist/api/services/search.js.map +1 -0
  36. package/dist/api/utils/astUtils.d.ts +11 -0
  37. package/dist/api/utils/astUtils.d.ts.map +1 -0
  38. package/dist/api/utils/astUtils.js +106 -0
  39. package/dist/api/utils/astUtils.js.map +1 -0
  40. package/dist/api/utils/lspUtils.d.ts +16 -0
  41. package/dist/api/utils/lspUtils.d.ts.map +1 -0
  42. package/dist/api/utils/lspUtils.js +5 -0
  43. package/dist/api/utils/lspUtils.js.map +1 -0
  44. package/dist/api/utils/symbolAnalyzer.d.ts +37 -0
  45. package/dist/api/utils/symbolAnalyzer.d.ts.map +1 -0
  46. package/dist/api/utils/symbolAnalyzer.js +440 -0
  47. package/dist/api/utils/symbolAnalyzer.js.map +1 -0
  48. package/dist/api/utils/symbolTable.d.ts +28 -0
  49. package/dist/api/utils/symbolTable.d.ts.map +1 -0
  50. package/dist/api/utils/symbolTable.js +3 -0
  51. package/dist/api/utils/symbolTable.js.map +1 -0
  52. package/dist/cli/main.d.ts +3 -0
  53. package/dist/cli/main.d.ts.map +1 -0
  54. package/dist/cli/main.js +92 -0
  55. package/dist/cli/main.js.map +1 -0
  56. package/dist/cli/tools/completer.d.ts +2 -0
  57. package/dist/cli/tools/completer.d.ts.map +1 -0
  58. package/dist/cli/tools/completer.js +24 -0
  59. package/dist/cli/tools/completer.js.map +1 -0
  60. package/dist/cli/tools/diagnoser.d.ts +2 -0
  61. package/dist/cli/tools/diagnoser.d.ts.map +1 -0
  62. package/dist/cli/tools/diagnoser.js +29 -0
  63. package/dist/cli/tools/diagnoser.js.map +1 -0
  64. package/dist/cli/tools/formatter.d.ts +2 -0
  65. package/dist/cli/tools/formatter.d.ts.map +1 -0
  66. package/dist/cli/tools/formatter.js +27 -0
  67. package/dist/cli/tools/formatter.js.map +1 -0
  68. package/dist/cli/tools/searcher.d.ts +4 -0
  69. package/dist/cli/tools/searcher.d.ts.map +1 -0
  70. package/dist/cli/tools/searcher.js +30 -0
  71. package/dist/cli/tools/searcher.js.map +1 -0
  72. package/dist/cli/tools/starter.d.ts +3 -0
  73. package/dist/cli/tools/starter.d.ts.map +1 -0
  74. package/dist/cli/tools/starter.js +23 -0
  75. package/dist/cli/tools/starter.js.map +1 -0
  76. package/dist/cli/tools/toolUtils.d.ts +8 -0
  77. package/dist/cli/tools/toolUtils.d.ts.map +1 -0
  78. package/dist/cli/tools/toolUtils.js +52 -0
  79. package/dist/cli/tools/toolUtils.js.map +1 -0
  80. package/dist/core/ast.d.ts +140 -0
  81. package/dist/core/ast.d.ts.map +1 -0
  82. package/dist/core/ast.js +3 -0
  83. package/dist/core/ast.js.map +1 -0
  84. package/dist/core/builtIns.d.ts +15 -0
  85. package/dist/core/builtIns.d.ts.map +1 -0
  86. package/dist/core/builtIns.js +175 -0
  87. package/dist/core/builtIns.js.map +1 -0
  88. package/dist/core/error.d.ts +41 -0
  89. package/dist/core/error.d.ts.map +1 -0
  90. package/dist/core/error.js +63 -0
  91. package/dist/core/error.js.map +1 -0
  92. package/dist/core/parser.d.ts +89 -0
  93. package/dist/core/parser.d.ts.map +1 -0
  94. package/dist/core/parser.js +578 -0
  95. package/dist/core/parser.js.map +1 -0
  96. package/dist/core/preprocessor.d.ts +2 -0
  97. package/dist/core/preprocessor.d.ts.map +1 -0
  98. package/dist/core/preprocessor.js +187 -0
  99. package/dist/core/preprocessor.js.map +1 -0
  100. package/dist/core/run/environment.d.ts +43 -0
  101. package/dist/core/run/environment.d.ts.map +1 -0
  102. package/dist/core/run/environment.js +192 -0
  103. package/dist/core/run/environment.js.map +1 -0
  104. package/dist/core/run/interpreter.d.ts +13 -0
  105. package/dist/core/run/interpreter.d.ts.map +1 -0
  106. package/dist/core/run/interpreter.js +415 -0
  107. package/dist/core/run/interpreter.js.map +1 -0
  108. package/dist/core/run/io.d.ts +18 -0
  109. package/dist/core/run/io.d.ts.map +1 -0
  110. package/dist/core/run/io.js +34 -0
  111. package/dist/core/run/io.js.map +1 -0
  112. package/dist/core/run/logger.d.ts +12 -0
  113. package/dist/core/run/logger.d.ts.map +1 -0
  114. package/dist/core/run/logger.js +17 -0
  115. package/dist/core/run/logger.js.map +1 -0
  116. package/dist/core/run/value.d.ts +41 -0
  117. package/dist/core/run/value.d.ts.map +1 -0
  118. package/dist/core/run/value.js +37 -0
  119. package/dist/core/run/value.js.map +1 -0
  120. package/dist/core/tokenizer.d.ts +82 -0
  121. package/dist/core/tokenizer.d.ts.map +1 -0
  122. package/dist/core/tokenizer.js +277 -0
  123. package/dist/core/tokenizer.js.map +1 -0
  124. package/dist/core/typedef.d.ts +32 -0
  125. package/dist/core/typedef.d.ts.map +1 -0
  126. package/dist/core/typedef.js +67 -0
  127. package/dist/core/typedef.js.map +1 -0
  128. package/dist/index.d.ts +12 -0
  129. package/dist/index.d.ts.map +1 -0
  130. package/dist/index.js +13 -0
  131. package/dist/index.js.map +1 -0
  132. package/package.json +60 -0
@@ -0,0 +1,511 @@
1
+ # 喵谕语言半解
2
+
3
+ > 不可以学不会喵!
4
+
5
+ ---
6
+
7
+ ## 基本规矩喵
8
+
9
+ ### 尾符
10
+ 句末必须有 `~`,没有尾巴是残疾的喵~ 忘了写就等着被骂吧~
11
+ ```miu
12
+ 蹭我~ (对喵)
13
+ 蹭你 (错喵,尾巴在哪里)
14
+ ```
15
+
16
+ ### 注释
17
+ 悄悄话用圆括号包裹,可以套很多层喵~ 多少层都无所谓,反正没人看得懂喵~
18
+ ```miu
19
+ (这是一条悄悄话)
20
+ (这是 (一条悄悄的悄悄话) 悄悄话)
21
+ ```
22
+
23
+ ### 无需空格
24
+ 字之间可以不用空格或换行喵~
25
+ ```miu
26
+ 这 就是 '有空格'~
27
+ 那就是'无空格'~
28
+ 这和 那 都好~
29
+ ```
30
+
31
+ ### 引用传递
32
+ 若无特别说明,传的都是引用喵~ 不会自动给你抄一份喵~ 不小心传错了会被变成奇怪的形状喵~
33
+
34
+ ---
35
+
36
+ ## 玩具的种类喵 (数据类型)
37
+
38
+ 你那小脑瓜能记住的也就这几种喵:
39
+
40
+ | 类型 | 写法 | 何意味 |
41
+ | ---- | ------------------ | ------------------------------------ |
42
+ | 摸数 | `16`, `0`, `256` | 十进制非负数有理喵,负数自己用〇减 |
43
+ | 闲话 | `'你好'`, `"地球"` | 一串字符喵,单引号双引号都行 |
44
+ | 好坏 | `好喵`, `坏喵` | 两仪喵,好就是真,坏就是假 |
45
+ | 空碗 | `空碗` | 你的脑袋喵,里面什么都没有 |
46
+ | 纸箱 | 集合 | [待会](#纸箱喵-集合)讲喵,别急 |
47
+ | 计谋 | 函数 | [后面](#计谋喵-函数)也讲喵,急了憋着 |
48
+
49
+ 常识喵:`好喵` 和非零摸数和非空闲话是好喵,`坏喵`、`0`、`空碗`、空闲话 `''` 是坏喵~
50
+
51
+ ---
52
+
53
+ ## 抢占地盘喵 (变量声明与赋值)
54
+
55
+ ### 声明变量
56
+ 用 `蹭` 声明一个变量喵~
57
+ ```miu
58
+ 蹭甲~ (声明但不赋值,甲 是空碗)
59
+ 蹭乙~ 乙 就是 16~ (声明再赋值)
60
+ 蹭丙 就是 32~ (顺便赋值)
61
+ ```
62
+
63
+ ### 三种赋值方式
64
+ 听好了,这比什么都重要喵~
65
+
66
+ | 关键字 | 语义 | 何意味 |
67
+ | ------ | ---- | -------------------------------------- |
68
+ | `就是` | 引用 | 两个名字指向同一个碗,改一个另一个也变 |
69
+ | `就像` | 复制 | 复制一个新碗,各吃各的互不干扰 |
70
+ | `才是` | 移动 | 整个端走,弃掉原来的,别问有什么用 |
71
+
72
+ ```miu
73
+ (--- 共有:同一碗饭 ---)
74
+ 蹭 我的碗 就是 '小鱼干'~
75
+ 蹭 你的碗 就是 我的碗~ (你我的碗是同一只)
76
+ 我的碗 就是 '空了'~ (我吃完了)
77
+ 扒[=你的碗=]喵~ (你的碗也空了!因为你我的碗是同一只)
78
+
79
+ (--- 均有:各吃各的 ---)
80
+ 蹭 原版 就是 '猫粮'~
81
+ 蹭 复刻 就像 原版~ (复刻是原版的拷贝)
82
+ 原版 就是 '吃完了'~ (原版吃完了)
83
+ 扒[=复刻=]喵~ (复刻还是'猫粮',各吃各的)
84
+
85
+ (--- 专有:连锅端 ---)
86
+ 蹭 一次性 就是 '纸团'~
87
+ 蹭 搬走了 才是 一次性~ (搬走了把纸团端走了)
88
+ (扒[=一次性=]喵~) (坏了喵!一次性无了喵!)
89
+ ```
90
+ 里面的 `扒[=某某=]喵` 是什么喵?看[这里](#计谋喵-函数)喵~
91
+
92
+ ---
93
+
94
+ ## 高仿与抢走喵
95
+
96
+ 有时候不得不打断引用,除了用 `就像` 与 `才是` 重新赋值,还能用更简单的 `高仿` 和 `抢走` 喵~
97
+ ```miu
98
+ 蹭甲~ 甲 就是 32~
99
+ 蹭乙~ 乙 就是 高仿 甲~ (乙成了复制的甲,和 `乙 就像 甲` 一个效果)
100
+ 甲 就是 16~ (甲成了 16,但乙还是 32)
101
+ 高仿抢走高仿甲~ (你还可以写这种没用的废话)
102
+ ```
103
+ > `就像` 和 `才是` 可视为 `就是高仿` 和 `就是抢走` 的简写
104
+
105
+ ## 算术与比较喵
106
+
107
+ ### 算术运算
108
+ 就这五种喵,多了你也算不明白:
109
+
110
+ | 运算符 | 含义 | 示例 |
111
+ | ------ | ------- | -------------------- |
112
+ | `+` | 加/拼接 | `1 + 2`, `'a' + 'b'` |
113
+ | `-` | 减 | `5 - 3` |
114
+ | `*` | 乘 | `3 * 4` |
115
+ | `/` | 除 | `10 / 3` |
116
+
117
+ `+` 可以拼接闲话和纸箱喵~ 其他的只能用在摸数上喵~
118
+
119
+ ### 比较运算
120
+
121
+ | 运算符 | 含义 |
122
+ | ------ | -------- |
123
+ | `==` | 等于 |
124
+ | `!=` | 不等于 |
125
+ | `>` | 大于 |
126
+ | `<` | 小于 |
127
+ | `>=` | 大于等于 |
128
+ | `<=` | 小于等于 |
129
+
130
+ `==` 和 `!=` 可以比较不同类型(结果永远是坏喵),其他比较只能同类喵~
131
+
132
+ ### 分节运算
133
+ 这是神奇的妙妙语法喵~ 逗号和算术运算符的组合称为 `节运算符` 喵~
134
+ ```miu
135
+ 蹭 结果 就是 10+2*3 -, 7 *, 2~
136
+ ```
137
+
138
+ 计算过程:先算 `10+2*3 = 16`,然后 `16 - 7 = 9`,然后 `9 * 2 = 18` 喵~ 即 `((10 + 2 * 3) - 7) * 2`~
139
+
140
+ 特例:`==` 和 `!=` 虽然不是算术符,但也可以参与分节运算喵~
141
+ **铁律:一旦进入比较模式,就不能再回到算术模式喵!**
142
+ ```miu
143
+ 10 + 5 ==, 3 *, 2~ (坏了喵!比较之后不能做算术)
144
+ 10 + 5 -, 3 ==, 2~ (棒棒喵!先算术后比较)
145
+ ```
146
+
147
+ ---
148
+
149
+ ## 逻辑喵
150
+
151
+ 用的是自闭合语法喵~ 这里没有 `&&` `||` 那种分不清谁是谁的丑东西喵~
152
+
153
+ ### 开闭对
154
+
155
+ | 开头 | 闭合词 | 含义 | 等价 |
156
+ | ---- | ------ | ---- | ---- |
157
+ | `和` | `都好` | 与 | AND |
158
+ | `和` | `都坏` | 或非 | NOR |
159
+ | `或` | `不坏` | 或 | OR |
160
+ | `或` | `不好` | 与非 | NAND |
161
+
162
+ **开闭必须配对喵!** `和` 只能配 `都好` 或 `都坏`,`或` 只能配 `不坏` 或 `不好` 喵~ 搞混了我笑你两年半喵~
163
+
164
+ ```miu
165
+ (--- 与 ---)
166
+ a 和 b 都好~ (a && b)
167
+ a 和 b 都坏~ (!a && !b)
168
+
169
+ (--- 或 ---)
170
+ a 或 b 不坏~ (a || b)
171
+ a 或 b 不好~ (!a || !b)
172
+ ```
173
+
174
+ ### 嵌套逻辑
175
+ ```miu
176
+ a 和 b 或 c 不坏 都好~ (等价于:a && (b || c))
177
+ ```
178
+ 套在里面的优先喵~
179
+
180
+ ---
181
+
182
+ ## 想法喵 (代码块)
183
+
184
+ 想法是一个用 `[# #]` 包裹的代码块,最后一个表达式的值就是整个想法的值喵~ 里面是语句喵,不要忘记尾巴~
185
+ ```miu
186
+ 蹭 结果~ 结果 就是 [# 10 + 20~ #]~ (结果是 30)
187
+ ```
188
+
189
+ 想法里可以写很多句喵~
190
+ ```miu
191
+ 蹭 结果 就是 [#
192
+ 蹭 甲 就是 10~
193
+ 蹭 乙 就是 20~
194
+ 甲 + 乙~ (这是最后一句,叼回它的结果喵)
195
+ #]~
196
+ ```
197
+
198
+ **注意喵:不要直接拿走在里面蹭的玩具,会被打死喵~**
199
+ ```miu
200
+ 蹭 结果 就是 [#
201
+ 蹭 丁 就是 30~
202
+ 丁~ (完了喵)
203
+ #]~
204
+ ```
205
+
206
+ ---
207
+
208
+ ## 纸箱喵 (集合)
209
+
210
+ 纸箱就是用 `[= =]` 包裹的数组/字典喵~ 会自动编号,编号从更适合人类的 1 开始喵~
211
+
212
+ ### 搓一个
213
+ 用逗号分隔元素喵~ 可以用声明句式命名,蹭不蹭都一样喵~
214
+ ```miu
215
+ 蹭 玩具~
216
+ 蹭 空纸箱 就是 [==]~
217
+ 蹭 混合纸箱 就是 [=
218
+ '第一个', (匿名,索引 1)
219
+ 名字 就是 '第二个', (名为 '名字',索引 2)
220
+ 玩具, (名为 '玩具',引用 `玩具`,索引 3)
221
+ 高仿 空纸箱, (名为 '空纸箱',浅复制 `空纸箱`,索引 4)
222
+ [= '套娃' =], (匿名,索引 5)
223
+ =]~
224
+ ```
225
+ 高仿一个纸箱就会得到浅复制版本喵~
226
+
227
+ ### 读取里面的东西
228
+ 用 `@` 从纸箱摸东西喵~
229
+ ```miu
230
+ 蹭 袋子 就是 [= '苹果', '橘子', '空气' =]~
231
+ 扒[=袋子@1=]喵~ (苹果)
232
+ 扒[=袋子@2=]喵~ (橘子)
233
+
234
+ (有名字的元素可以用名字找到)
235
+ 蹭 富口袋 就是 [= 蹭 内存条 就是 '小零食' =]~
236
+ 扒[=富口袋@'内存条'=]喵~ (小零食)
237
+
238
+ (嵌套访问)
239
+ 扒[=袋子@1@1=]喵~ (访问嵌套纸箱)
240
+ ```
241
+ 名字记得用引号装着,不然会把外面的同名玩具当名字或编号喵~
242
+
243
+ ### 改变里面的东西
244
+ ```miu
245
+ 袋子@1 就是 '烂苹果'~ (修改已有的)
246
+ 袋子@'新成员' 就是 '神秘玩具'~ (添加新成员)
247
+ ```
248
+
249
+ ### 纸箱拼合
250
+ 可以用 `+` 得到一个包含两个纸箱内容的纸箱喵~ 重名的讲究先来后到喵~
251
+ ```miu
252
+ 蹭 袋子一号 就是 [= 坏苹果就是好喵, 烂橘子就是'烂橘子', '空气' =]~
253
+ 蹭 袋子二号 就是 [= 坏苹果就是坏喵, '空气' =]~
254
+ 蹭 融合袋子 就是 袋子一号 + 袋子二号~ (相当于 [= 坏苹果就是好喵, 烂橘子就是'烂橘子', '空气', '空气' =])
255
+ ```
256
+ 拼出来的新纸箱依然装着原来的引用喵~
257
+
258
+ ---
259
+
260
+ ## 计谋喵 (函数)
261
+
262
+ ### 预谋
263
+ `想要` 开头,想要的贡品装在纸箱 `[= =]` 里,名字在贡品后面,动作放在想法 `[# #]` 里喵~
264
+ ```miu
265
+ (不要贡品的计谋)
266
+ 想要 [==] 打招呼 [#
267
+ 扒[='喵~'=]喵~
268
+ #]~
269
+
270
+ (要一个贡品的计谋)
271
+ 想要 [=n=] 双倍 [#
272
+ 叼回来 n * 2~
273
+ #]~
274
+
275
+ (要很多贡品的计谋)
276
+ 想要 [=甲, 乙=] 相加 [#
277
+ 叼回来 甲 + 乙~
278
+ #]~
279
+ ```
280
+
281
+ ### 施计
282
+ 只要 `扒` 放在纸箱 `[= =]` 里的贡品然后喊出名字就可以释放了喵~ 名在最后喵~
283
+ ```miu
284
+ 扒[=5=]双倍~ (或许得 10)
285
+ 扒[=3, 7=]相加~ (可能得 10)
286
+ 扒[==]打招呼~ (不给贡品)
287
+ ```
288
+
289
+ 参数传递默认是引用喵~ 想传副本就用 `高仿`,想传完就没用就用 `抢走` 喵~
290
+ ```miu
291
+ 扒[=我的碗=]计谋~ (引用传递,计谋能瞎改你的碗)
292
+ 扒[=高仿 我的碗=]计谋~ (复制传递,你的碗安然无恙)
293
+ 扒[=抢走 我的碗=]计谋~ (移动传递,你的碗没了,恭喜喵)
294
+ ```
295
+
296
+ ### 贡品箱
297
+ 既然写了 `[= =]`,就说明它可能真是一个纸箱喵~
298
+ ```miu
299
+ 蹭 盒子 就是 [= '电池', '空气' =]~
300
+ 扒 盒子 喵~ (可以这样传入,相当于 `扒[= '电池', '空气' =]喵~`)
301
+ ```
302
+ 预谋时不可以这样写,会摸不着头脑喵~
303
+
304
+ ### 返回值
305
+ 用 `叼回来` 把东西叼回来喵~
306
+ ```miu
307
+ 想要 [=x=] 绝对值 [#
308
+ [# 叼回来 0 - x~ #] 好不好? x < 0
309
+ 不然 [# 叼回来 x~ #]~
310
+ #]~
311
+ ```
312
+
313
+ 都到这一步了,先赐给你一些[预置计谋](#内置计谋喵-标准库)喵~
314
+
315
+ ---
316
+
317
+ ## 做决定喵 (条件表达式)
318
+
319
+ ### 好不好?
320
+ 先说想法 `[# #]`,然后用 `好不好?` 提问再决定做不做喵~
321
+ ```miu
322
+ [# 扒[='大喵!'=]喵~ #] 好不好? x > 5~
323
+ ```
324
+
325
+ ### 不然 (else)
326
+ ```miu
327
+ [# 扒[='大了'=]喵~ #] 好不好? x > 5
328
+ 不然 [# 扒[='小了'=]喵~ #]~
329
+ ```
330
+
331
+ ### 链式判断
332
+ `不然` 后面可以接另一个 `好不好?` 喵~ 整条链算一句,中间可以不用尾巴喵~
333
+ ```miu
334
+ [# 扒[='大了'=]喵~ #] 好不好? x > 10
335
+ 不然 [# 扒[='刚刚好'=]喵~ #] 好不好? x > 5
336
+ 不然 [# 扒[='小了'=]喵~ #]~
337
+ ```
338
+
339
+ ### 想法的值
340
+ 可以得到 `[# #]` 中叼回的东西喵~
341
+ ```miu
342
+ 蹭 级别 就是 [# '厉害'~ #] 好不好? 分数 > 90
343
+ 不然 [# '还行'~ #] 好不好? 分数 > 60
344
+ 不然 [# '重考'~ #]~
345
+ ```
346
+
347
+ ---
348
+
349
+ ## 玩耍喵 (循环表达式)
350
+
351
+ ### 普通玩耍
352
+ `玩耍` 开头,后面跟想法,无条件喵~ `累了` 就不玩了喵~
353
+ ```miu
354
+ 蹭 i 就是 0~
355
+ 玩耍 [#
356
+ i 就是 i + 1~
357
+ 扒[=i=]喵~
358
+ [# 累了~ #] 好不好? i >= 5~
359
+ #]~
360
+ ```
361
+
362
+ ### 偷袭:下一圈或返回值
363
+ 用 `偷袭` 可以把东西带走,空扑就再来一次喵~
364
+ ```miu
365
+ 蹭 结果 就是 玩耍 [#
366
+ 蹭 n 就是 扒[=1, 10=]添乱~
367
+ [# 累了~ #] 好不好? n == 1~ (不玩了,不带走东西)
368
+ [# 偷袭~ #] 好不好? n != 7~ (还要玩,跳到下一圈)
369
+ 偷袭 高仿n~ (不玩了,取走目标值)
370
+ #]~
371
+ 扒[="偷到了: ", 结果=]喵~ (结果是 7 或 空碗)
372
+ ```
373
+
374
+ ---
375
+
376
+ ## 内置计谋喵 (标准库)
377
+
378
+ 不用声明,直接 `扒` 就能用喵~ 伸手党狂喜喵~
379
+
380
+ ### 输入输出
381
+
382
+ | 名称 | 用法 | 作用 |
383
+ | ------ | --------------------- | --------------- |
384
+ | `喵` | `扒[=东西=]喵~` | 打印东西喵~ |
385
+ | `祈求` | `扒[='提示词'=]祈求~` | 读取输入喵~ |
386
+ | `打盹` | `扒[=秒数=]打盹~` | 休眠指定秒数喵~ |
387
+
388
+ ### 类型转换
389
+
390
+ | 名称 | 用法 | 作用 |
391
+ | -------- | -------------------- | ---------------------- |
392
+ | `变摸数` | `扒[='233'=]变摸数~` | 闲话变摸数,失败得空碗 |
393
+ | `喵译` | `扒[=256=]喵译~` | 任何东西变闲话 |
394
+ | `嗅嗅` | `扒[=x=]嗅嗅~` | 得到任何实体的类型名 |
395
+
396
+ ### 逻辑
397
+
398
+ | 名称 | 用法 | 作用 |
399
+ | ---------- | ------------------- | ---------------- |
400
+ | `才怪` | `扒[=好喵=]才怪~` | 取反,好喵变坏喵 |
401
+ | `理直气壮` | `扒[=-4=]理直气壮~` | 取绝对值 |
402
+ | `差不多` | `扒[=3.14=]差不多~` | 四舍五入 |
403
+
404
+ ### 数学
405
+
406
+ | 名称 | 用法 | 作用 |
407
+ | -------- | ---------------------- | -------- |
408
+ | `抢大的` | `扒[=3, 8, 7=]抢大的~` | 取最大值 |
409
+ | `吃剩的` | `扒[=3, 8, 7=]吃剩的~` | 取最小值 |
410
+ | `摸余` | `扒[=10, 3=]摸余~` | 取余数 |
411
+ | `添乱` | `扒[=1, 10=]添乱~` | 随机整数 |
412
+
413
+ ### 纸箱与闲话
414
+
415
+ | 名称 | 用法 | 作用 |
416
+ | ---------- | ------------------------ | ------------------ |
417
+ | `找尾巴` | `扒[='abc'=]找尾巴~` | 取闲话或纸箱的长度 |
418
+ | `喵语连珠` | `扒[='a','b'=]喵语连珠~` | 拼接闲话 |
419
+
420
+ ### 花里胡哨
421
+
422
+ | 名称 | 用法 | 作用 |
423
+ | ---------- | ----------------------- | ---------------- |
424
+ | `磨爪` | `扒[==]磨爪~` | 输出磨爪爪字符画 |
425
+ | `猫咪艺术` | `扒[='开心'=]猫咪艺术~` | 输出猫咪表情 |
426
+ | `呼噜` | `扒[=3=]呼噜~` | 咕噜咕噜 |
427
+ | `哈气` | `扒[='错哪了'=]哈气~` | 哈! |
428
+
429
+ ---
430
+
431
+ ## 特殊玩法喵
432
+
433
+ ### 兼容非 ASCII 字符
434
+ 可以偷懒不改输入法喵~
435
+ ```miu
436
+ (这些都能识别喵~)
437
+ 10~ (全宽数字)
438
+ ‘你好」~ (弯引号/直角引号 -> 直引号)
439
+ 【= 1 =】~ (方头括号 -> 方括号)
440
+ ```
441
+ 但闲话和悄悄话的内容不会被转换喵~
442
+
443
+ ### 花括号标识符 `{名字}`
444
+ 有花圈套住,就可以用各种字词给玩具命名喵~
445
+ ```miu
446
+ 蹭 蹭~ (坏了喵)
447
+ 蹭{蹭}~ (获得名叫 `蹭` 的玩具喵)
448
+ ```
449
+
450
+ ### 没有圆括号怎么办
451
+ 如果你怀念 `(a + b) * c` 这种写法,可以用 `[# #]` 装样子喵~
452
+ ```miu
453
+ [# a + b~ #] * c~ (记得写里面的尾巴喵)
454
+ ```
455
+
456
+ ### 信号穿透
457
+ `叼回来`、`累了` 和 `偷袭` 不能当成值,但可以利用 `[# #]` 让它们被叼到更外层,会被适合的想法层拦下来喵~
458
+ ```miu
459
+ 蹭 i 就是 0~
460
+ 玩耍 [#
461
+ i 就是 i + 1~
462
+ 玩耍 [#
463
+ 蹭 n 就是 扒[=1, 10=]添乱~
464
+ [# 偷袭[# 累了~ #]~ #] 好不好? n == i~ (带值 `偷袭` 打断内层,`累了` 抛到外层 ,外层被打断)
465
+ #]~
466
+ #]~
467
+ ```
468
+ 不可以直接写 `偷袭 累了~`,一定要用 `[# #]` 装着喵~
469
+
470
+ ---
471
+
472
+ ## 简单示例喵
473
+
474
+ 给你看个像样的程序喵~ 虽然以你的水平可能看不懂喵~
475
+
476
+ ```miu
477
+ (--- 递归求阶乘 ---)
478
+ 想要 [=n=] 阶乘 [#
479
+ [# 叼回来 1~ #] 好不好? n <= 1
480
+ 不然 [# 叼回来 n * 扒[=n - 1=]阶乘~ #]~
481
+ #]~
482
+
483
+ 扒[="5的阶乘是: ", 扒[=5=]阶乘=]喵~
484
+
485
+ (--- 猜数字游戏 ---)
486
+ 想要 [==] 猜数字 [#
487
+ 蹭 答案~ 答案 就是 扒[=1, 100=]添乱~
488
+ 扒[="我心里想了个1到100的数字喵~"=]喵~
489
+
490
+ 玩耍 [#
491
+ 蹭 输入 就是 扒[='猜吧: '=]祈求~
492
+ 蹭 猜测 就是 扒[=输入=]变摸数~
493
+
494
+ [# 扒[="请输入数字喵:"=]喵~ #] 好不好? 猜测 == 空碗
495
+ 不然 [#
496
+ [# 扒[="小了喵~"=]喵~ #] 好不好? 猜测 < 答案
497
+ 不然 [# 扒[="大了喵~"=]喵~ #] 好不好? 猜测 > 答案
498
+ 不然 [#
499
+ 扒[="猜对了!你是天才猫咪喵~"=]喵~
500
+ 累了~
501
+ #]~
502
+ #]~
503
+ #]~
504
+ #]~
505
+
506
+ 扒[==]猜数字~
507
+ ```
508
+
509
+ ---
510
+
511
+ 好了喵,该教的都教了喵~ 学不会就睡觉喵~
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License Copyright (c) 2026 TNPC
2
+
3
+ Permission is hereby granted, free of
4
+ charge, to any person obtaining a copy of this software and associated
5
+ documentation files (the "Software"), to deal in the Software without
6
+ restriction, including without limitation the rights to use, copy, modify, merge,
7
+ publish, distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to the
9
+ following conditions:
10
+
11
+ The above copyright notice and this permission notice
12
+ (including the next paragraph) shall be included in all copies or substantial
13
+ portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
16
+ ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO
18
+ EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
19
+ OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.