🐛 fix(tsl_syntax): repair lookup engine and reconcile reference facts
lookup.py: exempt code-anchored ASCII identifiers from the mixed zh/en gate so exact hits are no longer dropped; dedup parent/child sections in results; validate write-prelude anchors in --check. references: correct interpreter-verified facts (case-as-expression, control-flow semicolons, __line__/__stack_frame, tslObjects order, destroy timing, ErrDefine, truncated outputs), fix headings, scope qualifiers and reversed quotes; strip dead preamble metadata from all 24 pages. packaging: exclude __pycache__/*.pyc from playbook and bundle copies; update build test file-count assertion to match. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,10 +1,5 @@
|
||||
# TSL 函数与调用
|
||||
|
||||
文档类型:语法主线
|
||||
是否可直接用于生成代码:是
|
||||
是否含可直接照写示例:是
|
||||
是否含不可照写反例:是
|
||||
|
||||
这一篇只负责 `function` / `procedure` 的定义、调用、参数传递和值返回。跨 `unit` 声明边界、外部系统交互和业务函数库只在本页保留最小边界。
|
||||
|
||||
## 本篇职责
|
||||
@@ -27,13 +22,13 @@
|
||||
## 核心规则
|
||||
|
||||
- 最稳妥的函数骨架仍然是 `function Name(...); begin ... end;`。
|
||||
- 用户提示词里的”函数”默认对应 `function`,不要自动改写成 `procedure`。
|
||||
- 用户提示词里的“函数”默认对应 `function`,不要自动改写成 `procedure`。
|
||||
- `procedure Name(...); begin ... end;` 只在用户明确要求 `procedure` / 过程时生成;不要因为没有返回值就自动改用 `procedure`。
|
||||
- 在 `.tsl` 文件模型层,脚本语句后可以接函数声明;语句区在前顺序执行,声明区在后提供函数/过程定义。见 [02_core_model.md](02_core_model.md)。
|
||||
- 在 `.tsf` 文件模型层,顶层 `function` / `procedure` 是模块/函数扩展声明;部署到解释器 `funcext` 后可被脚本直接调用。
|
||||
- 函数头后默认保留分号;不要为了简写主动省略。
|
||||
- 函数体内部的普通语句照常用分号结尾;顶层函数/过程声明的 `end` 后必须加分号(写成 `end;`)。
|
||||
- 函数体内的控制流块(`if`/`while`/`for` 等)的 `end` 不加分号;控制流分号规则见 [07_control_flow.md](07_control_flow.md)。
|
||||
- 函数体内的控制流块(`if`/`while`/`for` 等)的 `end` 后加不加分号都合法;唯一例外是 `if` 的 `then` 块 `end` 与 `else` 之间不能加分号。控制流分号规则见 [07_control_flow.md](07_control_flow.md)。
|
||||
- 一个函数定义体里可以同时出现主函数和子函数。
|
||||
- 函数支持参数类型注解和返回值类型注解。
|
||||
- 不带类型注解时,多个参数用逗号分隔。
|
||||
@@ -154,7 +149,7 @@ end;
|
||||
2
|
||||
```
|
||||
|
||||
### 签名增强
|
||||
### 签名增强:参数类型与返回值类型注解
|
||||
|
||||
带参数类型和返回值类型:
|
||||
|
||||
@@ -356,7 +351,7 @@ end;
|
||||
99
|
||||
```
|
||||
|
||||
### 调用增强
|
||||
### 调用增强:命名参数与混用规则
|
||||
|
||||
命名参数调用:
|
||||
|
||||
@@ -977,13 +972,12 @@ writeLn(intToStr(value: 200));
|
||||
代码块身份:反例 / 不可照写
|
||||
|
||||
```text
|
||||
writeLn(Pack(a: 1, 2, c: 3));
|
||||
|
||||
function Pack(a, b, c);
|
||||
begin
|
||||
return a * 100 + b * 10 + c;
|
||||
end;
|
||||
begin
|
||||
writeLn(Pack(a: 1, 2, c: 3));
|
||||
end.
|
||||
```
|
||||
|
||||
不要在同一次调用里“先进入命名参数模式,再退回位置参数”。这类写法会直接编译失败,错误信息包含 `paramname: not found`。
|
||||
|
||||
Reference in New Issue
Block a user