Files
Endorphin-Document/guide/06-lexical-structure.md
T

113 lines
3.8 KiB
Markdown

# 6. 词法结构
词法规则将源码划分为标识符、语法标记、字面量、运算符和标点。源码使用 UTF-8;空白与注释用于分隔词法单元。
本章代码块展示局部词法形式,使用位置由后续表达式和声明规则决定,不是独立程序。
## 6.1 标识符
标识符以 `_` 或 Unicode 字母开头,后续可以包含 `_`、Unicode 字母或数字。名称区分大小写。
```text
Product
discountedPrice
price
product_1
```
namespace 路径段使用标识符。workspace handle 属于平台命名规则,不直接使用源码标识符的定义。
## 6.2 语法标记与对象名称
以下名称在候选语法中承担相应作用:
| 名称 | 用途 |
| --- | --- |
| `use` | 引用 namespace |
| `class` | 构造并命名类型对象的入口 |
| `agent` | 构造并命名具体 Agent 类型对象的入口 |
| `function` | 函数对象构造的候选记法 |
| `let` | 绑定局部结果 |
| `return` | 返回函数结果 |
class、agent 等构造入口自身也是对象;用它们建立的类型、函数和运行实例同样属于对象体系。trait、record 的候选构造形式遵循这一原则。源码中采用专门外形,不代表这些对象名称必须成为保留关键字。
use、let、return 表达依赖、绑定和控制动作。完整保留字集合,以及构造入口如何通过名称解析接入语法,仍需定义;产生式中的文字终结符只规定候选源码的拼写与位置。
## 6.3 数字
数字字面量采用十进制,至少包含一位数字。小数点两侧均须有数字:
```endorphin
0
100
1.5
```
负号是运算符,而不是数字词法单元。`-4` 是对 `4` 使用一元负号,详见[表达式与绑定](08-expressions-and-bindings.md)。
本文数字语法不包含科学计数法、前导正号或省略小数点一侧数字的形式。数字类型、精度和范围由类型规则定义,而不是由字面量的字符形式决定。
## 6.4 字符串
字符串由双引号包围,可以直接包含 Unicode 字符:
```endorphin
"Product"
"商品"
"First\nSecond"
```
| 转义 | 含义 |
| --- | --- |
| `\n` | 换行 |
| `\t` | 水平制表符 |
| `\"` | 双引号 |
| `\\` | 反斜杠 |
双引号、反斜杠和换行在字符串内使用上述转义。未闭合字符串和本文未定义的转义在 Preflight 中产生诊断。
## 6.5 符号字面量
点号后接标识符表示符号字面量:
```endorphin
.title
```
符号表达命名值,例如 UI 的标题角色。不带点号的 `title` 是名称引用,`product.name` 是成员访问,二者均不等同于 `.title`。
符号可用于哪些参数,由对应声明的类型与取值约定决定。
## 6.6 标点与运算符
| 字符 | 用途 |
| --- | --- |
| `{`、`}` | 声明体与函数体 |
| `(`、`)` | 参数、调用和表达式分组 |
| `:` | key 分隔与类型标注 |
| `,` | 分隔参数 |
| `.` | namespace 层级、成员访问和符号前缀 |
| `=` | let 绑定 |
| `+`、`-`、`*`、`/` | 算术运算 |
冒号的含义由语法位置确定:`atelier:shop.data` 中分隔 workspace handle 与路径,`price: Number` 中标注类型。组件参数的源码传入方式尚未定义,见[规范状态](../appendices/specification-status.md#ui)。
## 6.7 空白与注释
空格、制表符和换行可出现在词法单元之间。缩进不构成代码块,代码块由花括号界定。
行注释以 `//` 开始,持续到下一行或源码结束。函数体片段:
```endorphin
// 计算优惠后的金额
let amount = 100 - 10
return amount
```
注释不参与求值。本文语法不包含块注释。
词法产生式集中列于[形式文法](../appendices/formal-grammar.md#词法)。
[上一章:Preflight 与 inflight](05-preflight-and-inflight.md) · [下一章:资源、类型与类](07-types-and-classes.md) · [目录](../README.md)