2016-03-27 19 views
0

環境

  • のWindows 8.1の64ビット
  • のMicrosoft Visual Studioの
  • C#私はC#でのミニ言語を実装するには

    をやろうとしている何ミニ言語の実装方法は?

私の仕事私n私の会社は、企業製品の性能評価を自動化するソフトウェアを作ることです。評価は、バルブを開き、化学薬品を流し、センサーから信号を取り込み、いくつかの値を計算することなどを含む。

問題は、反応時間の長さ、反応管が流出するかどうかにかかわらず、プログラマはソースコードを変更し、ユーザがそれを必要とする度に別のソフトウェアを構築しなければならない。

私はC言語でミニ言語を実装しようとしています。ユーザーは分かりやすい言語で測定手順を編成できます。ユーザーはtxtファイルにコードを書き、私のソフトウェアはそれを読み取り、コードの各行を解析し、コマンドとパラメータを抽出し、ソフトウェアの対応するメソッドを呼び出します。

たとえば、ユーザがopen_valve(3)のようなコード行を書き込むと、自分のソフトウェアがコードを読み込み、send_commands_to_ADconverter(VALVE, 3)という内部メソッドを呼び出し、適切なコマンドをコンピュータに接続されたA/Dコンバータ経由でターゲットバルブに送信します。これが私の考えです。

しかし、プログラミングスキルが不足しているため、どこから始めたらいいか分かりません。どのような技術が利用可能ですか?目標を達成するためのキーワードは何ですか?どうすればこの目標を達成できますか?どんな助けもありがとう。ありがとう。

編集1

c# - Adding scripting functionality to .NET applications - Stack Overflowは私の目的のために重要であるので、これは上記のリンクの重複問題では不明であるA/D変換器を介してセンサ、バルブなどの外部デバイスへのアクセスを参照していません。

+1

私はあなたのためにC言語でミニ言語を実装する必要はないと思います。私は、ユーザーの入力を受け取り、それに基づいて一連の操作を実行できるシステムが必要であることを理解しています。ユーザーが「どのように」操作を実行する必要がある場合は、操作を複雑にすることなく実行することもできます。たとえば、メソッドのパラメータとしてデリゲートすることができ、そのデリゲートを外部から渡すことができます。 –

+3

あなたが探しているのは、アプリケーションをスクリプト化できるようにしているようです。 [ここ](http://stackoverflow.com/q/260/162671)と[ここ](http://stackoverflow.com/q/462311/162671)(お気に入りの検索エンジンを使用してさらに見つけることができます) 。 – Nasreddine

+1

あなたの編集に関しては、スクリプトにどのようなインタフェースを公開しても問題ありません。それはあなた次第です。スクリプトは単にあなたのメソッドを呼び出します。 – Luaan

答えて

2

言語を作成するには、ある種の「パーサ」が必要です。あなたは "文法"を定義する必要があります。文法を使って "progam"を解析すると、言語の各機能を実装するコード内のメソッドを呼び出すことができます。

あなたはここで大きく勉強しています:) EBNFのような奇妙なものがたくさんあります。あなたはおそらく、金やANTLRのようなものへの参照の多くを参照してください。これらは非常に有能ですが、「コンパイラコンパイラ」のようなものが含まれており、混乱させる複雑なレベルを追加し、パイプラインを構築する際に余分な手順が必要になります。

ここでは、C#で文法を定義するために使用したライブラリをいくつか紹介します。https://github.com/picoe/Eto.Parse

アイロニーは非常に良いです(私は様々なプロジェクトのためにそれを使用しました)が、しばらくの間、維持されていません。

Eto.Parseは最近です。また、BNFを解析することでGrammerを作成できるパーサーも組み込まれています。これは非常に涼しい

1

私が理解すれば、あなたの目標は、あなたのユーザーが書いた構文を解析し、彼が入力したものを使って決定を下すことです。 正規表現を使用して、ユーザー入力を一致させて分割することをお勧めします。

1

C#から直接実行できるいくつかのスクリプト言語があります。

ユーザーがプログラミングに関する知識を持っていないようであれば、VBScriptのような冗長な言語を使用すると役立ちます。

VBScriptを実行するには、スクリプトコントロールを使用します。サンプルについては、この質問を参照してください。Use Microsoft Scripting Control to evaluate 'If' expressions (via c#)

IIRCスクリプトコントロールは32ビットアプリケーションとして実行する必要があります。

1

まあ、最も簡単な選択肢は、あなたがすでに持っているものを使うことです - C#。

その場でC#コードをコンパイルすることができます。新しいコンパイラRoslynを使用すると、非常に簡単で安価です。それから、ユーザーにとって使いやすいようにインターフェースを定義し、コードから呼び出すことができるメソッドにそのコードを配置するだけです。これにより、Visual Studio/VS Codeなど、C#用のさまざまな開発ツールを簡単にサポートすることができます。最も単純な形式では、あなたの "スクリプト"に、ユーザーが望むすべてのメソッドを持つ基本クラスを実装するだけです。これは確かに優れたアプローチですが、これは非常に簡単で、再探しています。

もちろん、これはユーザーを信頼できる場合にのみ当てはまります。 C#で安全にサンドボックス化されたコードを作ることはもっと複雑です(確かに可能ですが)。準備が整ったスクリプトソリューションを使う方がよいでしょう。

関連する問題