语法基础
OSC2 采用缩进风格(类似 Python),通过缩进组织代码块。文件以 .osc 为扩展名。
注释
使用 # 表示单行注释:
# 这是一个注释
scenario my_scenario:
# 缩进内的注释
do serial:
car.drive()
文件结构
一个 OSC2 文件由导入声明和顶层定义组成:
# 导入(可选)
import osc.standard
# 顶层定义:类型、枚举、结构体、角色、场景等
type my_type is ...
scenario my_scenario:
...
导入
使用 import 语句引用其他文件:
import "path/to/file.osc" # 文件路径导入
import osc.standard # 标准库导入
关键字
OSC2 的保留关键字包括:
scenario actor action struct type enum do serial parallel one_of event keep extend inherits def import with is it var global cover call wait on until emit if default fall rise elapsed every sample hard only remove_default undefined as in and or not range list of record external SI unit bool int uint float string
标识符
标识符区分大小写,支持 Unicode 字符。如需包含空格,使用管道符包裹:
my_variable: int
|my variable|: string
场景结构
场景使用 scenario 关键字声明,通过 do 定义行为:
scenario my_scenario:
ego: vehicle
do serial:
ego.drive(duration: 10s)
行为组合
serial— 顺序执行 (上一个结束后下一个开始)parallel— 并行执行(同时开始)one_of— 选择执行(随机选择一个分支)
do serial:
phase1: parallel(duration: 5s):
car1.drive()
car2.drive()
phase2: serial:
car1.drive(speed: 30kph)
car2.drive(speed: 50kph)
修饰器
使用 with 为行为添加参数和限制:
car.drive() with:
speed(60kph)
lane(1)
keep(speed < 80kph)
字面量
42 # 整数
3.14159 # 浮点数
true # 布尔值
"hello" # 字符串
10m # 物理量(10米)
50kph # 物理量(50公里/小时)
[1..10] # 范围
完整示例
import osc.standard
scenario highway_drive:
ego: vehicle
do serial:
approach: parallel(duration: 10s):
ego.drive with:
speed(60kph)
lane(1)
cruise: parallel(duration: 30s):
ego.drive with:
speed(80kph)
lane(1)