93 lines
3.1 KiB
Plaintext
93 lines
3.1 KiB
Plaintext
flowchart TD
|
|
Start([ResolveCtx::resolve_root]) --> Resolve[ResolveContext::resolve]
|
|
Resolve --> CheckType{检查表达式类型}
|
|
|
|
CheckType -->|AttrSet| A_ResolveKeys[解析所有键]
|
|
A_ResolveKeys --> A_ResolveValues[解析所有值]
|
|
A_ResolveValues --> End
|
|
A_ResolveKeys -.->|resolve| Resolve
|
|
A_ResolveValues -.->|resolve| Resolve
|
|
|
|
CheckType -->|List| L_ResolveElements[解析所有元素]
|
|
L_ResolveElements --> End
|
|
L_ResolveElements -.->|resolve| Resolve
|
|
|
|
CheckType -->|HasAttr| HA_ResolveAttrSet[解析 AttrSet]
|
|
HA_ResolveAttrSet --> HA_ResolveAttrPath[解析 AttrPath]
|
|
HA_ResolveAttrPath --> End
|
|
HA_ResolveAttrSet -.->|resolve| Resolve
|
|
HA_ResolveAttrPath -.->|resolve| Resolve
|
|
|
|
CheckType -->|BinOp| B_ResolveLeft[解析左操作数]
|
|
B_ResolveLeft --> B_ResolveRight[解析右操作数]
|
|
B_ResolveRight --> End
|
|
B_ResolveLeft -.->|resolve| Resolve
|
|
B_ResolveRight -.->|resolve| Resolve
|
|
|
|
CheckType -->|UnOp| U_ResolveOperand[解析操作数]
|
|
U_ResolveOperand --> End
|
|
U_ResolveOperand -.->|resolve| Resolve
|
|
|
|
CheckType -->|Select| S_ResolveAttrSet[解析 AttrSet]
|
|
S_ResolveAttrSet --> S_ResolveAttrPath[解析 AttrPath]
|
|
S_ResolveAttrPath --> End
|
|
S_ResolveAttrSet -.->|resolve| Resolve
|
|
S_ResolveAttrPath -.->|resolve| Resolve
|
|
|
|
CheckType -->|If| I_ResolveCond[解析条件]
|
|
I_ResolveCond --> I_ResolveConsq[解析 then 分支]
|
|
I_ResolveConsq --> I_ResolveAlter[解析 else 分支]
|
|
I_ResolveAlter --> End
|
|
I_ResolveCond -.->|resolve| Resolve
|
|
I_ResolveConsq -.->|resolve| Resolve
|
|
I_ResolveAlter -.->|resolve| Resolve
|
|
|
|
CheckType -->|Call| C_ResolveFunc[解析函数]
|
|
C_ResolveFunc --> C_ResolveArg[解析参数]
|
|
C_ResolveArg --> End
|
|
C_ResolveFunc -.->|resolve| Resolve
|
|
C_ResolveArg -.->|resolve| Resolve
|
|
|
|
CheckType -->|Let| Le_EnterLet[进入 Let 环境]
|
|
Le_EnterLet --> Le_ResolveValues[解析所有键]
|
|
Le_ResolveValues --> Le_ResolveBody[解析表达式]
|
|
Le_ResolveBody --> Le_ExitLet[退出 Let 环境]
|
|
Le_ExitLet --> End
|
|
Le_ResolveValues -.->|resolve| Resolve
|
|
Le_ResolveBody -.->|resolve| Resolve
|
|
|
|
CheckType -->|With| W_ResolveNameSpace[解析命名空间]
|
|
W_ResolveNameSpace --> W_EnterWith[进入命名空间]
|
|
W_EnterWith --> W_ResolveBody[解析表达式]
|
|
W_ResolveBody --> W_ExitWith[退出命名空间]
|
|
W_ExitWith --> End
|
|
W_ResolveNameSpace -.->|resolve| Resolve
|
|
W_ResolveBody -.->|resolve| Resolve
|
|
|
|
CheckType -->|Assert| As_ResolveCond[解析断言]
|
|
As_ResolveCond --> As_ResolveBody[解析表达式]
|
|
As_ResolveBody --> End
|
|
As_ResolveCond -.->|resolve| Resolve
|
|
As_ResolveBody -.->|resolve| Resolve
|
|
|
|
CheckType -->|ConcatStrings| CS_ResolveParts[解析所有字符串片段]
|
|
CS_ResolveParts --> End
|
|
CS_ResolveParts -.->|resolve| Resolve
|
|
|
|
CheckType -->|Const| End
|
|
|
|
CheckType -->|Str| End
|
|
|
|
CheckType -->|Var| V_Lookup[查找变量]
|
|
V_Lookup --> End
|
|
|
|
CheckType -->|Arg| Ar_Lookup[查找参数]
|
|
Ar_Lookup --> End
|
|
|
|
CheckType -->|Func| F_EnterEnv[进入函数环境]
|
|
F_EnterEnv --> F_ResolveBody[解析函数体]
|
|
F_ResolveBody --> F_ExitEnv[退出函数环境]
|
|
F_ExitEnv --> End
|
|
|
|
End([返回结果])
|