📝 docs(tsl): align agent-facing guidance

This commit is contained in:
csh
2026-05-28 19:12:34 +08:00
parent c48354e0cb
commit d8eb418277
63 changed files with 1921 additions and 371 deletions
+58 -23
View File
@@ -14,9 +14,18 @@
回答“基本类型怎么写、数组和字符串怎么索引、哪些值规则属于语言级事实”。
## Agent 值写法判断流程
1. 普通值优先从整数、实数、普通字符串、布尔和 `array(...)` 起手。
2. 字符串默认用普通字符串;`L""` / `U""` 只在编码或宽串场景,并且必须按本页已验证边界写。
3. 看到 `array(...)` 时,先判断要顺序数组还是字符串键表:顺序数组用位置元素,字符串键表用 `"Key": value`
4. 写下标前先判断对象类别:顺序数组和二进制缓冲区下标从 `0` 开始,字符串下标从 `1` 开始。
5. 写字符串区间前先记住 `s[start:end]``end` 会被包含;不要按半开区间推断。
6. 没有已验证代码块时不要发明值写法;尤其不要从 JSON、JavaScript、Pascal 或 C 字符串规则直接迁移。
## 必须记住的规则
- 最先掌握的几类值是:整数、实数、字符串、布尔和 `array`
- 最先掌握的几类值是:整数、实数、普通字符串、布尔和 `array(...)`
- 普通字符串既可以用双引号,也可以用单引号。
- 同类引号本身可以通过连续写两个同类引号放进字符串里。
- `\\``\"``\n` 这类基础转义已验证可用。
@@ -55,13 +64,26 @@ name := "ABC";
flag1 := true;
flag2 := false;
items := array(1, 2, 3);
WriteLn(count);
WriteLn(price);
WriteLn(name);
WriteLn(flag1);
WriteLn(flag2);
WriteLn(items[1]);
```
其中已经验证:
代码块身份:已验证输出片段
- `true` 可以直接写成布尔值。
- `false` 可以直接写成布尔值。
- 运行输出里,`true` / `false` 分别表现为 `1` / `0`
```text
1
12.5
ABC
1
0
2
```
代码块说明:`true` / `false` 可以直接写成布尔值;运行输出里分别表现为 `1` / `0`
普通字符串字面量:
@@ -404,25 +426,29 @@ WriteLn("A"#13#10"B");
代码块身份:已验证可执行示例
```tsl
arr := array(10, 20, 30);
hash := array("Code": "0001", "Price": 12.3);
items := array(10, 20, 30);
row := array("Code": "0001", "Price": 12.3);
s := "ABC";
WriteLn("ARR0=", arr[0]);
WriteLn("ARR1=", arr[1]);
WriteLn("HASH=", hash["Code"]);
WriteLn("STR1=", s[1]);
WriteLn("STR2=", s[2]);
WriteLn("STR3=", s[3]);
WriteLn(items[0]);
WriteLn(items[1]);
WriteLn(row["Code"]);
WriteLn(s[1]);
WriteLn(s[2]);
WriteLn(s[3]);
```
已验证运行结果对应关系:
代码块身份:已验证输出片段
- `arr[0] = 10`
- `arr[1] = 20`
- `hash["Code"] = "0001"`
- `s[1] = "A"`
- `s[2] = "B"`
- `s[3] = "C"`
```text
10
20
0001
A
B
C
```
代码块说明:顺序数组 `items``0` 开始,字符串键表 `row` 用字符串键访问,字符串 `s``1` 开始。
二进制缓冲区:
@@ -456,10 +482,13 @@ s := "ABCDE";
WriteLn(s[2:4]);
```
已验证运行结果:
代码块身份:已验证输出片段
- 输出 `BCD`
- 这说明字符串区间 `2:4` 会包含结束位 `4`
```text
BCD
```
代码块说明:字符串区间 `2:4` 会包含结束位 `4`
字符串替换子串:
@@ -540,6 +569,12 @@ WriteLn(s[0]);
上面这类写法在运行时会报字符串下标越界。
代码块身份:已验证输出片段
```text
String index out of bounds
```
代码块身份:反例 / 不可照写
```text