Fleet 语言语法参考
本文档提供 Fleet 语言的完整语法参考,基于 100% 成功率的稳定实现。
📝 语法概览
Fleet 语言采用 Rust 风格的现代语法,注重简洁性和表达力。
🔤 词法元素
标识符
identifier = letter (letter | digit | "_")*
letter = "a"..."z" | "A"..."Z"
digit = "0"..."9"
示例:
variable_name
ClassName
CONSTANT_VALUE
_private
字面量
整数字面量
integer = decimal | hexadecimal | binary | octal
decimal = digit+
hexadecimal = "0x" hex_digit+
binary = "0b" ("0" | "1")+
octal = "0o" octal_digit+
示例:
42 // 十进制
0xFF // 十六进制
0b1010 // 二进制
0o755 // 八进制
浮点数字面量
float = digit+ "." digit+ exponent?
exponent = ("e" | "E") ("+" | "-")? digit+
示例:
3.14
2.718e10
1.23E-5
字符串字面量
string = "\"" string_char* "\""
raw_string = "r\"" raw_char* "\""
示例:
"Hello, World!"
"Unicode: 你好 🌍"
r"Raw string with \n no escapes"
字符字面量
char = "'" char_content "'"
示例:
'A'
'🚀'
'\n'
关键字
// 声明关键字
fn let var struct enum trait impl
// 控制流关键字
if else match loop return
// 类型关键字
int str bool f64 f32 i32 i64 u32 u64
// 其他关键字
self true false
🏗️ 语法结构
程序结构
program = item*
item = function | struct_def | enum_def | trait_def | impl_block
函数定义
function = "fn" identifier "(" parameter_list? ")" return_type? block
parameter_list = parameter ("," parameter)*
parameter = identifier ":" type | "self"
return_type = "->" type
示例:
fn main() {
print("Hello, Fleet!");
}
fn add(a: int, b: int) -> int {
return a + b;
}
fn greet(name: str) {
print("Hello, " + name);
}
结构体定义
struct_def = "struct" identifier "{" field_list? "}"
field_list = field ("," field)*
field = identifier ":" type
示例:
struct Point {
x: int,
y: int,
}
struct Person {
name: str,
age: int,
email: str,
}
枚举定义
enum_def = "enum" identifier "{" variant_list? "}"
variant_list = variant ("," variant)*
variant = identifier | identifier "(" type_list ")" | identifier "{" field_list "}"
示例:
enum Status {
Pending,
Approved,
Rejected,
}
enum Message {
Text(str),
Number(int),
Point { x: int, y: int },
}
Trait 定义
trait_def = "trait" identifier "{" trait_method* "}"
trait_method = "fn" identifier "(" parameter_list? ")" return_type? ";"
示例:
trait Display {
fn show(self) -> str;
fn format(self, prefix: str) -> str;
}
Impl 块
impl_block = "impl" identifier "for" identifier "{" impl_method* "}"
impl_method = "fn" identifier "(" parameter_list? ")" return_type? block
示例:
impl Display for Point {
fn show(self) -> str {
return "Point(" + self.x + ", " + self.y + ")";
}
fn format(self, prefix: str) -> str {
return prefix + self.show();
}
}
🎯 表达式语法
基础表达式
expression = literal | identifier | function_call | field_access | tuple_access
函数调用
function_call = identifier "(" argument_list? ")"
argument_list = expression ("," expression)*
示例:
print("Hello");
add(1, 2);
point.show();
字段访问
field_access = expression "." identifier
示例:
point.x
person.name
self.field
元组访问
tuple_access = expression "." digit
示例:
pair.0
coordinates.1
nested_tuple.0.1
二元运算
binary_expr = expression binary_op expression
binary_op = "+" | "-" | "*" | "/" | "%" | "==" | "!=" | "<" | ">" | "<=" | ">=" | "&&" | "||"
示例:
a + b
x * y
name == "Alice"
age >= 18
🔄 语句语法
变量声明
let_stmt = "let" identifier (":" type)? "=" expression ";"
var_stmt = "var" identifier (":" type)? "=" expression ";"
示例:
let name = "Alice";
let age: int = 25;
var counter = 0;
赋值语句
assign_stmt = identifier "=" expression ";"
示例:
counter = counter + 1;
point.x = 10;
控制流语句
条件语句
if_stmt = "if" expression block ("else" "if" expression block)* ("else" block)?
示例:
if age >= 18 {
print("Adult");
} else if age >= 13 {
print("Teenager");
} else {
print("Child");
}
循环语句
loop_stmt = "loop" pattern "in" expression block
pattern = identifier | "(" identifier "," identifier ")"
示例:
loop i in 0..10 {
print(i);
}
loop (key, value) in map {
print(key + ": " + value);
}
匹配语句
match_stmt = "match" expression "{" match_arm* "}"
match_arm = pattern "=>" expression ","
示例:
match status {
Status::Pending => print("Waiting"),
Status::Approved => print("Success"),
Status::Rejected => print("Failed"),
}
🎨 类型语法
基础类型
type = primitive_type | compound_type | user_type
primitive_type = "int" | "str" | "bool" | "f64" | "f32" | "i32" | "i64" | "u32" | "u64"
复合类型
tuple_type = "(" type_list? ")"
array_type = "[" type "]" | "[" type ";" expression "]"
map_type = "map" "[" type "," type "]"
示例:
(int, str) // 元组类型
[int] // 动态数组
[int; 5] // 固定数组
map // 映射类型
📊 运算符优先级
| 优先级 | 运算符 | 结合性 |
|---|---|---|
| 1 (最高) | . () [] |
左结合 |
| 2 | ! - (一元) |
右结合 |
| 3 | * / % |
左结合 |
| 4 | + - |
左结合 |
| 5 | < <= > >= |
左结合 |
| 6 | == != |
左结合 |
| 7 | && |
左结合 |
| 8 (最低) | \|\| |
左结合 |
🔍 语法注意事项
1. 分号规则
- 语句必须以分号结尾
- 块表达式不需要分号
- 函数最后一个表达式可以省略
return和分号
2. 注释语法
// 单行注释
/*
* 多行注释
* 支持嵌套
*/
3. 关键字冲突解决
- 使用
loop替代for避免与 trait 语法冲突 impl Trait for Type语法与循环语句完全兼容
4. Self 参数特殊处理
self参数自动推断类型- 支持字段访问:
self.field - 支持方法调用:
self.method()
✅ 语法验证
Fleet 语言的语法已通过 162 个测试用例 的完整验证,达到 100% 成功率。所有语法特性都经过严格测试,确保稳定可靠。