# 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 PI = 3.14159; Const MaxRetry = 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 Mat := array((1,2,3),(4,5,6)); Value := Mat[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; ``` ### 形参与实参(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 X; // 返回 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 Finded; label Finded; 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`。