NAC_Blockchain/charter-std-zh/docs/中文关键字设计.md

287 lines
6.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Charter中文关键字设计文档
## 📖 概述
本文档详细说明了Charter语言中文关键字的设计原则、实现方式和使用规范。
## 🎯 设计原则
### 1. 自然性
- 使用符合中文表达习惯的词汇
- 避免生硬的直译
- 考虑中文语境下的自然表达
### 2. 简洁性
- 优先使用2-3个汉字的词汇
- 避免过长的关键字
- 保持代码的可读性
### 3. 一致性
- 同类关键字使用相似的命名模式
- 保持与英文关键字的语义对应
- 统一的命名风格
### 4. 无歧义性
- 避免多义词
- 确保关键字含义明确
- 与常用词汇区分
## 📚 关键字列表
### 基础关键字
| 中文 | 英文 | 说明 | 使用场景 |
|------|------|------|----------|
| 资产 | asset | 资产类型 | 定义资产合约 |
| 合约 | contract | 智能合约 | 定义合约 |
| 函数 | fn | 函数定义 | 定义函数 |
| 让 | let | 变量声明 | 声明变量 |
| 可变 | mut | 可变变量 | 声明可变变量 |
| 常量 | const | 常量声明 | 声明常量 |
### 控制流关键字
| 中文 | 英文 | 说明 | 使用场景 |
|------|------|------|----------|
| 如果 | if | 条件判断 | 条件分支 |
| 否则 | else | 否则分支 | 条件分支 |
| 对于 | for | 循环 | for循环 |
| 在 | in | 在...中 | for循环中 |
| 循环 | while | while循环 | while循环 |
| 返回 | return | 返回值 | 函数返回 |
### 事件和模块关键字
| 中文 | 英文 | 说明 | 使用场景 |
|------|------|------|----------|
| 触发 | emit | 触发事件 | 触发事件 |
| 模块 | module | 模块声明 | 声明模块 |
| 使用 | import | 导入模块 | 导入模块 |
| 要求 | require | 断言条件 | 条件检查 |
### 可见性关键字
| 中文 | 英文 | 说明 | 使用场景 |
|------|------|------|----------|
| 公开 | public | 公开可见性 | 公开函数/变量 |
| 私有 | private | 私有可见性 | 私有函数/变量 |
| 内部 | internal | 内部可见性 | 内部函数/变量 |
### 布尔值
| 中文 | 英文 | 说明 | 使用场景 |
|------|------|------|----------|
| 真 | true | 布尔真值 | 布尔表达式 |
| 假 | false | 布尔假值 | 布尔表达式 |
## 🔧 实现方式
### 词法分析器实现
在Charter编译器的词法分析器中使用Logos库实现中文关键字识别
```rust
#[derive(Logos, Debug, Clone, PartialEq)]
pub enum Token {
#[token("asset")]
#[token("资产")]
Asset,
#[token("contract")]
#[token("合约")]
Contract,
// ... 其他关键字
}
```
### 中文标识符支持
支持中文字符作为标识符:
```rust
#[regex(r"[a-zA-Z_\u4e00-\u9fa5][a-zA-Z0-9_\u4e00-\u9fa5]*", |lex| lex.slice().to_string())]
Identifier(String),
```
Unicode范围 `\u4e00-\u9fa5` 覆盖了常用汉字。
## 📝 使用示例
### 示例1: 纯中文合约
```charter
合约 我的代币 {
私有 名称: 字符串;
私有 符号: 字符串;
私有 总量: u256;
构造函数(名称: 字符串, 符号: 字符串, 总量: u256) {
让 可变 自己 = 自己;
自己.名称 = 名称;
自己.符号 = 符号;
自己.总量 = 总量;
}
公开 函数 获取名称() -> 字符串 {
返回 自己.名称;
}
公开 函数 转账(接收者: 地址, 数量: u256) {
要求(数量 > 0, "数量必须大于0");
// 转账逻辑
}
}
```
### 示例2: 中英文混合
```charter
使用 charter-std-zh/acc/acc20;
合约 MyToken {
私有 代币: ACC20基础;
构造函数() {
代币 = ACC20基础::新建("我的代币", "MYT", 18, 1000000);
}
函数 transfer(to: 地址, amount: u256) {
如果 amount > 0 {
代币.转移(to, amount);
} 否则 {
要求(假, "数量必须大于0");
}
}
}
```
### 示例3: 控制流
```charter
函数 计算总和(数组: [u256]) -> u256 {
让 可变 总和 = 0;
对于 数字 在 数组 {
总和 = 总和 + 数字;
}
返回 总和;
}
函数 查找最大值(数组: [u256]) -> u256 {
让 可变 最大 = 0;
让 可变 索引 = 0;
循环 索引 < 数组.长度() {
如果 数组[索引] > 最大 {
最大 = 数组[索引];
}
索引 = 索引 + 1;
}
返回 最大;
}
```
## 🎨 命名规范
### 变量命名
- 使用有意义的中文名称
- 避免单字变量名(除了循环变量)
- 使用驼峰命名或下划线分隔
```charter
// 推荐
让 用户余额 = 1000;
让 最大供应量 = 1000000;
// 不推荐
让 a = 1000;
让 x = 1000000;
```
### 函数命名
- 使用动词开头
- 清晰表达函数功能
- 保持简洁
```charter
// 推荐
函数 获取余额() -> u256
函数 转移代币(接收者: 地址, 数量: u256)
函数 检查权限(用户: 地址) -> 布尔
// 不推荐
函数 余额() -> u256
函数 转移()
函数 检查()
```
### 合约命名
- 使用名词
- 清晰表达合约用途
- 可以使用中英文混合
```charter
// 推荐
合约 用户管理
合约 代币合约
合约 NFT市场
// 不推荐
合约 管理
合约 合约
合约 市场
```
## ⚠️ 注意事项
### 1. 编码问题
- 确保源文件使用UTF-8编码
- 避免使用BOM
- 注意不同操作系统的换行符
### 2. 兼容性
- 中文关键字与英文关键字完全等价
- 可以在同一文件中混用
- 编译器会统一处理
### 3. 性能
- 中文关键字不影响编译性能
- 生成的字节码完全相同
- 运行时性能无差异
### 4. 工具支持
- IDE需要支持UTF-8
- 语法高亮需要配置
- 代码补全需要更新词库
## 🔮 未来计划
### 短期计划
- [ ] 添加更多中文关键字
- [ ] 完善中文错误消息
- [ ] 提供中文API文档
### 长期计划
- [ ] 支持繁体中文
- [ ] 支持其他语言(日语、韩语等)
- [ ] 多语言IDE插件
## 📚 参考资料
- [Charter语言规范](https://docs.newassetchain.io/charter)
- [Logos词法分析器](https://github.com/maciejhirsz/logos)
- [Unicode汉字范围](https://www.unicode.org/charts/PDF/U4E00.pdf)
## 🤝 贡献
欢迎提出改进建议如果您有更好的中文关键字翻译方案请提交Issue或Pull Request。
---
**版本**: 1.0.0
**最后更新**: 2026-02-18
**作者**: NAC开发团队