验证规则
OSC2 Studio 提供实时语法和语义验证,帮助你在编写场景时即时发现错误。
语法验证
语法验证检查代码是否符合 OSC2 语法规范,包括:
- 缩进是否正确 — 缩进错误会导致解析失败
- 关键字拼写 —
scenario、do、serial等关键字是否正确 - 符号匹配 — 括号、冒号、逗号等符号是否完整
- 标识符格式 — 变量名、类型名是否符合命名规则
- 导入语句 —
import路径格式是否正确
示例语法错误:
# 错误:缺少冒号
scenario my_scenario
do serial: # 正确
car.drive()
# 错误:缩进不一致
scenario my_scenario:
do serial:
car.drive() # 缩进错误,应为 8 个空格
语义验证
语义验证检查代码的逻辑正确性,语法无误但语义有问题的场景:
- 类型检查 — 变量类型是否匹配(如不能把
string赋值给int) - 引用解析 — 变量、类型、角色是否已声明
- 物理量检查 — 单位是否匹配(如不能把
kph赋值给length类型) - 作用域检查 — 变量是否在有效作用域内引用
- 重复声明 — 同一作用域内是否有重复名称
示例语义错误:
# 错误:类型不匹配
my_speed: speed = 10m # 10m 是长度,不是速度
# 错误:未定义变量
car.drive() with:
speed(undefined_var) # undefined_var 未声明
# 错误:单位不匹配
distance: length = 50kph # kph 是速度单位,不能赋值给长度
约束验证
keep 语句定义了场景执行时必须满足的条件:
keep(car.speed < 80kph) # 硬约束:车速必须小于 80 km/h
keep(default x == 3) # 默认约束:可被覆盖
keep(x in [10..20]) # 范围约束:x 在 10 到 20 之间
约束验证会检查:
- 约束表达式类型是否正确(如
speed < 80kph两边单位一致) - 约束是否在有效范围内
- 默认约束是否被正确覆盖
覆盖率检查
使用 cover 语句记录测试覆盖率:
extend my_scenario:
cover(side, event: end, target: 10)
验证器会检查覆盖率目标的格式是否正确。
验证结果
在 OSC2 Studio 编辑器中,验证结果会显示在底部的问题面板中:
- 红色波浪线 — 语法错误(必须修复)
- 黄色波浪线 — 语义警告(建议修复)
- 绿色标记 — 验证通过
点击错误标记可跳转到对应代码位置。