# Core Model 文档类型:语法主线 是否可直接用于生成代码:是 是否含已验证可执行示例:是 是否含已验证反例:是 遇到不确定时跳转到:[06_functions_and_calls.md](06_functions_and_calls.md)、[10_units_and_scope.md](10_units_and_scope.md)、[09_objects_and_classes.md](09_objects_and_classes.md) 手册位置:第 3 篇,共 32 篇。上一篇:[02_quickstart.md](02_quickstart.md)。下一篇:[04_values_and_literals.md](04_values_and_literals.md)。 这一篇说明 TSL 的文件模型判断规则:顶层主体是什么、辅助语句是什么、为什么很多错误其实是“文件模型选错了”。 ## 这一篇解决什么问题 回答“当前文件到底属于哪一种顶层写法,以及哪些语句只是辅助组织,不应该被误当成主体声明”。 如果问题已经变成赋值、命名参数、类外形、`unit` 骨架或下标规则这类通用硬规则,统一回 [02_quickstart.md](02_quickstart.md) 的“语言核心事实速查”;这一页只处理文件模型判断。 ## 必须记住的规则 - 比起扩展名,更可靠的判断方式是看顶层内容。 - 顶层主体在当前手册里优先按四种外形理解:顶层松散语句、`function / procedure`、`type Name = class`、`unit`。 - `uses` 可以出现在顶层,但这里只把它当成辅助语句,不把它当成主体声明;函数体和类定义体里的位置限制见 [10_units_and_scope.md](10_units_and_scope.md)。 - 裸 `class Name` 不作为类定义写法使用。 - 如果一个文件已经采用“顶层 `function / procedure`”模型,就不要再混入松散语句。 - `unit` 默认先按完整形态理解;它也可以省略 `interface` / `implementation` 写成简写形态,见 [10_units_and_scope.md](10_units_and_scope.md)。 ## 已验证语法 顶层主体的最小形态: 代码块身份:已验证可执行示例 ```tsl function Demo(); begin return 1; end; ``` 代码块身份:已验证可执行示例 ```tsl procedure DemoProc(); begin end; ``` 代码块身份:已验证可执行示例 ```tsl type DemoType = class end; ``` 代码块身份:已验证可执行示例 ```tsl unit DemoUnit; interface function Ping(); implementation function Ping(); begin return 1; end; end. ``` 已验证失败的形态: 代码块身份:反例 / 不可照写 ```text class DemoType end; ``` 上面这种裸 `class` 顶层写法会编译失败。 ## 最小可编译示例 如果当前任务只是“先让 session 判断当前文件属于哪一种模型”,先记住下面这组归类: - 顶层语句骨架:直接写松散语句。 - 顶层函数 / 过程骨架:写 `function ... begin ... end;` 或 `procedure ... begin ... end;`。 - 顶层类骨架:写 `type Name = class ... end;`。 - 顶层单元骨架:默认先写 `unit ... interface ... implementation ... end.`;简写形态见 [10_units_and_scope.md](10_units_and_scope.md)。 代码块身份:已验证可执行示例 ```tsl a := 1; ``` ## 常见误写 - 误以为扩展名本身就完全决定能否写函数、类或 `unit`。 - 把 `uses` 当成主体声明,而不是辅助组织语句。 - 把 `function / procedure` 定义体和松散语句混写。 ## 跳转指引 - 先看整体读法:见 [01_introduction.md](01_introduction.md) - 写最短骨架:见 [02_quickstart.md](02_quickstart.md) - 写函数 / 过程:见 [06_functions_and_calls.md](06_functions_and_calls.md) - 写 unit / uses:见 [10_units_and_scope.md](10_units_and_scope.md) - 写类:见 [09_objects_and_classes.md](09_objects_and_classes.md)