Dasha中DSL中的一些字段的作用是什么?

What is the purpose of some fields in DSL in Dasha?

我想知道我们需要以下字段的内容:

node call_reason
{
    do
    {
        digression disable sayHi;
        goto next;
    }
    
    transitions
    {
        next: goto how_are_you;
    }
}

我想,你问这个问题是因为你对语法有点困惑,我会尽量把它说清楚。

节点和过渡

DashaScript 是描述自动对话的语言。基本上,任何对话脚本都包含

  • 节点 - 你的对话状态(请参阅node doc
  • transitions - 节点之间的关系,由从当前节点切换到另一个节点的条件描述。共有三种不同类型的转换,例如示例代码中使用的即时转换(请参阅transitions doc)。

在某种意义上,脚本对话可以被认为是graph。在这种情况下,nodestransitions 可以解释为 verticesedges 分别是一张图。

因此,nodetransition 定义了对话脚本的结构。

每个 node 都有 do 小节,您可以在其中指定要在此特定 node 中执行的操作和指令。

此外,node可能有小节transitions,用于指定将当前状态切换到另一个状态的条件。
本节中指定的每个事件转换(如事件转换和定时器转换)都具有以下语法:<transition_name>: goto <node_name> on <switching_condition>
即时转换(就像您的代码中使用的那样)没有条件:<transition_name>: goto <node_name>。要执行这种转换,必须在当前节点的 do 部分使用 goto 指令调用它。

此外,还有可以从任何状态访问的特殊节点。这些节点称为离题。 (参见 digressions doc). They are used to make fast reactions in your conversation and return to main branch of conversation. To control digression, we have mechanism of enabling/disabling them (see digression-control doc)。

因此,在您的示例中,名称为 call_reasonnode 具有 do 部分,其中您 disable 递减节点然后即时转换名称为 next 被执行。

上面提到的DashaScript语言的所有实体在program structure docs中都有描述。我建议您检查一下,因为您可能需要了解更多重要的实体。

设置

set 是用于为某个变量赋值的指令。示例:

node some_node
{
    do {
        var some_variable: number = 1;
        set some_variable = 2; // now some_variable has value of 2
    }
}

退出

exit是打断对话的指令