🐛 fix(tsl-syntax-reference): close verified syntax gaps
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
|
||||
<!-- section-id: syntax-02-001 -->
|
||||
|
||||
回答“目标文件到底是 `.tsl` 脚本还是 `.tsf` 可复用声明文件,以及 `.tsl` 里的哪些内容会顺序执行、哪些内容只是后置声明”。
|
||||
回答“目标文件到底是 `.tsl` 脚本还是 `.tsf` 可复用声明文件,`.tsl` 里的哪些内容会顺序执行、哪些内容只是后置声明,以及何时使用完整 `program ... begin ... end.` 入口形态”。
|
||||
|
||||
本页是文件模型的唯一事实源:后缀判断、语句区 / 声明区顺序、`.tsf` 顶层声明形态和文件名约束都在这里收口。函数体、类体、`unit` 内部的语法外形由各自专题页拥有。
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
- `uses` 可以出现在顶层,但这里只把它当成辅助语句,不把它当成主体声明;函数体和类定义体里的位置限制见 [09_units_and_scope.md](09_units_and_scope.md)。
|
||||
- 裸 `class Name` 不作为类定义写法使用。
|
||||
- 在 `.tsl` 中,不要在声明区之后继续追加脚本语句。
|
||||
- `program Name; ... begin ... end.` 是完整程序入口形态;它可以在主 `begin` 前声明子函数,但不是普通 `.tsl` 脚本的默认起手式。
|
||||
- `unit` 默认先按完整形态理解;它也可以省略 `interface` / `implementation` 写成简写形态,见 [09_units_and_scope.md](09_units_and_scope.md)。
|
||||
- 不要把 `.tsl` 写成只有顶层函数的模块;如果用户要通用可复用函数,优先写 `.tsf`。
|
||||
- 不要把 `.tsf` 写成会直接执行脚本语句的入口;如果用户要顺序执行入口,优先写 `.tsl`。
|
||||
@@ -184,6 +185,64 @@ end.
|
||||
1
|
||||
```
|
||||
|
||||
### 完整 `program` 入口形态
|
||||
|
||||
<!-- section-id: syntax-02-009 -->
|
||||
|
||||
<!-- tags: PROGRAM 入口, 完整程序, 独立脚本入口, CGI 入口, 主 begin 块 -->
|
||||
|
||||
普通 `.tsl` 默认仍使用前面的松散语句区模型。只有用户明确要求完整程序入口、独立脚本 / CGI 兼容形态,或现有代码已经使用 `program` 时,才写成下面的结构:
|
||||
|
||||
代码块身份:可直接照写示例
|
||||
|
||||
```tsl
|
||||
program DemoProgram;
|
||||
|
||||
function DoubleValue(value);
|
||||
begin
|
||||
return value * 2;
|
||||
end;
|
||||
|
||||
begin
|
||||
echo "result:", DoubleValue(3);
|
||||
end.
|
||||
```
|
||||
|
||||
代码块身份:输出片段
|
||||
|
||||
```text
|
||||
result:6
|
||||
```
|
||||
|
||||
说明:
|
||||
|
||||
- `program Name;` 位于文件开头
|
||||
- 子函数声明位于主 `begin ... end.` 之前
|
||||
- 完整程序以 `end.` 结束,而普通函数声明仍以 `end;` 结束
|
||||
- 不要把这套结构与“松散语句区在前、声明区在后”的默认 `.tsl` 模型混写
|
||||
|
||||
### `echo` 输出语句
|
||||
|
||||
<!-- section-id: syntax-02-010 -->
|
||||
|
||||
<!-- tags: echo 输出, 打印表达式, 输出多个值, 逗号输出, 控制台输出 -->
|
||||
|
||||
`echo expr1, expr2, ...;` 会按从左到右的顺序输出表达式列表。简单值直接输出;数组、对象等复杂值可能只显示类型摘要。具体输出目标由宿主环境决定,可能是控制台、Web 响应或客户端输出窗口。
|
||||
|
||||
代码块身份:可直接照写示例
|
||||
|
||||
```tsl
|
||||
echo "A=", 1, ",B=", 2;
|
||||
```
|
||||
|
||||
代码块身份:输出片段
|
||||
|
||||
```text
|
||||
A=1,B=2
|
||||
```
|
||||
|
||||
不要把 `echo` 的宿主输出位置或复杂对象的展示格式当成跨环境固定结果。
|
||||
|
||||
### 文件模型反例
|
||||
|
||||
<!-- section-id: syntax-02-006 -->
|
||||
@@ -262,5 +321,6 @@ function:__main__:line 9: invalid statement
|
||||
|
||||
- 把 `.tsl` 当成 `.tsf` 来写,只给一个顶层函数,不写任何会执行的脚本语句。
|
||||
- 把 `.tsf` 当成 `.tsl` 来写,在模块文件里直接堆顺序执行的脚本语句。
|
||||
- 把 `program ... begin ... end.` 与松散 `.tsl` 语句区 / 后置声明区混成一套文件结构。
|
||||
- 把 `uses` 当成主体声明,而不是辅助组织语句。
|
||||
- `.tsf` 文件名与顶层声明不一致:`UserAccount.tsf` 中写 `function GetUser` 或 `type Customer = class` 或 `unit CustomerModule` 会导致加载失败或检索混乱。
|
||||
|
||||
Reference in New Issue
Block a user