Skip to content

mermaid 中<br/> 报错,html_elements_cant_self_close #104

@jiacai2050

Description

@jiacai2050
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
Loading

目前如果 mermaid 里面有 <br/> 时,Zine 会报错 html_elements_cant_self_close

Originally posted by @jiacai2050 in #103 (comment)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions