|
| 1 | +#* |
| 2 | + * Value是Bang语言中的重要结构, 它是一个枚举, 可用值为一个Var或者一个DExp |
| 3 | + * DExp的介绍请移步至dexp.mdtlbl |
| 4 | + * Var是一个基本值单元, 它可以是一个变量, 一个字符串, 一个数字, 一个由@紧贴开头的变量 |
| 5 | + * 它有几个匹配分支: |
| 6 | + * 普通标识符: 由一个下划线或者XID_Start开头, 0个及以上XID_Continue紧随其后 |
| 7 | + * 使用XID可以完成如中文标识符 日文标识符等 |
| 8 | + * 对象标识符: 在普通标识符的前方先匹配一个@, 同时XID_Continue部分可以匹配`-`符号 |
| 9 | + * 这是为了适应原游戏中的@开头的很多值如物品 环境变量 选项 枚举 |
| 10 | + * 短横线(`-`)符号是为了适应部分格式如`@abc-def`的值 |
| 11 | + * 原始标识符: 这种标识符的存在是为了适应mdt中奇葩的标识符界定的 |
| 12 | + * mdt中标识符是连续的一段非空字符, 且不匹配内置值、字面量等即为标识符 |
| 13 | + * 所以使用原始标识符来适应这种奇葩, 格式为单引号包裹的一段连续非空字符 |
| 14 | + * 例如`'@abc%d*ef$ghi'` |
| 15 | + * 数字: 普通数字, 除开头部分(小数部分开头也算)可以用下划线组成, 它会被忽略 |
| 16 | + * 格式为: |
| 17 | + * 整数(`123`), 浮点数(`123.456`), 二进制数(`0b1011`), 十六进制数(`0x1f`), |
| 18 | + * 负整数(`-123`), 负浮点数(`-123.456`), 负二进制数(`0b-1011`), 负十六进制数(`0x-1f`) |
| 19 | + * 与mdt中数字格式基本相符 |
| 20 | + * 字符串: 由一个双引号起始, 一个双引号终止, 中间为0至若干个非双引号字符组成 |
| 21 | + * 如果其中包含换行, 将会被替换为一个字面量反斜杠接一个ASCII字符n |
| 22 | + * |
| 23 | + * 还有一种特殊数字, LiteralUInt, 这种数字会被真正编译时识别使用. |
| 24 | + * 例如switch-case中, 必须是一个无符号非负不越界整数 |
| 25 | + * 这种数字并不被包含在Value中 |
| 26 | + *# |
| 27 | + |
| 28 | +set a 2; |
| 29 | +set @b 3; |
| 30 | +set @c-d 4; |
| 31 | +set 值 5; |
| 32 | +set _y 6; |
| 33 | +set 'ab%$&!@' 7; |
| 34 | +set str "8"; |
| 35 | +set str_1 "9 |
| 36 | +10"; # 跨行字符串 |
| 37 | +set float 100_010.223_959; |
| 38 | +set n_float -100_010.223_959; |
| 39 | +set int 123_456; |
| 40 | +set n_int -123_456; |
| 41 | +set bin 0b1001_0010; |
| 42 | +set n_bin 0b-1001_0010; |
0 commit comments