Skip to content

词法结构 ​

实现状态: 已实现(syx-lexer,Token 完整;正则字面量 Phase 50+;块注释嵌套;标识符 UAX #31 XID — ADR-229 / M2-S2-04)

SYX 源文件为 UTF-8 文本(不含 BOM)。词法分析将源码切分为 Token 流,供语法分析使用。


字符集 ​

元素范围
源码编码UTF-8(无 BOM)
行结束符\n(LF)/ \r\n(CRLF,规范化)
空格 / \t / \v / \f

源码内任意位置可出现 任意 Unicode 字符(如注释、字符串字面量、标识符);字符串字面量支持 \u{…} 转义。

标识符 ​

identifier ::= letter (letter | digit | '_')*
letter     ::= [a-zA-Z_] | <unicode XID_Start>
规则说明
首字符字母或 _
后续字母、数字、_
大小写敏感Foo ≠ foo
Unicode已实现(XID_Start / XID_Continue via unicode-xid;ADR-229)
规范化标识符不做 NFC;比较为源码拼写相等
关键字不可作普通标识符
swift
count
_private
MyType
helloWorld
αβγ                           // Unicode XID(合法)

诊断: L006 非法字符;L001 标识符命名 lint(lint 规则)。

关键字 ​

保留字不可作普通标识符使用。完整列表分以下几类:

声明 ​

关键字含义
class引用类型
struct值类型
enum枚举
protocol协议
extension扩展
actor并发隔离类型
func函数
init构造器
deinit析构器
var可变绑定
let不可变绑定
import导入模块
typealias类型别名
associatedtype关联类型
global全局 actor(修饰 actor)
datadata class 修饰(data class)
final禁止子类化(final class / final func)

访问控制 ​

关键字含义
public跨模块
internal模块内(默认)
private文件 / 作用域
fileprivate文件内

控制流 ​

关键字含义
if条件
else否则
guard早退守卫
switch多路分支
case分支
default默认
for循环
infor-in 容器
while条件循环
repeatrepeat while
break跳出
continue继续
return返回
fallthrough拒绝(SYX 不支持)

并发 ​

关键字含义
async异步函数
await异步等待
Task任务
actor隔离对象
global全局 actor 修饰
isolated隔离(部分)
sending跨隔离传递参数(Phase 26)
distributeddistributed actor(partial)

类型 ​

关键字含义
Self实现类型
Type类型元
some不透明返回
any存在类型

错误处理 ​

关键字含义
try错误传播
catch捕获
throw抛出
throws错误签名(throws T typed throws 部分实现)

字面量 ​

关键字含义
true布尔真
false布尔假
nil空值

泛型与元编程 ​

关键字含义
where泛型约束
requires效果注解
macro用户宏声明
compileTime常量求值
Pure / IO效果标签

上下文关键字 ​

关键字含义
static静态(类型方法 / 字段)
final禁止 override
override重写
lazy惰性属性(class only)
mutating变异方法
convenience便利 init(未实现)
required必填 init(未实现)
prefix / infix / postfix自定义运算符
associativity结合性
precedence优先级

完整列表见 crates/syx-lexer/src/token.rs。

字面量 ​

整数字面量 ​

int-literal ::= digit+ (suffix)?
             | '0x' hex-digit+ (suffix)?
             | '0b' binary-digit+ (suffix)?
             | '0o' octal-digit+ (suffix)?

suffix ::= 'i8' | 'i16' | 'i32' | 'i64' | 'i128' | 'isize'    -- signed
        | 'u8' | 'u16' | 'u32' | 'u64' | 'u128' | 'usize'    -- unsigned
形式示例推断类型
十进制42Int
十六进制0xFFInt
二进制0b1010Int
八进制0o17Int
后缀100i8 / 0xFFu8 / 42i128对应固定宽度
下划线1_000_000i64编译期忽略 _

无后缀整数默认 类型为平台 Int(64 位 host → Int64;32 位 → Int32)。

浮点字面量 ​

float-literal ::= digit+ '.' digit+ (exponent)? (suffix)?
               | digit+ exponent (suffix)?

exponent ::= ('e' | 'E') ('+' | '-')? digit+
suffix    ::= 'f32' | 'f64'
形式示例推断类型
十进制3.14Double
后缀3.14f32 / 2.0f64Float32 / Float64
科学计数法2.5e10Double
下划线1_000.5同上

无后缀浮点默认 Double。

布尔与空 ​

字面量类型
trueBool
falseBool
nil上下文推断(T? / Optional<T>)

字符串字面量 ​

string-literal ::= '"' string-char* '"'
string-char    ::= <any except '"', '\', newline> | escape
escape         ::= '\' ('n' | 'r' | 't' | '\\' | '\"' | '\'' | '0' | 'x' hex-digit hex-digit | 'u' '{' unicode-codepoint '}')
               | '$' '(' expr ')'        -- interpolation
元素含义
"..."双引号包裹
\n \r \t常见控制字符
\\ \" \' \$字面字符
\0NUL(警告:可能截断字符串)
\x41ASCII 字节(0x00–0xFF)
\u{1F600}Unicode 码点(U+0000–U+10FFFF)
\(expr)插值(任意表达式)
swift
"Hello, World"
"Hello, \(name)!"
"line one\nline two"
"emoji: \u{1F600}"
"ascii: \x41"

裸换行禁止: 字符串内不允许裸换行;未闭合报 L001。 存储: UTF-8 字节数组(Rust String 后端)。 字素簇: .length / substring / for-in 按 Unicode 字素簇(Phase 84 起,unicode-segmentation 索引)。

正则字面量 ​

regex-literal ::= '/' regex-body '/' regex-flag?
regex-flag    ::= [a-zA-Z]+
形式示例状态
/pattern//\d+/已实现
/pattern/i/hello/i部分支持(flag 在 parser 接受)
/pattern/m/foo/m未实现

由 / 与上下文消歧(非注释起始);典型 let p = /\d+/ 无歧义。

字典字面量 ​

dict-literal ::= '[' dict-entry (',' dict-entry)* ']' | '{' dict-entry (',' dict-entry)* '}'
dict-entry   ::= expr ':' expr
形式语法类型
Dictionary["a": 1, "b": 2][K: V] 静态
Object{ "name": "SYX" }动态 Object

解析器见到 [key: value, …](首元素后跟 :)即 Dictionary;见到 [elem, …](首元素后跟 , 或 ])即 Array。

注释 ​

形式用途
// 文本单行(行尾或整行)
/* 文本 */块(支持嵌套)
/// 文本文档注释(syx doc 提取)
swift
// 单行注释

/* 块注释
   /* 可嵌套 */
   任意行
*/

/// 文档注释
/// 多行:以 `///` 开头
func add(a: Int, b: Int) -> Int { return a + b }

运算符 ​

算术与赋值 ​

运算符含义优先级
+ - * / %算术100 / 90
=赋值10
+= -= *= /= %=复合赋值10
<< >>位移80
& | ^位运算50 / 30 / 40

比较与逻辑 ​

运算符含义优先级
== !=相等60
=== !==恒等60
< <= > >=有序比较70
&&逻辑与20
||逻辑或10
!逻辑非(一元)—
??空合并5
?try 链 / Optional / ?.—
!(后缀)强制解包—

其他 ​

运算符含义
->函数返回类型
=>闭包 fat arrow(部分支持)
..<半开范围
...闭区间(部分支持)
&借用 &T / &mut T
@特性 @attached / @Component
#宏 #assert
.成员访问
?:三元(故意不提供;用 if 表达式;≠ 待办缺口)

分隔符 ​

separator ::= '(' | ')' | '{' | '}' | '[' | ']' | ',' | ':' | ';' | '.'
符号用途
( )元组 / 函数参数 / 条件
{ }块 / 字典 Object / 闭包
[ ]数组 / 下标 / Dictionary 类型
,列表分隔
:命名参数 / 类型标注 / 字典键值
;空(可选;SYX 不要求)
.成员访问 / 浮点小数点

空白 ​

whitespace ::= ' ' | '\t' | '\n' | '\r' | <unicode Zs>
  • 词法层多数被跳过(字符串字面量除外)
  • 注释作为空白处理
  • 缩进不强制(无 Python 式强制缩进)

诊断: L001–L012(词法 / lint)

用法示例 → 语言指南:基础 · 字符串

参见 → 类型 · 表达式 · 语法摘要

SYX · Apache-2.0