从 Mercury 到高级 C 代码的编译方案
1 不同代码模型间的转换
当一个 m foo
目标出现在 m bar
上下文(其中 foo ≠ bar
)时,需要修改为该目标生成的代码,使其符合 m bar
预期的调用约定。通常,确定性分析会确保上下文预期的确定性比目标的确定性更宽松。具体有以下几种情况:
- m det
目标在 m semi
上下文:
succeeded = Goal
=⇒
do Goal
succeeded = TRUE;
-
m det
目标在m non
上下文:
Goal && Cont()
=⇒
do Goal
Cont();
-
m semi
目标在m non
上下文:
Goal && Cont()
=⇒
bool succeeded;
succeeded = Goal
if (succeeded) Cont();
<