【问题标题】:Is there a good scripting Pascal-like language for Delphi?Delphi 是否有一个很好的类似 Pascal 的脚本语言?
【发布时间】:2012-09-02 20:52:35
【问题描述】:

我正在为 Delphi 寻找一个好的免费脚本引擎。我想向应用程序添加脚本,以便编写小型测试脚本。具体我需要:

  • 类帕斯卡语法
  • 当前(我查看了 RemObjects Pascal 脚本,但根据我看到的帖子,它已“过时”)。

我不需要完整的语言支持,只需要基础知识。我看到了这个: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

【问题讨论】:

  • 我个人还是更喜欢 PascalScript。缺少对 64 位 Delphi 编译器的支持可能是弱点,但是当你使用 32 位 Delphi 编译器(目前支持到 Delphi XE2)时,我认为你会没事的。 PascalScript 目前在 bug 修复方面的优先级较低(主要针对 64 位编译器发现的问题),但这并不意味着它对于 32 位不稳定。像 InnoSetup 这样的项目使用它并且它仍然存在。经过非常快速的搜索,我认为没有相同质量的免费替代品。
  • 感谢@TLama。我已经为 D2006 和 XE1 安装了它,但它没有安装任何 D10 BPL,ReadMe.html 是一个死链接,最后一个条目 changes.txt 文件是“对 Borland Developer Studio 2006 的新支持”,所以我没有自信。我再看看。如果您有时间并安装了软件,我很想看看运行我的示例应用程序会涉及什么。
  • 我不会把changelog.txt 文件看得太认真。自上次登录该文件以来,有many commits,所以我想说他们只是停止登录该文件。
  • 使用 Pascal 脚本有一个扩展的 IDE 可用,称为 maXbox。编码的艺术:maXbox 是一个脚本工具引擎、编译器和源库都在一个 exe 中,用于设计和编码您的脚本!对象脚本的纯代码。原则是简单和减少到最大。该应用程序“开箱即用”(自包含),无需安装或注册。 maxbox4.wordpress.com

标签: delphi scripting pascal scripting-language remobjects


【解决方案1】:

试试目前由Eric Grange维护的dwscript库。

【讨论】:

  • 谢谢@RRUZ。关于它与 PascalScript 的比较有什么 cmets 吗?
  • 1. dwscript 支持 Delphi 语法,还为语言添加了非常好的扩展 2. 是 actively maintained 3.) 很好 documentation and samples 4. 有一个广泛的单元测试集。
  • 我发现了这个:stackoverflow.com/questions/4889810/…,这很有帮助。我一定会试一试的。
  • aarrgghh! BDS2006 不再支持。我想要安装解释器的特定应用程序是 A D006 应用程序。我不知道要将当前版本(支持 2009 年及更高版本)退回到 2006 年需要付出多少努力。
【解决方案2】:

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

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

【讨论】:

  • 是否可以在您的应用程序中调用例程和访问变量?
  • 您必须编写一些代码,但是是的,您可以。在较新版本的 delphi 中,代码要少得多,因为现在可以更智能地完成 RTTI 和方法调用。但是您希望每个单元都需要一些代码才能调用。我实际上喜欢有一个包装器控制什么是可访问的。让我的脚本更难让我的应用崩溃。
  • 谢谢@Warren。我尝试了一个“Hello World”应用程序,并且对它的易用性印象深刻——甚至包括一个类似 Delphi 的编辑器。这里有一些文档here,但在其他方向的示例中却很少 - 即从脚本访问应用程序变量。有任何真正的 JVCL 帮助吗? wiki.delphi-jedi.org/wiki/JEDI_Visual_Component_Library 的大部分内容似乎都是空的,JvInterpreter 是一个受欢迎的例外。
  • 我想知道的另一个想法是,是否有可能从应用程序执行脚本并且仍然让应用程序继续正常运行 - 即让脚本在后台运行而不是作为阻塞调用 - 还是我需要在脚本的线程中运行脚本才能做到这一点?
  • 我真的怀疑这会是稳定的,还是容易做到的。很多并发/线程问题需要你处理,让你的包装代码非常复杂。
【解决方案3】:

几年前,我曾经使用Pax Compiler 和这个Forms Editor 一起工作。

【讨论】:

    【解决方案4】:

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

    【讨论】:

    • 问题指定免费。 FastReport 是商业的。虽然很好。
    【解决方案5】:

    尝试嵌入Lua。例如,请参阅Lua 5.1 for Delphi

    【讨论】:

    • Lua 有一个 end 关键字和一个 function 关键字,但它不是很像帕斯卡。
    【解决方案6】:


    发行说明 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 字节

    【讨论】:

    • 此引用没有linking to its source 或任何进一步的评论是因为......?
    • @AmigoJack ,谢谢你是对的,这是一个缺失点:maXbox 是一个脚本工具引擎、编译器和源库,都在一个 exe 中,可以像在 shellbook 中一样设计和编码你的脚本!对象脚本的纯代码。原则是简单和减少到最大。该应用程序“开箱即用”(自包含),无需安装或注册。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-16
    • 1970-01-01
    • 2010-10-27
    • 2013-04-19
    • 2015-10-31
    • 2010-11-30
    • 1970-01-01
    相关资源
    最近更新 更多