♻️ refactor(playbook): streamline agents and refresh tsl docs
This commit is contained in:
@@ -0,0 +1,354 @@
|
||||
# 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`。
|
||||
Reference in New Issue
Block a user