# working2 GRL 程序集 Manifest

版本：0.1
日期：2026-06-28

## 1. 目录目标

本 manifest 将 `通用机器人编程语法规范.md` 的语法和语义要求映射到 ABB120 GRL 程序、静态诊断测试、后处理测试和虚拟控制器执行证据。

目标程序目录：

```text
kdl-wasm/web/tests/fixtures/abb120/spec-programs/
```

机器可读 manifest：

```text
kdl-wasm/web/tests/fixtures/abb120/spec-programs/manifest.json
```

## 2. 覆盖层级

| 层级 | 含义 |
| --- | --- |
| Runtime | 必须进入虚拟控制器执行，并产出 controller/trace/motion queue/IO 证据。 |
| Static | 必须由 parser/semantic/KDL diagnostic 覆盖，不要求 happy path 执行。 |
| Post | 必须由 ABB/FANUC/KUKA 后处理、导入回读或 report 覆盖。 |

## 3. 程序清单

### 3.1 Runtime

| 程序 | 覆盖章节 | 核心语法 |
| --- | --- | --- |
| `W2_00_MinimalModule.grl` | 4、5、6、9、10、23 | language、module、const、speed、zone、joint_target、movej、proc main。 |
| `W2_10_DataTargetToolFrame.grl` | 6、8、9 | bool/int/real/string/time/length/angle/percent、tool、frame、pose、poseq、joint_target、pose_target。 |
| `W2_20_ExpressionMath.grl` | 7 | 算术、比较、逻辑、括号、单位后缀、pi/e、三角函数、数值函数、编译期求值。 |
| `W2_30_MotionAllTypes.grl` | 10 | movej、movel、movec、set_tool、set_frame、set_speed、set_zone、inline 参数优先级。 |
| `W2_40_PathEvents.grl` | 11 | path defaults/source、point、event before/after/at distance、run_path。 |
| `W2_50_OperationProcess.grl` | 12 | operation kind/process/start_action/end_action、run_operation。 |
| `W2_60_IOWaitPulse.grl` | 13 | io.di/do/ai/ao/gi/go/ri/ro、wait、timeout、on_timeout、pulse、all/any/rising/falling/changed。 |
| `W2_70_ControlFlow.grl` | 14 | if/elseif/else、while、for、switch、break、continue。 |
| `W2_80_ProcFuncCall.grl` | 15 | proc、in/out/inout、call、return、func 返回值、作用域。 |
| `W2_90_ExceptionAlarm.grl` | 16 | alarm、raise、try/catch/finally。 |
| `W2_99_FullSpecExample.grl` | 24 | 规范完整示例的 tool/frame、path、operation、IO event、run_operation 和回 home。 |

### 3.2 Static/error

| 程序 | 覆盖章节 | 预期诊断 |
| --- | --- | --- |
| `W2_E10_ExpressionDiagnostics.grl` | 7、22 | `GRL_EXPR_PARSE`、`GRL_EXPR_UNKNOWN_SYMBOL`、`GRL_EXPR_UNKNOWN_FUNCTION`、`GRL_EXPR_ARITY`、`GRL_EXPR_DOMAIN`、`GRL_EXPR_DIV_ZERO`、`GRL_EXPR_UNIT_MISMATCH`、`GRL_EXPR_NON_CONSTANT`。 |
| `W2_E20_SemanticDiagnostics.grl` | 6、15、22 | 重复符号、类型不匹配、缺失引用、out/inout 非左值、func 缺少 return、func 副作用。 |
| `W2_E30_MotionDiagnostics.grl` | 8、9、10、11、22 | 关节限位、不可达 pose、movec 共线、缺少 motion 参数、空 path、重复 path point。 |
| `W2_E40_ControlFlowDiagnostics.grl` | 14、22 | 非法 break/continue、jump 进入块、重复 case、非常量 case、缺失 label。 |
| `W2_E50_RuntimeTimeout.grl` | 13、16 | wait timeout、on_timeout alarm/call、报警 source map。 |

### 3.3 Post/import

| 程序 | 覆盖章节 | 预期报告 |
| --- | --- | --- |
| `W2_P10_BrandHints.grl` | 18、20 | `post_hint`、`@brand.*` 消费或报告。 |
| `W2_P20_CrossBrandMotion.grl` | 20 | ABB/FANUC/KUKA motion、speed、zone、IO、wait 映射。 |
| `W2_P30_Roundtrip.grl` | 19、20、21 | post 后导入回读，motion/path/operation 等价或差异明确。 |

## 4. 语法规范覆盖矩阵

| 规范章节 | 覆盖层级 | 程序或测试 |
| --- | --- | --- |
| 4. 词法规则 | Runtime/Static | `W2_00_MinimalModule`、lexer/parser tests。 |
| 5. 顶层结构 | Runtime | `W2_00_MinimalModule`。 |
| 6. 类型系统 | Runtime/Static | `W2_10_DataTargetToolFrame`、`W2_E20_SemanticDiagnostics`。 |
| 7. 表达式与运算 | Runtime/Static/Post | `W2_20_ExpressionMath`、`W2_E10_ExpressionDiagnostics`、`W2_P20_CrossBrandMotion`。 |
| 8. 坐标、工具和目标点 | Runtime/Static | `W2_10_DataTargetToolFrame`、`W2_E30_MotionDiagnostics`。 |
| 9. 速度和过渡 | Runtime/Post | `W2_20_ExpressionMath`、`W2_30_MotionAllTypes`、`W2_P20_CrossBrandMotion`。 |
| 10. 运动指令 | Runtime/Static/Post | `W2_30_MotionAllTypes`、`W2_E30_MotionDiagnostics`、`W2_P20_CrossBrandMotion`。 |
| 11. Path 语法 | Runtime/Static | `W2_40_PathEvents`、`W2_E30_MotionDiagnostics`。 |
| 12. Operation 语法 | Runtime/Post | `W2_50_OperationProcess`、`W2_P30_Roundtrip`。 |
| 13. IO 与等待 | Runtime | `W2_60_IOWaitPulse`、`W2_E50_RuntimeTimeout`。 |
| 14. 流程控制 | Runtime/Static | `W2_70_ControlFlow`、`W2_E40_ControlFlowDiagnostics`。 |
| 15. 子程序和函数 | Runtime/Static | `W2_80_ProcFuncCall`、`W2_E20_SemanticDiagnostics`。 |
| 16. 异常、报警和中断 | Runtime/Static | `W2_90_ExceptionAlarm`；trap/interrupt 先做 static 边界。 |
| 17. 多任务 | Runtime/Static | `W2_90_ExceptionAlarm` 的 task 边界 warning。 |
| 18. 品牌扩展和后处理提示 | Post | `W2_P10_BrandHints`。 |
| 19. 自动编程生成规则 | Post | `W2_P30_Roundtrip`、generator roundtrip tests。 |
| 20. 后处理映射规则 | Post | `W2_P20_CrossBrandMotion`。 |
| 21. 编译语义和 IR | Runtime/Static | 所有 runtime/error 程序的 compile evidence。 |
| 22. 语义检查 | Runtime/Static | `W2_E10` 到 `W2_E50`。 |
| 23. EBNF 语法草案 | Runtime/Static | `W2_00_MinimalModule`、parser coverage test 和 grammar fixtures。 |
| 24. 完整示例 | Runtime/Post | `W2_99_FullSpecExample` 覆盖完整 path/operation/proc 运行结构；`W2_P30_Roundtrip` 覆盖 post 后导入回读。 |
| 25. 实施优先级 | Runtime/Static/Post | P0 全部映射到上述程序；P1 进入 static/post 边界。 |

## 5. 证据要求

每个程序必须记录：

1. `program_id`
2. `spec_sections`
3. `coverage_level`
4. `expected_status`
5. `expected_diagnostics`
6. `runtime_commands`
7. `artifact_paths`

最终 suite manifest 应生成为 JSON，供 CI 和 HTML 虚拟控制器读取。

## 6. 当前实现状态

| 项 | 状态 | 证据 |
| --- | --- | --- |
| 程序文件 | Done | `spec-programs/runtime` 11 个、`static` 3 个、`error` 2 个、`post` 3 个；manifest 层级统计 Runtime 12、Static 4、Post 3。 |
| 机器可读 manifest | Done | `spec-programs/manifest.json`。 |
| suite runner | Done | `kdl-wasm/web/src/suites/abb120SpecSuite.ts`。 |
| job 生成命令 | Done | `npm run suite:abb120-spec`。 |
| 最新 job | Done | `kdl-wasm/web/test-results/abb120-spec/W2-JOB-20260628022836-51484d62`。 |
