有没有适用于Delphi的优秀类Pascal脚本语言?

13

我正在寻找一个适用于Delphi的好用且免费的脚本引擎。我想要将脚本添加到应用程序中,以便编写小型测试脚本。具体来说,我需要:

  • Pascal语法
  • 当前的(我看了RemObjects Pascal Scripting,但根据我看到的帖子,它已经“过时”)。

我不需要完整的语言支持,只需要基础功能。我看到了这个:https://stackoverflow.com/questions/226135/scripting-library-for-delphi 但我认为事情已经有所改变。

我想做的就是在我的程序中添加一个备忘录组件,在运行时向备忘录添加一段源代码并单击“运行”按钮。我希望脚本能够访问我的应用程序的变量和函数。

实现这个的最简单方法是什么?下面是示例程序。

program Project31;

uses
  Forms,
  Unit36 in 'Unit36.pas' {Form36};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm36, Form36);
  Application.Run;
end.

.

:这是一个空段落,没有任何实际意义。
unit Unit36;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm36 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form36: TForm36;

implementation

{$R *.dfm}

procedure RoutineInMyApplication ;

begin
ShowMessage ('Hello from my Application') ;
end ;

procedure TForm36.Button1Click(Sender: TObject);
begin
//ExecuteScript (Memo1.Lines) ;
end ;

end.

.

object Form36: TForm36
  Left = 0
  Top = 0
  Caption = 'Form36'
  ClientHeight = 174
  ClientWidth = 391
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object Button1: TButton
    Left = 300
    Top = 72
    Width = 75
    Height = 25
    Caption = 'Button1'
    TabOrder = 0
    OnClick = Button1Click
  end
  object Memo1: TMemo
    Left = 8
    Top = 21
    Width = 241
    Height = 145
    Lines.Strings = (
      'begin'
      'ShowMessage  ('#39'Hello world'#39') ;'
      'CallSomehow (RoutineInMyApplication) ;'
      'end.'
      ' ')
    TabOrder = 1
  end
end

1
我个人仍然更喜欢PascalScript。缺少对64位Delphi编译器的支持可能是它的弱点,但如果您使用32位Delphi编译器(目前支持Delphi XE2),那么应该没问题。PascalScript目前在错误修复方面的优先级较低(主要是针对64位编译器发现的问题),但这并不意味着它在32位上不稳定。像InnoSetup这样的项目正在使用它,并且它仍然活跃。经过快速搜索,我认为没有同样经过验证质量的免费替代品。 - TLama
感谢@TLama。我已经安装了D2006和XE1,但它没有安装任何D10 BPLs,ReadMe.html是一个死链接,最后一个条目changes.txt文件是“NEW Support for Borland Developer Studio 2006”,所以我不太自信。我会再看一遍。如果您有时间和安装的软件,我很想看看如何让我的示例应用程序运行起来。 - rossmcm
3
我不会太认真看待那个changelog.txt文件。自从上次记录在该文件中以来,已经进行了许多提交,因此我认为他们只是停止记录该文件。 - TLama
请参见http://stackoverflow.com/questions/5559689/is-it-possible-to-integrate-lua-to-delphi-and-run-on-windows-phone。 - lhf
通过Pascal Script,您可以使用扩展的IDE maXbox。编码艺术:maXbox是一个脚本工具引擎、编译器和源代码库,全部包含在一个exe文件中,用于设计和编写您的脚本!纯代码用于对象脚本编写。原则是简单和尽量减少。该应用程序“开箱即用”(自我包含),无需安装或注册。https://maxbox4.wordpress.com/ - Max Kleiner
6个回答

14

感谢 @RRUZ。您对它与 PascalScript 相比如何的任何评论? - rossmcm
1
  1. dwscript支持Delphi语法,并添加了非常好的语言扩展。
  2. 它正在积极地维护中。
  3. 有良好的文档和示例。
  4. 它拥有广泛的单元测试集。
- RRUZ
我发现了这个链接:https://dev59.com/6W445IYBdhLWcg3wXZS9,对我很有帮助。我一定会尝试一下。 - rossmcm
啊啊啊!BDS2006不再受支持了。我想要为的特定应用程序是一个D006应用程序。我不知道将当前版本(支持2009及以上版本)回归到2006年需要多少努力。 - rossmcm

5

Jedi JVCL还包括TJvInterpreter,它是一个非常轻量级(小)的解释器,但其功能比dwscript有限。

对于非常小的(用户输入的公式或简单的字符串和数字处理任务),JvInterpreter对我来说工作得非常好。


您的应用程序是否可以调用例程并访问变量? - rossmcm
你需要编写一些代码,但是没问题,你可以做到。在最近的Delphi版本中,由于RTTI和方法调用可以更加智能地完成,所需的代码量要少得多。但是每个你想要调用的单元都需要一些代码。我实际上喜欢有一个包装器控制可访问的内容。这使得我的脚本更难崩溃我的应用程序。 - Warren P
感谢@Warren。我尝试了一个“Hello World”应用程序,并对它的易用性印象深刻,甚至包括类似Delphi的编辑器。这里有一些文档[http://jvcl.delphi-jedi.org/JvInterpreter.htm],但在访问脚本中的应用程序变量方面,缺乏示例。是否有任何真正的JVCL帮助?大部分内容都在http://wiki.delphi-jedi.org/wiki/JEDI_Visual_Component_Library上是空的,而[JvInterpreter](http://jvcl.delphi-jedi.org/JvInterpreter.htm)则是一个受欢迎的例外。 - rossmcm
我还在想的另一件事是,是否可能让应用程序执行脚本并仍然像平常一样继续运行 - 即使脚本在后台运行而不是作为阻塞调用 - 或者我需要在线程中运行脚本才能实现这一点? - rossmcm
我真的怀疑这会很稳定,或者很容易做到。你需要处理大量并发/线程问题,使你的包装器代码非常复杂。 - Warren P
在2016年,我建议将这种事情放在进程之外进行。 - Warren P

1

enter image description here


发布说明 maXbox 4.7.5.20 Jan 2021 mX47


Add 25 Units + 4 Tutorials

1277 unit uPSI_SystemsDiagram.pas  Dendron
1278 unit uPSI_qsFoundation.pas    Dendron
1279 uPSI_JclStringLists2          JCL  
1280 uPSI_cInternetUtils2          FLC
1281 uPSI_cWindows.pas             FLC
1282 uPSI_flcSysUtils.pas  +TBytes utils
1283 unit uPSI_RotImg.pas          DA 
1284 uPSI_SimpleImageLoader.pas    LAZ
1285 uPSI_HSLUtils.pas             LAZ
1286 uPSI_GraphicsMathLibrary.pas  EF
1287 unit uPSI_umodels.pas         DMath
1288 uPSI_flcStatistics.pas        FLC5
1289 uPSI_flcMaths.pas             FLC5
1290 uPSI_flcCharSet.pas
1291 uPSI_flcBits32.pas
1292 uPSI_flcTimers.pas
1293 uPSI_cBlaiseParserLexer.pas
1294 uPSI_flcRational.pas
1295 uPSI_flcComplex.pas
1296 unit uPSI_flcMatrix (uPSI_flcVectors.pas)
1297 unit uPSI_flcStringBuilder.pas
1298 unit PJResFile_Routines;
1299 uPSI_flcASCII.pas
1300 uPSI_flcStringPatternMatcher;
1301 unit uPSI_flcUnicodeChar.pas

函数调用总数:33282 SHA1: 4.7.5.20的D82EAD01C58738887661428F94B207DB1D8FAEB5 CRC32:768395C5 29.5 MB(31,012,768字节)


1
这个引用没有附带链接到其来源或任何进一步的评论,是因为...? - AmigoJack
@AmigoJack,谢谢,你说得对,这确实是一个缺失的点: maXbox是一个脚本工具引擎,编译器和源代码库,全部包含在一个exe中,可以像在shellbook中设计和编写脚本!纯粹的对象脚本化代码。原则是简单化和最大限度地减少。 该应用程序是“开箱即用”的(自我封装),不需要安装或注册。 - Max Kleiner

1

0

FastReport的FastScript(堆栈不允许提供链接)。 包括PascalScript、C++Script、JScript和BasicScript。 PascalScript似乎正是您要求的。


1
问题指定了免费。FastReport是商业软件。虽然它很好。 - Warren P

0

Lua有一个end关键字和一个function关键字,但它并不像Pascal那样。 - Warren P

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接