---
name: tsl-syntax-reference
description: "当用户需要编写、修改、审查或解释 TSL/TSF、TS-SQL、Tinysoft/天软脚本或公式，涉及 `.tsl` / `.tsf` 文件，排查 invalid statement 等语法错误，或核对语言与运行时结构规则时使用；包括你自认为已经确定的写法。不用于查询 API 签名或天软数据字典字段，也不用于判断解释器、平台或运行方式。"
---

# TSL Syntax Reference

## 唯一检索入口

输出任何 TSL/TSF 代码、或修改任何 `.tsl` / `.tsf` 文件前，先用随附的
`scripts/lookup.py` 取回事实。记忆里的 TSL 写法不构成依据，赋值符号、声明位置和
下标起点这类"看起来确定"的规则同样要取回。`<this-skill-dir>` 指本 `SKILL.md`
所在目录。

```bash
python <this-skill-dir>/scripts/lookup.py --help
```

构造任一命令前先运行上面的 `--help`。帮助输出独占动作、mode、参数范围、查询词、
弱命中、概念地图、前置章节、Owner Section、结构校验和退出码的命令契约；不要在本
文件中推断或复用旧参数。检索必须完成 `--query` 到 `--section` 两步，只有
`--section` 返回的正文可作为语法事实。`syntax-01-002` 是派生速查；命中其中规则后，
按紧邻规则的 `Owner Section` 取回真正拥有该事实的专题 Section。

## 代码块必须标注来源

给出的每个 TSL/TSF 代码块，紧随其后写一行来源标注，列出所依据的全部 Section ID：

```txt
来源：syntax-05-004（可直接照写示例），syntax-02-002
```

Section ID 抄自 `--section` 输出首部的 `Section ID:` 行。多个要素合成一个代码块时，
逐个列出，逗号分隔。身份按取回的正文分两种写法：

- 该 Section ID 提供了照写的代码围栏：在 ID 后用括号写出紧邻该围栏的
  `代码块身份：` 值。
- 该 Section ID 只提供散文规则、正文里没有代码围栏（如
  `syntax-02-002`）：只写 ID，不加括号。规则段落没有身份行，
  这不是缺口。

写不出某个要素的 Section ID，说明该要素还没有取回：先补齐检索，再给代码。

不含代码块的语法解释同样要在相关结论后列出依据的 Section ID；多个结论来自不同
章节时逐项对应，不用一个 Section ID 为整段未取回的结论背书。

## 代码块身份

`--section` 正文里每个代码围栏前有一行 `代码块身份：`。身份决定这段代码能否进入
你的输出：

| 身份                  | 允许的用法                                                            |
| --------------------- | --------------------------------------------------------------------- |
| `可直接照写示例`      | 作为源码外形照写，替换业务内容后使用；依赖的 API 仍按事实边界另行核对 |
| `反例 / 不可照写`     | 只用于说明错误边界，不得作为实现出现在输出里                          |
| `输出片段`            | 只用于说明运行结果，不得当作源码                                      |
| `配置片段 / 概念骨架` | 只用于表达结构或配置意图，不得当作可运行代码                          |
| `仅服务端可执行示例`  | 只在对应服务端环境成立，不得当作通用本地示例                          |

`--query` 的候选摘要不含身份行，身份只能从 `--section` 正文读取。这是必须走完第
二步的另一个原因。

同一个 section 常同时含多种身份（如示例代码后紧跟 `输出片段`）。身份按围栏逐个
对应，不按 section 整体判断；一个代码块的依据跨越多种身份时，按最严格的那条处理
——只要含 `反例 / 不可照写`，就不能照写。

## 缺口时停止

**🔴 CHECKPOINT · 🛑 STOP：确认以下缺口后停止生成，不输出含缺口要素的代码。**

出现下列任一情形，即为事实缺口：

**检索缺口** —— `--query` 改进查询词后仍无匹配；lookup 返回非零状态；`--section`
取回的正文没有支持当前结论；`--section` 正文里目标围栏前没有 `代码块身份：` 行。

**范围缺口** —— 请求需要 API 签名、数据字典、解释器或平台可用性、运行结果，或其
它不属于本 Skill 语法事实的专属知识。

缺口时的输出由三部分组成，按此顺序：

1. 已取回并可用的事实，只列 Section ID，不复述正文。
2. 缺失的具体要素，以及为它试过的查询词。
3. 需要补齐的具体语法事实，或明确说明该请求超出本 Skill 的范围。

不输出包含缺口要素的 TSL 代码，注释掉的、标 TODO 的和「仅供参考」的版本同样不
输出。一段代码里只要有一个要素没取回，整段都不给出，不交付「其余部分已验证」的
半成品。

不得改为下列任一做法：

- 手工浏览或顺序通读 `references/` 页面。
- 凭记忆、相似语言或猜测产生新的 TSL 写法。
- 用候选摘要或概念地图代替章节正文。
- 给出未标注来源的代码块。

## 事实边界

本 Skill 只拥有 TSL/TSF 的语言语法、文件模型、表达式、控制流、对象、运行时语言
结构和 TS-SQL 外形。混合请求先逐项拆分，只回答其中的语法部分。

API 名称、签名、参数、返回值、平台 scope、解释器可用性、运行结果和金融取数事实不
属于本 Skill 的语法事实。准备代码时，先区分语言关键字、用户定义符号和未验证调用；
对未验证调用不声称签名、行为、可用性或输出。代码交付只要依赖这些未验证事实，就按
「缺口时停止」处理，不能凭参考页示例中的调用名称补齐。

纯语法说明可以使用明确标为占位的用户定义调用来展示调用位置，而不必为该占位符查
API；但不得声称该占位调用的 API 行为或输出，也不得把真实 builtin/API 当成无需核对
的占位符。解释一旦包含真实调用的签名、可用性、返回值或输出，就属于本 Skill 未覆盖
的事实，按「缺口时停止」处理。

## 执行边界

本 Skill 只检索和解释语法事实，不执行 TSL 代码，也不判断解释器、平台、运行方式或
项目配置。未经执行的代码只能描述为“语法已取回、运行结果未验证”；不得把参考页中的
输出片段当成当前代码的实跑结果。

## 维护校验

维护本 Skill 的参考页、词表或检索器时，只使用随附 `scripts/lookup.py --check` 做结构
校验；命令参数和校验范围以随附脚本的 `--help` 为准。
