diff --git a/Frontend/Pages/Editor.razor b/Frontend/Pages/Editor.razor index 02aabb7..0877b9f 100644 --- a/Frontend/Pages/Editor.razor +++ b/Frontend/Pages/Editor.razor @@ -28,7 +28,7 @@ - + @@ -37,6 +37,12 @@ + + + + @@ -54,9 +60,12 @@ + + @code { private StandaloneCodeEditor _editor = null!; private AntList _logList = null!; + private GrammarHelp _grammarHelp = null!; private readonly List _logs = new(); @@ -65,6 +74,7 @@ Log("编辑器加载完成"); if (await GrammarStorage.RestoreGrammar()) { + await _editor.SetValue(RobotFactory.GrammarText); Log("从浏览器中恢复成功"); } else @@ -111,6 +121,11 @@ Log("清除浏览器中的语法成功"); } + private void HelpButtonClicked() + { + _grammarHelp.Show(); + } + private void Log(string message) { _logs.Add($"{DateTime.Now:HH:mm:ss} {message}"); diff --git a/Frontend/Pages/Editor.razor.css b/Frontend/Pages/Editor.razor.css index 449bbd8..b2bc49f 100644 --- a/Frontend/Pages/Editor.razor.css +++ b/Frontend/Pages/Editor.razor.css @@ -3,7 +3,6 @@ } .control-zone { - height: 5%; padding: 2px; } diff --git a/Frontend/Shared/ChatZone.razor b/Frontend/Shared/ChatZone.razor index ca9dbe8..f24d539 100644 --- a/Frontend/Shared/ChatZone.razor +++ b/Frontend/Shared/ChatZone.razor @@ -127,6 +127,6 @@ private void SetUsernameCancelClicked() { - _setUsernameVisible = false; + MessageService.Warning("呃呃呃呃,没设置用户名就想走?"); } } \ No newline at end of file diff --git a/Frontend/Shared/GrammarHelp.razor b/Frontend/Shared/GrammarHelp.razor new file mode 100644 index 0000000..e683297 --- /dev/null +++ b/Frontend/Shared/GrammarHelp.razor @@ -0,0 +1,84 @@ + +
+ 语法说明 + + 凯瑟琳DSL使用和YAML类似的语法来编写逻辑。语法通过规定机器人的多个阶段和在阶段之间的 + 迁移关系来描述聊天机器人的聊天过程。机器人在启动时处在一个特定的阶段,通过正则表达式匹配用户的输入迁移到下一个阶段 + 并输出对应的内容。 + + + + 文法拥有三个顶级属性: + +
    +
  • + robotName 字符串类型,规定了机器人的名称; +
  • + +
  • + stages Stage类型的数组,规定了机器人的各个阶段; +
  • + +
  • + beginStageName 字符串类型,规定了机器人初始阶段,会自动输出该阶段的输出内容。 +
  • +
+
+ + + Stage类型拥有三个属性: + +
    +
  • + name 阶段的名称,是阶段唯一的标识符; +
  • +
  • + transformers Transformer类型的数组,指定该阶段的迁移规则; +
  • +
  • + answer 该阶段的输出内容。 +
  • +
+
+ + + Transformer类型拥有两个属性: + +
    +
  • + pattern 匹配用户输入的正则表达式; +
  • +
  • + nextStageName 匹配成功之后需要迁移到的阶段名。 +
  • +
+
+ + + 在编译阶段编译器会执行如下检查: + +
    +
  • + transformers 中的 nextStageName指定的阶段是否定义; +
  • + +
  • + beginStageName 指定的阶段是否定义。 +
  • +
+
+
+
+ +@code { + private bool _helpVisible; + + public void Show() + { + _helpVisible = true; + StateHasChanged(); + } +} \ No newline at end of file