# 词法与基础语法

## 核心关键字

玄铁的关键字体系涵盖了从变量声明到并发控制的全方位支持(点击进入详解页):

*   **声明与作用域**:
    *   [`设`](../关键字/设.md):声明变量 (var)
    *   [`常`](../关键字/常.md):声明常量 (const)
    *   [`函`](../关键字/函.md):声明函数 (func)
    *   [`返`](../关键字/返.md):函数返回 (return)
    *   [`外`](../关键字/外.md):声明外部函数/C-FFI (external)
    *   [`型`](../关键字/型.md):定义类/类型 (type)
    *   [`口`](../关键字/口.md):定义接口 (interface)
    *   [`造`](../关键字/造.md):实例化/构造函数 (new)
    *   [`承`](../关键字/承.md):继承父类 (inherit)
    *   [`覆`](../关键字/覆.md):重写父类方法 (override)
    *   [`弱`](../关键字/弱.md):弱引用修饰符
    *   [`此`](../关键字/此.md):当前实例引用 (this)
    *   [`引`](../关键字/引.md):引入外部模块 (import)
    *   [`予`](../关键字/予.md):为模块指定别名 (alias)
    *   [`公`](../关键字/公.md) / [`私`](../关键字/私.md) / [`护`](../关键字/护.md):可见性修饰 (public/private/protected)
*   **控制流**:
    *   [`若`](../关键字/若.md) / [`抑`](../关键字/抑.md) / [`否`](../关键字/否.md):条件分支 (if/elif/else)
    *   [`当`](../关键字/当.md):条件循环 (while)
    *   [`循`](../关键字/循.md):无限循环 (loop)
    *   [`遍历`](../关键字/遍历.md) / [`于`](../关键字/于.md):迭代循环 (for/in)
    *   [`断`](../关键字/断.md):跳出循环 (break)
    *   [`续`](../关键字/续.md):下一轮迭代 (continue)
*   **并发与异步**:
    *   [`异步`](../关键字/异步.md):声明异步任务 (async)
    *   [`等待`](../关键字/等待.md):等待异步结果 (await)
    *   [`并行`](../关键字/并行.md):并行执行 (parallel)
    *   [`道`](../关键字/道.md):通道 (channel)
    *   [`选`](../关键字/选.md):多路通道等待 (select)
*   **异常与匹配**:
    *   [`尝试`](../关键字/尝试.md) / [`捕捉`](../关键字/捕捉.md):异常捕获 (try/catch)
    *   [`匹配`](../关键字/匹配.md):模式匹配 (match)
    *   [`终`](../关键字/终.md):终止程序/抛出异常 (terminate)
*   **逻辑与值**:
    *   [`真`](../关键字/真.md) / [`假`](../关键字/假.md):布尔字面量 (true/false)
    *   [`空`](../关键字/空.md):空值 (null)
    *   [`且`](../关键字/且.md) / [`或`](../关键字/或.md) / [`非`](../关键字/非.md):逻辑与/或/非 (and/or/not)
    *   [`是`](../关键字/是.md):等价与类型判断 (is)
*   **类型词**:
    *   [`整`](../关键字/整.md):64 位整数 (i64)
    *   [`小数`](../关键字/小数.md):浮点数 (double)
    *   [`字`](../关键字/字.md):UTF-8 字符串 (string)
    *   [`布尔`](../关键字/布尔.md):布尔 (bool)
    *   [`数组`](../关键字/数组.md):动态数组 (array)
    *   [`字典`](../关键字/字典.md):哈希字典 (dict)
    *   [`结果`](../关键字/结果.md):结果容器 (Result)
    *   [`字节`](../关键字/字节.md):字节 (u8)
    *   [`任务`](../关键字/任务.md):异步任务句柄
*   **系统级内建原语**:
    *   [`示`](../关键字/示.md):打印输出 (print)
    *   [`化`](../关键字/化.md):JSON 序列化
    *   [`解`](../关键字/解.md):JSON 反序列化
    *   [`执`](../关键字/执.md):执行系统命令 (exec)
    *   [`输`](../关键字/输.md):读取标准输入 (input)
    *   [`求`](../关键字/求.md):发起 HTTP 请求
    *   [`听`](../关键字/听.md):网络监听
    *   [`连`](../关键字/连.md):建立网络连接
*   **位运算**:
    *   [`位与`](../关键字/位与.md) / [`位或`](../关键字/位或.md) / [`异或`](../关键字/异或.md):位 AND/OR/XOR
    *   [`左移`](../关键字/左移.md) / [`右移`](../关键字/右移.md):位移 (shift)
    *   [`取反`](../关键字/取反.md):按位取反 (~)
*   **符号运算符**:
    *   [算术](../关键字/运算符-算术.md):`+ - * / %`
    *   [比较](../关键字/运算符-比较.md):`== != < > <= >=`
    *   [拼接与冒泡](../关键字/运算符-拼接与冒泡.md):`&`(字符串拼接)、`?`(错误冒泡)
    *   [其他符号](../关键字/运算符-符号.md):`=` `.` `:` `->` `@`

## 保留字不可作标识符

**保留字不能用作标识符**——变量名、常量名、函数名、参数名、迭代变量名、型名、接口名,一律不允许。种子编译器(GSC)与自举编译器(XTC)都强制执行这条规则,对同一份源码给出同样的判定。

保留字清单:

| 保留字 | 含义 | 保留字 | 含义 |
|--------|------|--------|------|
| `整` | 整数类型与转换函数 | `数组` | 数组类型 |
| `小数` | 小数类型与转换函数 | `字典` | 字典类型 |
| `字` | 字符串类型与转换函数 | `结果` | 结果容器类型 |
| `布尔` | 布尔类型 | `字节` | 字节串类型 |
| `字符串` | 字符串类型 | `任务` | 异步任务类型 |
| `道` | 通道类型 | `测试` | 测试块关键字 |

此外,表示实例自身的 `此` 同样不能用作标识符。

**报错长这样**(编译器原文):

```xuantie
[示例.xt 行:3, 列:5] 语法错误:'结果' 是玄铁语言的保留关键字,不能用作变量名或标识符。请换一个名字。
```

**换成组合名即可**——词法器按完整标识符切分,类型词出现在更长的名字里完全合法:

```xuantie
设 结果值 = 整("42")        // ✓ 组合名合法
设 抓取结果 = 请求(地址)     // ✓
设 任务列表 = []            // ✓

设 结果 = 整("42")          // ✗ 保留字不能单独作名字
```

**只禁止"当名字",不禁止"当关键字用"**——关键字在表达式与类型位置照常工作:

```xuantie
设 n = 整("42")             // 类型转换函数
设 s = 字(n.值)              // 值转文本
设 ch = 道(4)               // 建通道
设 r: 结果<整> = n           // 类型注解
型 盒<T> { 设 内容: T }      // 泛型参数名不受影响
```

## 运算符

*   **算术**:`+`, `-`, `*`, `/`, `%`
    *   整数间运算保持整数语义(`7 / 2 = 3`);任一侧为小数即提升为小数运算(`7 / 2.0 = 3.5`)
    *   小数支持 `%`(按 fmod 语义,如 `5.5 % 2.0 = 1.5`)
    *   除零约定:整数与小数均返回 `0`(不报错;与 GSC 解释器的报错行为有意分歧,移植代码时注意)
    *   小数字面量打印规则:整数值小数打印不带小数点(`字(2.0)` 得 `"2"`)
*   **比较**:`==`, `!=`, `<`, `>`, `<=`, `>=`
    *   整数与小数可混合比较,按数值判定(`1.0 == 1` 为 `真`)
*   **逻辑**:`且` (AND), `或` (OR), `非` (NOT), `是` (IS)
*   **位运算**:`位与`, `位或`, `异或`, `左移`, `右移`, `取反`
*   **其他**:
    *   赋值:`=`
    *   成员访问:`.`
    *   箭头:`->`(匹配语句中模式与分支之间的分隔符:`模式 -> 块`)
    *   **错误冒泡后缀操作符**:`?`(跟在返回 `结果` 类型的表达式之后,用于快速解包或向上传递错误,如 `设 值 = 可能出错的操作()?`)

## 运算符重载(魔术方法)

玄铁支持通过**魔术方法**重载算术和比较运算符,使自定义类型(`型`)可使用原生运算符语法:

| 运算符 | 魔术方法 | 示例 |
|--------|---------|------|
| `+` | `_加_` | `v1 + v2` |
| `-` | `_减_` | `v1 - v2` |
| `*` | `_乘_` | `v1 * 2` |
| `/` | `_除_` | `v1 / v2` |
| `%` | `_模_` | `v1 % 3` |
| `==` | `_等_` | `v1 == v2` |
| `!=` | `_等_`(取反) | `v1 != v2` |

**注意**:`==` 和 `!=` 仅对自定义类型(类型声明含 `型:` 前缀)启用重载;弱引用、整型、字符串等内置类型直接走指针/值比较,不触发 `_等_`。

> 完整教程、实现细节、链式调用与嵌套表达式示例请参阅:[10_运算符重载编程指南.md](../10_运算符重载编程指南.md)

## 字面量与标识符特性

*   **布尔值**:`真` (true), `假` (false)
*   **空值**:`空` (null)
*   **数字**:支持标准的十进制整数与浮点数(小数)
*   **字符串**:支持双引号 `""` 或单引号 `''`
*   **问号标识符**:标识符支持以 `?` 结尾,常用于返回布尔值的函数或变量命名(例如 `文件.存在?`、`队列.空?`),这让代码读起来更像自然语言的提问。