From 13352832798dbb770c6467aedf5e41eedf3079ca Mon Sep 17 00:00:00 2001 From: chentianya Date: Wed, 26 Aug 2026 08:53:07 +0800 Subject: [PATCH] =?UTF-8?q?=E9=98=B6=E6=AE=B53=EF=BC=9AA4=20=E4=BF=AE?= =?UTF-8?q?=E8=AE=A2=E2=80=94=E2=80=94V2=20=E6=94=AF=E6=8C=81=E6=97=A5?= =?UTF-8?q?=E6=9C=9F=E5=AD=97=E9=9D=A2=E9=87=8F=EF=BC=88D#/TOD#/DT#?= =?UTF-8?q?=EF=BC=8C=E7=BA=AA=E5=85=83=201970=EF=BC=8C=E6=97=A0=E5=B0=8F?= =?UTF-8?q?=E6=95=B0=E7=A7=92=EF=BC=8C=E5=B9=B4=201..9999=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Doc/compiler/阶段3-语言层V2.md | 5 +++-- Doc/isa/指令集优化.md | 2 +- Doc/isa/阶段1规格总览.md | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/Doc/compiler/阶段3-语言层V2.md b/Doc/compiler/阶段3-语言层V2.md index a945ee6..f8eca85 100644 --- a/Doc/compiler/阶段3-语言层V2.md +++ b/Doc/compiler/阶段3-语言层V2.md @@ -27,11 +27,12 @@ | 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 枚举 | ⏳ | +| ~~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. 执行步骤(决策点解决后按序) -1. **Lexer V2**:19 类型关键字 + 15 FB 名(IDENT 化)+ FLOAT_LIT + 进制前缀(2#/8#/16# → 十进制换算) -2. **Parser V2**:TypeRef 字符串化 + LitReal + 类型解析(L6/L7 落地) +1. **Lexer V2**:19 类型关键字 + 15 FB 名(IDENT 化)+ FLOAT_LIT + 进制前缀(2#/8#/16# → 十进制换算)+ 日期字面量(D#/TOD#/DT#,最长匹配,历法换算与值域检查) +2. **Parser V2**:TypeRef 字符串化 + LitReal/LitDate/LitTod/LitDt + 类型解析(L6/L7 落地) 3. **Typecheck V2**:禁隐式转换 / BOOL 0/1 强制 / 字面量上下文适配 / FB 校验三层判定(L1/L2/L3) 4. **Linker 适配**:FbField.type 字符串化(L8) 5. **Codegen 适配**:浮点字面量(LOADK func 8/9 位模式)、REAL 变量/运算路径 diff --git a/Doc/isa/指令集优化.md b/Doc/isa/指令集优化.md index 9ade0d6..3577718 100644 --- a/Doc/isa/指令集优化.md +++ b/Doc/isa/指令集优化.md @@ -194,7 +194,7 @@ | ~~A1~~ | ~~元数据段格式~~ | **已定案(U12)**:v1 0 长度占位(offset_meta=0),schema 延后 | | ~~A2~~ | ~~常量内嵌 vs 常量表~~ | **已定案**:常量表(8B LOADK 查表);LOADK 用 type 位段解释;条目 8B 无 tag;IMM64 预留不发射 | | A3 | 内建 FB 字段类型化 | **已定案**:字段类型化(TON: in/pt/q/et = BOOL/TIME/BOOL/TIME;R_TRIG: clk/q = BOOL/BOOL);计数器单/双字(INT/DINT)**编码形式 = fb 表拆条**(CTU/DCTU/CTD/DCTD/CTUD/DCTUD 6 条,名字即宽度)——U5 已定案 | -| A4 | DATE/TOD/DT 字面量 | **已定案**:v1 **不支持**(类型存在,仅声明/存取/比较,无 `D#/TOD#/DT#` 字面量语法) | +| A4 | DATE/TOD/DT 字面量 | **已定案(V2 修订)**:**V2 支持** IEC 格式 `D#2026-8-24`/`TOD#12:30:00`/`DT#2026-8-24-12:30:00`;纪元 1970-01-01=0 天;TOD 无小数秒;年 1..9999(详见阶段3-语言层V2.md L10) | | A5 | 算术语义细化 | **已定案**:饱和模板化到各宽度(SINT/DINT/LINT);TIME+TIME / TIME-TIME / TIME 比较;浮点 IEEE 常规(溢出→±inf、0 除→±inf、NaN 传播,无特判);DATE/TOD/DT **不做运算**(仅存取/比较) | | A6 | sidecar/I/O 绑定 | **已定案**:与现状一致——绑定粒度仍 `slot = 槽号`(指向槽表条目),channel/bit 语义不变 | | A7 | disasm 文本格式 | **已定案**:**类型后缀**形式:`LOAD.I16 r5, s3`、`STORE.U32 s1, r7`、`ADD.F64 r1, r2, r3` | diff --git a/Doc/isa/阶段1规格总览.md b/Doc/isa/阶段1规格总览.md index f9fb069..eb6585e 100644 --- a/Doc/isa/阶段1规格总览.md +++ b/Doc/isa/阶段1规格总览.md @@ -39,7 +39,7 @@ - **槽表(8B/条 {addr:u32, 预留:u32})→ 值区**:两级间接;全 32 位寻址(槽 2^32、值区 4GB) - **值区变宽紧凑**:1/2/4/8B 对齐编译器保证(值段起点 16 对齐) - **类型**:19 IEC 类型 → **10 种 func** 编译期映射;BOOL 编译器强制 0/1;字面量按上下文适配、默认 DINT 兜底;进制前缀 2#/8#/16#;**禁隐式变量转换**(编译期报错) -- **DATE/TOD/DT**:DATE=u32(天)、TOD=u32(当日 ms)、DT=u64 {date:32|tod:32} 拼接;v1 不运算 +- **DATE/TOD/DT**:DATE=u32(天)、TOD=u32(当日 ms)、DT=u64 {date:32|tod:32} 拼接;v1 不运算(仅存取/比较);**字面量 V2 支持**(D#/TOD#/DT#,纪元 1970) - **常量表**:条目 8B 原始值(无 tag),LOADK 按 func 解释,同值多类型复用 ## 4. 执行语义(定案)