feat: WIP
This commit is contained in:
96
docs/eval/eval.mmd
Normal file
96
docs/eval/eval.mmd
Normal file
@@ -0,0 +1,96 @@
|
||||
flowchart TD
|
||||
Start([EvalCtx::eval]) --> Eval[EvalContext::eval]
|
||||
Eval --> AddNode[为本即将求值表达式分配 ValueId,添加至图中]
|
||||
AddNode --> CheckType{检查表达式类型}
|
||||
|
||||
CheckType -->|AttrSet| A_EvalKeys[强制求值所有键]
|
||||
A_EvalKeys --> A_Construct[构造 AttrSet]
|
||||
A_Construct --> End
|
||||
A_EvalKeys -.->|eval| Eval
|
||||
|
||||
CheckType -->|List| L_Construct[构造列表]
|
||||
L_Construct --> End
|
||||
|
||||
CheckType -->|HasAttr| HA_ForceAttrSet[强制求值 AttrSet]
|
||||
HA_ForceAttrSet --> HA_ForceAttrPath[强制求值 AttrPath]
|
||||
HA_ForceAttrPath --> HA_Result[求出结果]
|
||||
HA_Result --> End
|
||||
HA_ForceAttrSet -.->|eval| Eval
|
||||
HA_ForceAttrPath -.->|eval| Eval
|
||||
|
||||
CheckType -->|BinOp| B_ForceLeft[强制求值左操作数]
|
||||
B_ForceLeft --> B_ForceRight[强制求值右操作数]
|
||||
B_ForceRight --> B_Apply[应用操作符]
|
||||
B_Apply --> End
|
||||
B_ForceLeft -.->|eval| Eval
|
||||
B_ForceRight -.->|eval| Eval
|
||||
|
||||
CheckType -->|UnOp| U_ForceOperand[强制求值操作数]
|
||||
U_ForceOperand --> U_Apply[应用操作符]
|
||||
U_Apply --> End
|
||||
U_ForceOperand -.->|eval| Eval
|
||||
|
||||
CheckType -->|Select| S_ForceAttrSet[强制求值 AttrSet]
|
||||
S_ForceAttrSet --> S_ForceAttrPath[强制求值 AttrPath]
|
||||
S_ForceAttrPath --> S_Result[获取结果]
|
||||
S_Result --> End
|
||||
S_ForceAttrSet -.->|eval| Eval
|
||||
S_ForceAttrPath -.->|eval| Eval
|
||||
|
||||
CheckType -->|If| I_ForceCond[强制求值条件]
|
||||
I_ForceCond --> I_Cond{判断条件}
|
||||
I_Cond -->|true| I_Consq[返回 then]
|
||||
I_Cond -->|false| I_Alter[返回 else]
|
||||
I_Consq --> End
|
||||
I_Alter --> End
|
||||
I_ForceCond -.->|eval| Eval
|
||||
|
||||
CheckType -->|Call| C_RegArg[注册函数参数]
|
||||
C_RegArg --> C_ForceBody[强制求值函数体]
|
||||
C_ForceBody --> End
|
||||
C_ForceBody -.->|eval| Eval
|
||||
|
||||
CheckType -->|With| W_ForceNameSpace[强制求值命名空间]
|
||||
W_ForceNameSpace --> W_EnterWith[进入命名空间]
|
||||
W_EnterWith --> W_ForceBody[强制求值表达式]
|
||||
W_ForceBody --> W_ExitWith[退出命名空间]
|
||||
W_ExitWith --> End
|
||||
W_ForceNameSpace -.->|eval| Eval
|
||||
W_ForceBody -.->|eval| Eval
|
||||
|
||||
CheckType -->|Assert| As_ForceCond[强制求值断言]
|
||||
As_ForceCond --> As_Cond{判断断言}
|
||||
As_Cond -->|true| As_ForceBody[强制求值表达式]
|
||||
As_Cond -->|false| As_Throw[抛出 Catchable]
|
||||
As_ForceBody --> End
|
||||
As_ForceCond -.->|eval| Eval
|
||||
As_ForceBody -.->|eval| Eval
|
||||
|
||||
CheckType -->|ConcatStrings| CS_ForceParts[强制求值所有字符串片段]
|
||||
CS_ForceParts --> CS_Construct[构造字符串]
|
||||
CS_Construct --> End
|
||||
CS_ForceParts -.->|eval| Eval
|
||||
|
||||
CheckType -->|Const| Co_Construct[构造常量]
|
||||
Co_Construct --> End
|
||||
|
||||
CheckType -->|Str| St_Construct[构造字符串]
|
||||
St_Construct --> End
|
||||
|
||||
CheckType -->|Var| V_Lookup[动态查找变量]
|
||||
V_Lookup --> End
|
||||
|
||||
CheckType -->|Arg| Ar_Lookup[查找参数]
|
||||
Ar_Lookup --> End
|
||||
|
||||
CheckType -->|Func| F_Construct[构造函数]
|
||||
F_Construct --> End
|
||||
|
||||
CheckType -->|StrictRef| SR_Eval[求值被引用表达式]
|
||||
SR_Eval --> Eval
|
||||
|
||||
CheckType -->|LazyRef| LR_Resolve[解析动态变量引用]
|
||||
LR_Resolve --> LR_Contruct[构造惰性引用]
|
||||
LR_Contruct --> End
|
||||
|
||||
End([返回结果])
|
||||
92
docs/resolve/resolve.mmd
Normal file
92
docs/resolve/resolve.mmd
Normal file
@@ -0,0 +1,92 @@
|
||||
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([返回结果])
|
||||
Reference in New Issue
Block a user