Files
Interpreter/tests
Admin 6be2873c88 阶段3-1:编译器语言层 V2 完成(19 类型/字面量扩展/禁隐式转换/配置驱动 FB)
Lexer V2:
- 19 类型关键字(BOOL..DT);FB 名不再设关键字(IDENT)
- FLOAT_LIT(1.5/2.5e3)、进制前缀(2#/8#/16# 换算十进制)
- 日期字面量 D#/TOD#/DT#(历法换算 1970 纪元、闰年、值域检查)

Parser V2:
- TypeRef 字符串化(TypeKind{Scalar,FbBuiltin,FbUser},名字小写)
- ExprKind 增 LitReal/LitDate/LitTod/LitDt;Expr.double_value
- IDENT 类型统一 FbUser(内建判定在 Linker 查 fb 表)

Typecheck V2:
- TType 19 + Unresolved(字面量未定型)
- 禁隐式转换(赋值/算术/比较严格同型)
- resolve_to:未定型→消费点定型+值域检查(BOOL 0/1、无符号负数、
  溢出、浮点仅 REAL/LREAL);算术按 kind 允许(TIME 仅 ±)
- Call 实参按函数参数类型;check_project 加 cfg

Linker V2:
- FbField.type_name 字符串化;内建 FB 布局查 machine.toml [[fb]] 表
  (删 8 个硬编码布局,带缓存);link_project 加 cfg

Codegen V2:
- 浮点/日期字面量(LOADK func 8/4/4/6;LitReal 按 REAL 装载,LREAL TODO)
- 算术/比较 func 按操作数类型(expr_func)
- TypeKind 连锁适配

main.cpp:link/check 传 cfg;--disasm 头 22 字段逐行中文注释(L5)
+ slots 节;StbView 补 offset_const/offset_funcs

测试适配:parser/linker/typecheck/vm/cases 适配新接口与 V2 语义。
ctest 11/13(vm_cycles/cases_all 待阶段 4)。codegen_test 仍剥离(阶段 3-2 重写)。
2026-08-26 09:29:31 +08:00
..

tests

自动化用例,由顶层 enable_testing() 接入 CTest。

可以 add_testSTCompiler / 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/,本目录放断言和负例。