跳转至

Zava 语法

本页依据 tools/compiler/lexer.pyparser.pytokens.py、仓库内 .vts 程序和 编译器测试整理。源码与本页冲突时,以源码为准。

文件与注释

高层源码后缀为 .vts,编译结果后缀为 .vt。空白不影响语义;分号可选。

// 单行注释
/* 多行注释 */
fn main() { print("OK"); halt 0; }

字面量与类型

整数支持十进制、下划线和十六进制;浮点数使用十进制小数。字符串支持 \n \r \t \0 \\ \",布尔值为 true/false

let count: u64 = 1_000
let mask: u64 = 0xFF
let ratio: f64 = 0.5
let ready: bool = true
let text: string = "Zava\n"

解析器接受的类型名包括 u64i64f64boolrefstring;未标注 时默认为 u64

函数与返回

fn add(left: u64, right: u64) {
    return left + right
}

fn main() {
    let answer = add(17, 23)
    halt 0
}

表达式

优先级从低到高为:||&&|^&、比较、移位、加减、乘除模。 一元运算为 - ! ~ &

let value = (2 + 3) * 4
let ok = value >= 20 && value != 21
let shifted = value << 1

变量与赋值

let total: u64 = 0
total = total + 1
total += 2
total -= 1

当前 parser 只允许给名称赋值,不接受任意成员或索引作为赋值左值。

条件与循环

if total > 3 {
    print("large")
} else {
    print("small")
}

while total < 10 { total += 1 }
for index in 0..4 { print(index) }
loop { break }

循环体内可用 breakcontinue

match

match total {
    0 => print("zero"),
    1 => { print("one") },
    _ => print("other")
}

列表、调用与成员

let values = [1, 2, 3]
let result = compute(17, 23)
let field = result.value

列表和成员访问必须通过编译器类型/selector 检查;语法可解析不代表任意成员都能 编码。

元认知语句

这些是语言语法,会编译到 OBSERVE/DOUBT/REFLECT 指令,不是 CLI 命令。

observe 0 -> observation
doubt observation -> retry
doubt observation -> { print("retry") }
reflect strategy_a -> strategy_b

社会协作语句

spawn "worker.vt"
propose("divide the work")
critique("check boundary")
vote(1)
consensus("plan")

spawn 是语言语句;Runtime 的 /dream 和 HTTP /chat 属于不同接口层。

量子块

quantum {
    qstate 1
    hgate 0
    xgate 1
    phase_pi 0
    qft 2
    noise 0
    measure 0 -> result
}

量子操作集合由 parser 固定为 qstate/hgate/xgate/ygate/zgate/phase_pi/qft/measure/noise。 命名量子函数也合法:

quantum bell(q: u64) {
    hgate q
    measure q -> bit
}

输出与停止

print("DONE")
halt 0

halt 的可选表达式是进程状态。生产程序必须有可达的停止路径,避免触发步骤上限。

编译与审计

python3 tools/compiler/main.py program.vts -o program.vt --dump-ir
python3 tools/vt_disasm.py program.vt

编译器遇到未知字符、未闭合字符串/注释、缺失括号或无效 selector 必须失败,不会 猜测修复源码。