# TSL 基础语法完整版 > 本文档是 `$tsl-guide` 的子文档,聚焦基础语法。代码风格与命名规范请见 `docs/tsl/code_style.md` 与 `docs/tsl/naming.md`。 ## 目录 - [语言元素与注释](#语言元素与注释) - [变量与常量](#变量与常量) - [数据类型与字面量](#数据类型与字面量) - [数组与表数组](#数组与表数组) - [运算符与表达式](#运算符与表达式) - [函数](#函数) - [控制流](#控制流) - [异常处理](#异常处理) - [调试与性能相关语句](#调试与性能相关语句) --- ## 语言元素与注释 ### 标识符与关键字 - 关键字为保留字(完整列表见 `docs/tsl/syntax_book/01_language_basics.md`) - 标识符用于变量、函数、类、unit 等命名 ### 注释 ```tsl // 行注释 { 块注释 } /* 另一种块注释 */ ``` ### 编译选项(语法级) ```tsl {$Explicit+} // 要求变量先声明再使用 {$Explicit-} // 关闭显式声明 {$VarByRef-} // 默认参数按值传递(可用 in/var/out 覆盖) ``` --- ## 变量与常量 ### 赋值 ```tsl a := 1; b := 2.5; s := "hello"; ``` ### 常量 ```tsl const kPi = 3.14159; const kMaxRetry = 3; ``` ### 显式变量声明(配合 `{$Explicit+}`) ```tsl {$Explicit+} var a, b; // 多变量声明 var c := 10; // 声明并初始化 var d: integer; // 类型可写可省(类型信息不做强校验) ``` --- ## 数据类型与字面量 常见类型(参考 `01_language_basics.md`): | 类型 | 说明 | |------|------| | Integer / Int64 | 整数 | | Real | 浮点数 | | Boolean | 布尔值(true/false) | | TDateTime | 日期时间 | | String | 字符串 | | Binary | 二进制 | | Array | 数组 | | Matrix / TMatrix | 矩阵 | | NIL | 空值 | 示例: ```tsl i := 42; r := 3.14; b := true; t := Date(); s := 'hello'; n := nil; ``` 字符串支持单引号或双引号,索引访问从 0 开始: ```tsl s := "ABC"; ch := s[0]; ``` --- ## 数组与表数组 ### 一维数组(0-based) ```tsl arr := array(2, 3, 5, 7, 11); first := arr[0]; ``` ### 字符串下标(表数组) ```tsl row := array("Code": "0001", "Price": 12.3); code := row["Code"]; ``` ### 多维数组 ```tsl matrix := array((1, 2, 3), (4, 5, 6)); value := matrix[0][1]; ``` --- ## 运算符与表达式 ### 常用运算符 - 赋值:`:=`, `+=`, `-=`, `*=`, `/=` - 算术:`+ - * / div mod ^` - 关系:`= <> < > <= >= like in` - 逻辑:`and or not` - 三目:`cond ? a : b` 示例: ```tsl c := a + b; ok := (a = b) or (a > 0); x := (a > b) ? a : b; ``` 矩阵/数组相关的 `.=`、`.<` 等算符在扩展语法中说明(见 `06_extended_syntax.md`)。 完整运算符清单见 `01_language_basics.md`。 --- ## 函数 ### 基本结构 ```tsl function HelloTsl(); begin d := Date(); return DateToStr(d); end; ``` ### 参数分隔与类型注解 类型注解仅用于说明与阅读,编译器不做类型检查。 - 无类型注解时用逗号分隔参数 - 带类型注解时用分号分隔参数 - 返回值类型写在 `)` 之后 ```tsl function F1(a, b); function F2(a: string; b: array of real); function F3(): void; ``` ### 形参与实参(in/const/var/out) ```tsl function Calc(in a, var b, out c); begin b := b + a; c := b * 2; return c; end; ``` ### 缺省参数(新一代语法) ```tsl function Foo(a, b = a + 1); begin return b; end; ``` ### 命名参数(新一代语法) ```tsl function FuncA(a, b, c); begin return array(a, b, c); end; result := FuncA(1, c: 3); // b 默认为 nil ``` ### 变参(`...`)与 Params ```tsl function SumAll(...); begin total := 0; for i, v in Params do total := total + v; return total; end; ``` 相关内置:`Params`, `ParamCount`, `RealParamCount`。 ### 返回与退出 ```tsl return value; // 返回 exit; // 退出函数 ``` ### 外部函数声明(external) ```tsl function GetTickCount(): integer; stdcall; external "kernel32.dll" name "GetTickCount" keepresident; ``` 更多外部接口与调用方式见 `03_functions.md`。 --- ## 控制流 ### if / else if ```tsl if x > 0 then y := 1; else if x = 0 then y := 0; else y := -1; ``` ### if 表达式(新一代语法) ```tsl ret := if x > 0 then x * x else 0; ``` ### case ```tsl case age of 0: WriteLn("Baby"); 1: WriteLn("Toddler"); else WriteLn("Other"); end; ``` ### while / repeat ```tsl while cond do DoSomething(); repeat DoSomething(); until cond; ``` ### for(to / downto / step) ```tsl for i := 1 to 10 do sum := sum + i; for i := 10 downto 1 step 2 do sum := sum + i; ``` ### for ... in(数组遍历) ```tsl data := array('a': 1, 'b': 5, 'c': 3); sum := 0; for k, v in data do sum := sum + v; ``` ### break / continue / goto ```tsl while cond do begin if stop then break; if skip then continue; // ... end; goto found; label found; WriteLn("jumped"); ``` --- ## 异常处理 ### Try / Except ```tsl try v := StrToInt(s); except v := 0; WriteLn(ExceptObject.ErrInfo); end; ``` ### Try / Finally ```tsl try DoWork(); finally Cleanup(); end; ``` ### Raise ```tsl if a < 0 then raise "A 不能小于 0"; ``` 异常信息可通过 `ExceptObject.ErrInfo/ErrLine/ErrNo` 获取。 --- ## 调试与性能相关语句 ```tsl debugreturn 1; ``` ```tsl t1 := mtic; // ... elapsed := mtoc(t1); ``` 更多调试/性能语法见 `02_control_flow.md` 与 `07_debug_and_profiler.md`。