跳到主要内容

验证规则

OSC2 Studio 提供实时语法和语义验证,帮助你在编写场景时即时发现错误。

语法验证

语法验证检查代码是否符合 OSC2 语法规范,包括:

  • 缩进是否正确 — 缩进错误会导致解析失败
  • 关键字拼写scenariodoserial 等关键字是否正确
  • 符号匹配 — 括号、冒号、逗号等符号是否完整
  • 标识符格式 — 变量名、类型名是否符合命名规则
  • 导入语句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 编辑器中,验证结果会显示在底部的问题面板中:

  • 红色波浪线 — 语法错误(必须修复)
  • 黄色波浪线 — 语义警告(建议修复)
  • 绿色标记 — 验证通过

点击错误标记可跳转到对应代码位置。