- ConfigType:base/kind/func(V1 的 tag/range 删除);ConfigOp:prefix/op/fmt/ func_mode(V1 的 opcode/class 删除);ConfigFb:fb_id(V1 的 opcode 删除) - 强校验:meta(version=2) / type 19 条全集·base 命中·kind 合法·func 与 (width,signed,float) 互锁 / op prefix 合法·prefix↔fmt 互锁·(prefix,op) 分区 唯一·func 类别·params 互锁 / fb 15 条全集·fb_id 唯一·字段命中 type 表 / op-fb 互锁(CAL↔fb 表) - TypeMeta:tag/range → func/kind - machine_test:V2 断言(正例 68 op/19 type/15 fb + 14 个负例) - 状态:compiler 库暂挂于 V1 Codec/Codegen/Stb/main(下一步按 Codec → Stb → Codegen → main 顺序 V2 化)
tests
自动化用例,由顶层 enable_testing() 接入 CTest。
可以 add_test 调 STCompiler / BytecodeExecutor(编译→执行管线),或直接链接 compiler + vm 做单元断言。样例工程数据按「一份 toml + 若干 .st」分子目录存放,不要做成 library。
用例目录(cases/)
每个用例一个子目录:project.toml + .st + EXPECTED.md(期望:通过 / 报哪类错)。清单与编号见 Doc/初步计划.md 12.2 节,共 20 个:
- 正例:01 空 MAIN、02 BOOL、03 短路、04 IF、05 WHILE、07 算术、08 TIME、09 GVL+EXTERNAL、13 FUNCTION、15 FB、17 TON、18 TOF/CTU、20 line1
- 负例(编译错误/链接失败):10 非 GVL 写全局、11 同名全局、12 io.var 未声明、14 FUNCTION 写全局、16 未声明实例、19 循环调用
- 运行时故障:06 cycle_limit 打满
12.2 完成标准:目录和期望表齐,此时大部分还编不过,属正常。实现阶段逐个点亮。
第一版要冻的
- 关键字表与约 20 个样例程序
- 约 20 条指令编码
- 符号表字段:名字、种类、类型、地址、源文件
- 链接错误:重复
VAR_GLOBAL、非 GVL 文件写全局、io.var未声明
给人看的最小闭环放 examples/line1/,本目录放断言和负例。