From 250a0c9fac013094bdf21f264bd3a1d00d7220f1 Mon Sep 17 00:00:00 2001 From: chentianya Date: Wed, 26 Aug 2026 08:58:19 +0800 Subject: [PATCH] =?UTF-8?q?=E9=98=B6=E6=AE=B53=E6=96=87=E6=A1=A3=EF=BC=9AL?= =?UTF-8?q?4/L6/L7/L8=20=E5=AE=9A=E6=A1=88=EF=BC=88=E5=AD=97=E9=9D=A2?= =?UTF-8?q?=E9=87=8F=20AST=20/=20FB=20=E4=B8=89=E5=B1=82=E5=88=A4=E5=AE=9A?= =?UTF-8?q?=20/=20TypeKind=20=E5=AD=97=E7=AC=A6=E4=B8=B2=E5=8C=96=20/=20Li?= =?UTF-8?q?nker=20=E6=9F=A5=20toml=EF=BC=89=E2=80=94=E2=80=94=E5=86=B3?= =?UTF-8?q?=E7=AD=96=E7=82=B9=E5=85=A8=E9=83=A8=E9=97=AD=E5=90=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Doc/compiler/阶段3-语言层V2.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Doc/compiler/阶段3-语言层V2.md b/Doc/compiler/阶段3-语言层V2.md index f8eca85..b417291 100644 --- a/Doc/compiler/阶段3-语言层V2.md +++ b/Doc/compiler/阶段3-语言层V2.md @@ -22,11 +22,11 @@ | ~~L2~~ | ~~禁隐式转换范围~~ | **已定案(用户)**:**变量间禁止任何隐式类型转换**(赋值/算术/比较严格同型 → type error);**整数字面量 / 浮点字面量按上下文适配**,上下文冲突直接报错(例:a 是 UINT,`a := -1` → 越域报错);**TIME/DATE 等字面量有格式要求**(见 L9) | ✅ | | ~~L9~~ | ~~字面量类型化语法~~ | **已定案**:不强制类型前缀——整数字面量(含进制 `16#FF`)/ 浮点字面量(`1.5`)**无类型、按上下文适配 + 值域检查**(冲突即报错,不转换);TIME 字面量沿用 V1 格式(`5s`,单位后缀)并可类型化;DATE/TOD/DT 字面量 v1 不支持(A4) | ✅ | | ~~L3~~ | ~~字面量适配规则~~ | **已定案(随 L2/L9)**:整数/浮点按上下文适配 + 值域检查(冲突报错);进制字面量同规则;无默认类型兜底 | ✅ | -| L4 | 浮点字面量 AST | 新增 ExprKind::LitReal(double 值) | ⏳ | +| ~~L4~~ | ~~浮点/日期字面量 AST~~ | **已定案**:ExprKind 新增 **LitReal**(double_value)/ **LitDate**(天数)/ **LitTod**(当日 ms)/ **LitDt**(date<<32\|tod);Expr 加 double_value 字段;词法 FLOAT_LIT/DATE_LIT/TOD_LIT/DT_LIT | ✅ | | L5 | codegen_test 断言范围 | Codec disasm 文本 / 槽表值段布局 / 常量表 8B / max_stack / 头字段 | ⏳ | -| L6 | FB 类型名表示 | IDENT + 三层判定(toml fb 表 → 用户 FB 符号表 → toml type 表 → 报错),废除 8 个 FB Tok | ⏳ | -| L7 | TypeKind 表示 | 统一存类型名字符串(小写,查 machine.toml)+ kind 简化(Scalar/FbBuiltin/FbUser) | ⏳ | -| L8 | Linker FbField.type | 字符串类型名(与 L7 一致),替换 TypeKind 枚举 | ⏳ | +| ~~L6~~ | ~~FB 类型名表示~~ | **已定案**:废除 8 个 FB 关键字 Tok;FB 名一律 IDENT;类型解析统一判定:① toml `[[fb]]` 表(内建,布局查 toml)→ ② 用户 FB 符号表(源码 FUNCTION_BLOCK)→ ③ toml `[[type]]` 表(标量)→ ④ 未命中报错 | ✅ | +| ~~L7~~ | ~~TypeKind 表示~~ | **已定案**:TypeKind 收为 {Scalar, FbBuiltin, FbUser};TypeRef.name 统一小写类型名(标量 = type 表键 / FB = fb 表名或用户声明名);删 TypeKind::Bool/Int/Time(Parser/Typecheck/Linker/Codegen 连锁适配) | ✅ | +| ~~L8~~ | ~~Linker 字段类型字符串化~~ | **已定案**:FbField.type → **FbField.type_name**(小写字符串);`link_project` 加 `const MachineConfig& cfg` 参数(main 传参);删除 8 个硬编码布局;`builtin_layout(name)` 查 cfg `[[fb]]` 表构建 FbLayout(带缓存) | ✅ | | ~~L10~~ | ~~日期字面量(A4 修订)~~ | **已定案(用户)**:V2 支持 `D#2026-8-24`/`TOD#12:30:00`/`DT#2026-8-24-12:30:00`(IEC 格式,强类型字面量);纪元 1970-01-01=0 天(与 RTC 一致);TOD 不支持小数秒;年范围 1..9999;换算:历法→天数(闰年)、TOD=时×3600000+分×60000+秒×1000 | ✅ | ## 3. 执行步骤(决策点解决后按序)