ITADN

mermaid 中<br/> 报错,html_elements_cant_self_close

#104Openjiacai2050 创建于 2026-01-27
J
jiacai2050commented
```mermaid graph TD Start([源代码文件]) --> Parse[词法与语法分析 Parse] Parse --> Tokenize[标记化 Tokenization] Tokenize --> |UTF-8 字节流| TokenStream[Token 流<br/>零拷贝切片引用] TokenStream --> ASTBuild[构建 AST] ASTBuild --> AST[(抽象语法树 AST<br/>结构数组 SoA)] AST --> |紧凑内存布局<br/>主节点数组+额外数据数组| AstGen subgraph AstGen_Phase [AST 降级阶段 AstGen] AstGen[AST 降级 AstGen] AstGen --> ResultLoc{结果位置语义<br/>ResultLoc} ResultLoc --> |None/Discard| NoStore[不生成存储指令] ResultLoc --> |Return| ReturnOpt[直接返回优化] ResultLoc --> |Instruction| TempValue[临时值引用] ResultLoc --> |Block| BlockEnd[写入块末尾] NoStore --> ZIRGen[生成 ZIR 指令] ReturnOpt --> ZIRGen TempValue --> ZIRGen BlockEnd --> ZIRGen end ZIRGen --> ZIR[(Zig 中间表示 ZIR<br/>无类型指令序列)] ZIR --> |文件级缓存<br/>语法结构抽象| CheckCache{检查 ZIR 缓存} CheckCache --> |缓存命中| LoadCache[加载缓存的 ZIR] CheckCache --> |缓存未命中| GenerateZIR[生成新 ZIR] LoadCache --> Sema GenerateZIR --> Sema subgraph InternPool_System [统一存储系统] InternPool[(InternPool<br/>类型与值统一存储)] InternPool --> |去重 Interning| UniqueIndex[结构唯一性索引] InternPool --> |类型即值| TypeAsValue[Type 类型本身也是 Value] InternPool --> |轻量级比较| U32Compare[u32 索引比较] end Sema[语义分析 Sema<br/>ZIR 虚拟机+解释器] --> |访问| InternPool subgraph Sema_Phase [语义分析阶段 Sema] Sema --> ParseOperand[操作数解析] ParseOperand --> TypeInfer[类型推导与检查] TypeInfer --> Coloring{着色与分流} Coloring --> |所有操作数都是常量| ComptimePath[编译期路径 Comptime] Coloring --> |包含运行时变量或副作用| RuntimePath[运行时路径 Runtime] ComptimePath --> VMExecute[虚拟机中直接计算] VMExecute --> StoreValue[结果存入 InternPool] StoreValue --> InstMapConst[inst_map 记录为常量] RuntimePath --> EmitAIR[发射 AIR 指令] EmitAIR --> InstMapAIR[inst_map 记录为 AIR 引用] InstMapConst --> CheckDep{检查依赖} InstMapAIR --> CheckDep CheckDep --> |发现未分析函数| SuspendTask[挂起当前任务] SuspendTask --> AnalyzeDep[分析依赖函数] AnalyzeDep --> ResumeTask[恢复当前任务] CheckDep --> |遇到泛型调用| Monomorphize{单态化检查} Monomorphize --> |已有实例| ReuseInstance[重用已生成实例] Monomorphize --> |新类型参数| CloneZIR[克隆 ZIR] CloneZIR --> BindType[绑定类型参数] BindType --> GenerateSpecialized[生成专门化 AIR] end ResumeTask --> AIR ReuseInstance --> AIR GenerateSpecialized --> AIR AIR[(分析后中间表示 AIR<br/>全类型+SSA 形式)] AIR --> |显式控制流<br/>defer/errdefer/try 降级| Liveness Liveness[活跃度分析<br/>Liveness Analysis] Liveness --> Tombstone[生成墓碑表<br/>标记死亡点] Tombstone --> OptimizeResource[资源优化<br/>寄存器/栈槽重用] OptimizeResource --> BackendSelect{后端选择} subgraph CodeGen_Phase [代码生成阶段] BackendSelect --> |Debug 模式| SelfHosted[自举后端<br/>x86_64/ARM64/WASM] BackendSelect --> |Release 模式| LLVM[LLVM 后端] BackendSelect --> |跨平台| CBackend[C 后端] SelfHosted --> |直接生成| MachineCode1[机器码] LLVM --> ConvertLLVMIR[转换为 LLVM IR] ConvertLLVMIR --> OptimizePipeline[LLVM 优化管线<br/>循环展开/向量化/内联] OptimizePipeline --> MachineCode2[机器码] CBackend --> GenerateC[生成 C 代码] GenerateC --> CCompile[C 编译器编译] CCompile --> MachineCode3[机器码] MachineCode1 --> ImmediateRelease[即时释放 AIR 内存] MachineCode2 --> ImmediateRelease MachineCode3 --> ImmediateRelease end ImmediateRelease --> Link[链接阶段 Linking] subgraph Link_Phase [链接阶段] Link --> IncrementalCheck{增量编译检查} IncrementalCheck --> |有变化| CalculateSize{计算新代码大小} IncrementalCheck --> |无变化| SkipLink[跳过链接] CalculateSize --> |新代码 <= 旧空间| InPlace[原地覆盖] CalculateSize --> |新代码 > 旧空间| Append[追加到文件末尾<br/>修改跳转指令] InPlace --> UpdateBinary[更新二进制文件] Append --> UpdateBinary UpdateBinary --> CrossCompile{交叉编译} CrossCompile --> |根据 Target Triple| LoadConfig[加载平台配置] LoadConfig --> LinkLibc[链接 libc 和依赖] end SkipLink --> Output LinkLibc --> Output Output([可执行文件]) style Parse fill:#e1f5ff style AST fill:#fff4e1 style ZIR fill:#ffe1f5 style Sema fill:#f5e1ff style InternPool fill:#e1ffe1 style AIR fill:#fff4e1 style BackendSelect fill:#e1f5ff style Link fill:#ffe1e1 style Output fill:#90EE90 style ComptimePath fill:#FFD700 style RuntimePath fill:#FF6347 style InternPool fill:#00CED1 ``` 目前如果 mermaid 里面有 `<br/>` 时,Zine 会报错 html_elements_cant_self_close _Originally posted by @jiacai2050 in https://github.com/zigcc/zigcc.github.io/issues/103#issuecomment-3802567869_
5 条评论