Grazie ai suggerimenti di uno previous question, sono occupato a provare IronPython, IronRuby e Boo per creare un DSL per la mia app C#. Il primo passo è IronPython, grazie alla più ampia base di utenti e conoscenze. Se riesco a far funzionare bene qualcosa qui, posso semplicemente fermarmi.Simplfying DSL scritto per un'applicazione C# con IronPython
Ecco il mio problema:
voglio il mio script IronPython di avere accesso alle funzioni in una classe chiamata Lib. In questo momento posso aggiungere l'assembly al runtime IronPython e importare la classe eseguendo l'istruzione nel campo di applicazione ho creato:
// load 'ScriptLib' assembly
Assembly libraryAssembly = Assembly.LoadFile(libraryPath);
_runtime.LoadAssembly(libraryAssembly);
// import 'Lib' class from 'ScriptLib'
ScriptSource imports = _engine.CreateScriptSourceFromString("from ScriptLib import Lib", SourceCodeKind.Statements);
imports.Execute(_scope);
// run .py script:
ScriptSource script = _engine.CreateScriptSourceFromFile(scriptPath);
script.Execute(_scope);
se voglio correre Lib :: InserisciMioNome, che è solo una dichiarazione di stile ciao mondo , il mio script Python contiene:
Lib.PrintHello()
o (se non è statico):
library = new Lib()
library.PrintHello()
Come posso cambiare il mio ambiente in modo che io posso solo avere statments di base nello script Python come Thi s:
PrintHello
TurnOnPower
VerifyFrequency
TurnOffPower
etc...
voglio questi script per essere semplice per un non-programmatore di scrivere. Non voglio che debbano sapere che cos'è una classe o come funziona. IronPython è davvero lì solo così che alcune operazioni di base come for, do, if e una definizione di funzione di base non richiedono la scrittura di un compilatore per la mia DSL.
Sembra ancora più brutto in IronRuby dove devo scrivere ScriptLib :: Lib.PrintHello() È chiunque familiarità sia con IronRuby o IronPython in questo modo? Ho bisogno di uno script di installazione python per mappare tutti i metodi/variabili prima di eseguire uno script di test? Speravo di farlo in C#. – cgyDeveloper