2012-09-10 39 views
13

Sto cercando un buon motore di scripting gratuito per Delphi. Voglio aggiungere script ad un'applicazione in modo che possa scrivere piccoli script di test. In particolare ho bisogno: la sintassiEsiste un buon linguaggio di scripting simile a Pascal per Delphi?

  • Pascal-come
  • corrente (ho guardato RemObjects Pascal Scripting ma è "obsoleto", secondo un post che ho visto).

Non ho bisogno del supporto completo della lingua, solo le basi. Ho visto questo: https://stackoverflow.com/questions/226135/scripting-library-for-delphi ma suppongo che le cose siano andate un po 'da allora.

Tutto ciò che voglio essere in grado di fare è aggiungere un componente memo al mio programma, e in fase di esecuzione aggiungere un frammento di origine al memo e fare clic su un pulsante go. Voglio che lo script sia in grado di accedere alle variabili e alle funzioni dell'applicazione.

Qual è il percorso più semplice per realizzare questo? Segue un esempio di programma.

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

Personalmente preferirei ancora PascalScript. La mancanza di supporto mancante per il compilatore Delphi a 64 bit potrebbe essere la debolezza, ma quando si utilizza il compilatore Delphi a 32 bit (il supporto è attualmente disponibile fino a Delphi XE2), allora starete bene, credo. PascalScript ha attualmente bassa priorità nella risoluzione dei bug (principalmente per i problemi riscontrati per il compilatore a 64 bit), ma non significa che non sia stabile per 32 bit. Progetti come InnoSetup lo usano ed è ancora vivo. Dopo una ricerca molto veloce, non penso ci sia un'alternativa gratuita nella stessa qualità provata. – TLama

+0

Grazie a @TLama. L'avevo installato per D2006 e XE1, ma non installava BPL D10, il ReadMe.html era un collegamento morto, l'ultimo file changes.txt era "NUOVO supporto per Borland Developer Studio 2006", quindi non ero t fiducioso. Guarderò di nuovo Sarei interessato a vedere cosa sarebbe coinvolto nel far funzionare la mia app di esempio se avete tempo e software installato. – rossmcm

+2

Non prenderei troppo sul serio il file ['changelog.txt'] (https://github.com/remobjects/pascalscript/blob/master/Source/changelog.txt). C'erano ['many commits'] (https://github.com/remobjects/pascalscript/commits/master) dall'ultima volta che hai effettuato l'accesso a quel file, quindi direi che si sono appena fermati per accedere a quel file. – TLama

risposta

14

Prova biblioteca dwscript che è attualmente mantenuto da Eric Grange.

+0

Grazie a @RRUZ. Qualche commento su come si confronta con PascalScript? – rossmcm

+1

1. il dwscript supporta la sintassi Delphi e aggiunge anche estensioni molto belle alla lingua 2. è [mantenuto attivamente] (http://code.google.com/pwdwscript/source/list) 3.) buona [documentazione e campioni] (http://code.google.com/p/dwscript/w/list) 4. hanno un set completo di test di unità. – RRUZ

+0

Ho trovato questo: http://stackoverflow.com/questions/4889810/what-are-the-pros-and-cons-of-remobjects-pascalscript-versus-the-dws-script che è stato molto utile. Farò sicuramente un tentativo. – rossmcm

4

Jedi JVCL include anche TJvInterpreter che è un interprete molto leggero (piccolo), ma con funzioni molto più limitate di dwscript.

Per molto piccolo (formule immesse dall'utente o semplici attività di elaborazione stringa e numeriche) JvInterpreter ha funzionato abbastanza bene per me.

+0

è possibile chiamare le routine e accedere alle variabili nella propria applicazione? – rossmcm

+0

Devi scrivere un po 'di codice, ma sì, puoi. Molto meno codice nelle versioni più recenti di delphi, dal momento che RTTI e l'invocazione del metodo ora possono essere eseguiti in modo molto più intelligente. Ma è necessario un codice per unità che si desidera rendere chiamabile. Mi piace davvero avere un controllo wrapper COSA è accessibile. Rende più difficile il crash della mia app per il mio script. –

+0

Grazie a @Warren. Ho provato un'app "Hello World" e sono rimasta colpita da quanto fosse facile andare avanti - incluso persino un editor simile a Delphi. C'è un po 'di documentazione [qui] (http://jvcl.delphi-jedi.org/JvInterpreter.htm) qui, ma poco prezioso nel modo in cui gli esempi vanno nella direzione opposta, cioè l'accesso alle variabili dell'applicazione dallo script. C'è qualche aiuto _real_ JVCL? La maggior parte delle cose su http://wiki.delphi-jedi.org/wiki/JEDI_Visual_Component_Library sembra essere vuota e il [JvInterpreter] (http://jvcl.delphi-jedi.org/JvInterpreter.htm) è un'eccezione benvenuta. – rossmcm

0

FastScript da FastReport (lo stack non consente di fornire un collegamento). Include PascalScript, C++ Script, JScript e BasicScript. PascalScript sembra esattamente quello che chiedi.

+1

Domanda specifica Libera. FastReport è commerciale. Anche se è buono. –

+0

@WarrenP Oh, mi dispiace, hai ragione. Mi manca la parola "gratis". – Badiboy

0

Provare a incorporare Lua. Vedere Lua 5.1 for Delphi per esempio.

+0

Lua ha una parola chiave 'end' e una parola chiave' function', ma non è molto simile a Pascal. –