2009-09-03 12 views
0

私はwpfで小さな視覚化ツールを書いています。平均的なユーザーは、プログラミングウィザードを使わなくても面白い視覚化を作成できます。動的キーワード、C#コンパイルサービス - コンパイル時にまだ利用できないコードを実行するには?

私は考えは、ユーザがこれらのコマンドを入力することができることであるStartPath(ダブルのx、ダブルy)とLINETO(x、y)はcurvetoといった(...)等

ようなメソッドを有するコントローラクラスを有しますテキストボックスに入力し、結果をキャンバスに描画させます。私が持っていた

StartPath(0,0); 
LineTo(30,50); 
LineTo(50,40); 
EndPath(); 

一つのアイデアが実装されるすべてのメソッドを持っており、トークン内部の交換と追加のファイル名を指定して実行()コマンドを持って.csファイルテンプレートを使用することでした。テンプレートを文字列としてロードし、ユーザーのコマンドをRun()メソッドに挿入し、新しい.net 4.0コンパイルサービスを使用してその場でアセンブリを作成し、ロードしてRun()メソッドを呼び出し、公開されたパスにアクセスしますそれをキャンバスに描きます。

もう1つは、実際にテキストボックスを解析してエラーをチェックし、適切なメソッドを呼び出すことです。

他にも、特に新しい動的キーワードがありますか?

答えて

2

.NET 4.0から新しいものを使用する必要はありません。フレームワークでC#コードをコンパイルする機能は、長年にわたって存在していました。実際、私のSnippyツールは、あなたが言うことをかなり正確に行います。これは、ユーザーコードが入るテンプレートです。あなたのツールを私の上に置くことを歓迎します。コードはC# in Depth siteからダウンロードできます。

その他の点では、ユーザーが.NET 4.0を使用する必要はありません。

dynamicについては、あなたがIronPython/IronRubyでコードを書くことを好んでいない限り、このケースでは本当に役に立ちません。 C#はまだあなたに任意の文字列を実行させるような "eval"コールを持っていません。

+0

私はそれを見ていただきありがとうございます。 これをクリアしていただきありがとうございます。私は最新のC#仕様の最新版ではありません。 – kitsune

+0

うまく動作:http://dl.getdropbox.com/u/133877/test.jpg ありがとうもう一度:) – kitsune

1

LL1言語を定義し、パーサーとスキャナを生成して独自のインタープリタを構築する方がよいと思います。

Coco/Rは、この種の仕事にとって非常に安定したよく知られたツールです。 チェックこのアウトは、あなたが心の中に持っているもののために難しいことではありませんです。

http://www.scifac.ru.ac.za/coco/cshcoco.htm

新しいダイナミックを使用する場合は、まだ入力されたコマンドテキストを解析中に問題があります。 ダイナミックを使用してパーサーの上にインタプリタを構築することができます。

希望します。

+0

ユーザーが自分の言語を設計して実装するのに苦労するのはなぜですか?すでにうまく設計され、堅牢に実装され、よく知られているものを使用するのではなく、学ばなければならないのか? C#がうまくいかない場合は、Boo、IronPython、IronRubyなどを使うのは簡単です... –

+0

goto(x、y)lineTo(x、y)のような独自のミニ命令セットを使用したい場合は、既存の言語を使用しないでください。コマンドを発行できるようにするためには、ビジネス固有のミニ言語を学ぶだけです。 Coco/Rリンクをフォローすると、LL1文法を簡単に定義できることがわかります。 入力が解析されると(実行時に)、生成されたパーサは必要な追加情報を渡す.Netコードを自動的に呼び出します。 何かを一緒に置くための助けが必要な場合は教えてください。 –

関連する問題