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% 成功率。所有语法特性都经过严格测试,确保稳定可靠。

🔗 相关文档

  • 类型系统 - 详细的类型信息
  • 运算符 - 运算符详细说明
  • 控制流 - 控制流语句详解
  • Trait 系统 - 面向对象编程