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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions