跳转到内容

控制流与 Section 拓扑

命名节、单向跳转、子调用与返回栈

根节按源码顺序执行,跳过命名节的正文。命名节正文必须比 === Label === 更深;退回声明层级后恢复根节。声明后紧接的顶格正文也属于根节,不会被自动收入命名节。

Start() 默认只执行根节。只有命名节、根节为空的文件会直接结束;要运行某个命名节,须在根节显式跳转/调用,或由宿主指定入口。

: 故事开始。
=> Greeting
: 继续主线。
-> end
=== Greeting ===
爱丽丝: 欢迎来到这里。
-> return

这里 => Greeting 会建立返回位置,-> return 回到“继续主线”。如果改用 -> Greeting,原调用栈会清空,不能再假定存在可返回的位置。

指令 语义
-> Label 清空调用栈并跳至目标节
=> Label 记录返回位置并调用目标节
-> return 弹出调用帧;没有调用帧时属于控制流错误
-> break 退出最近活动循环,继续其后的内容
-> end Main 根节内结束会话;Main 命名节清栈恢复其后根节点;辅助结束自身

命名节自然结束与其中的 -> end 行为相同,不会自动执行调用返回;需要返回就明确写 -> return。宿主也可用 Start(entryLabel: "Greeting") 指定入口,但该方式没有建立调用返回位置,上例仍需通过根节调用才可执行末尾的 return。

Forward-only 不禁止向后跳转或循环。它表示重新执行不会自动撤销之前的外部副作用;重复进入带演出或状态修饰符的拍,会再次分发这些修饰符。

上述根节恢复是 Main 规则。辅助的命名节自然结束/end 只结束自身,不寻找根节后续;jump/call/return 仍保留身份,调用也必须显式 return。Main 可用 #.track(source="Greeting", name="greeting") 令辅助进入同一节;若没有调用栈,节末不能使用 return。外部文件入口未来从目标根节开始,但显式 URL 的格式和加载协议延期。