使用我提供给用户的功能列表在delphi App中编写一个脚本解释器或执行器

问题描述 投票:0回答:0

我想在我的 Delphi 应用程序中编写一个脚本解释器(或执行器)。用户可以设计一个带有简单组件(如按钮、编辑框等)的表单。例如,用户可以在按钮下编写脚本。脚本代码可能看起来像这样:

A := ReadTheNumberOfPatientsFromCurrentDatabase;
if A > 5000 then
  ShowMessage('There are more than 5K hospitalized patients.');

如您所见,我提供了函数“ReadTheNumberOfPatientsFromCurrentDatabase”供用户使用。因此,用户应该有一个可供选择的功能列表,并且根据用户反馈,我会在我的应用程序的下一个版本中添加更多功能。我在这里编写的脚本是用 Pascal 语言编写的,但对我来说,让用户使用哪种脚本语言编写并不重要。例如,它可以是伪代码或类似 C# 代码的代码,例如:

A = ReadTheNumberOfPatientsFromCurrentDatabase;
if (A > 5000)
  MessageBox.Show("There are more than 5K hospitalized patients.");

为此编写一个简单的 IDE 对我来说并不难,但我对代码方面一无所知。

我是这么认为的:

我将制作一个名为 unitInAppFunctions 的单元,其中包含用户可以从中选择的功能,如下所示:

unit unitInAppFunctions;
...
function ReadTheNumberOfPatientsFromCurrentDatabase: Integer;
begin
  with MainDM.AdoQuery1 do
  try
    SQL.Text := 'select count(patKey) cnt from PAT where ...';
    open;
    Result := FieldByName('cnt').AsInteger;
  except
    Result := 0;
  end; 
end;
...

我必须以某种方式在数据库中注册函数,我还必须考虑函数返回值的类型以及参数计数和类型。

问题是最好的方法是什么。首先,我不知道我是使用现有的脚本语言,例如我没有经验的 PascalScript 和 DWScript,还是我自己编写非常耗时的解释器。第二个问题是,像这样定义我的自定义函数是否正确?我该怎么做?

顺便说一句,我打算在以后的版本中开发这个程序,所以要考虑用户编写脚本的灵活性和复杂性。

欢迎任何想法,并提前感谢您。

delphi scripting ide runtime interpreter
© www.soinside.com 2019 - 2024. All rights reserved.