2009-07-19 11 views
2

私はJSという埋め込み言語でコーディングしています。厳密に制限されたインタプリタ言語での作業

任意の順序で3つの関数を呼び出せます。 (ABC、ACB、BAC、BCA、CBA、CAB。)

トリックですか?言語にはユーザー定義関数はありません。

これには条件付きループ構造があります。

私は3つの選択肢があると思います。

  1. コード全体が重複しています。
  2. (すべての重複したコードを作成する)プリプロセッサを作成します。
  3. 配列の3つの繰り返しでループを実行し、ループの各パスでどの機能が呼び出されるかを制御します。

私は#1が嫌いです。重複したコードは厄介です。どのように私は何かをねじ込むことなく変更するのですか?

#2はOKです。少なくとも私はソースに重複したコードを持っていません。しかし、私の出力コードは、私がデバッグしているものです。私はそれから分岐したいのだろうかと思います。プラス面では、私は言語に砂糖の束を追加することができます。

私の最善の策は#3だと思います。

他のアイデアはありますか?後藤はありません。機能はありません。既存のプリプロセッサはありません。

#3の面白いことは、本質的に悪名高い/スイッチの悪夢だということです。

+1

私はこの言語について少し不思議ですが、JSをウェブで検索すると、たくさんのJavascriptが見つかり、この埋め込み言語の多くは見つかりませんでした。あなたは良い出発地を持っていますか? –

+3

http://www.reaper.fm/sdk/js/js.php – Nosredna

+0

私はビットクラッシャー、ローパスフィルター、および波打ちのオーディオ効果(例えば)を任意の順序で呼び出せるようにしたいと考えています。 – Nosredna

答えて

3

おそらく変異ステートマシンのいくつかの種類、すなわち:

int CODEWORD=0x123; 

while (CODEWORD) 
{ 
    switch(CODEWORD&15) 
    { 
    case 1: 
     /// case 1 
     break; 
    case 2: 
     /// case 2 
     break; 
    case 3: 
     //// case 3 
     break; 
    } 
    CODEWORD=CODEWORD>>4; 
} 

DRY、ノープリプロセッサ、ノー配列。 /スイッチのためにやや避けられないようです。

+0

右。スイッチはありません。だから私は条件付きでそれを偽造しなければならないでしょう、それは三項です。私はそれが配列を避けることが好きです。 – Nosredna

+0

ただ編集しました。ニブルではなくバイトをシフトしていました。 –

+0

また、このコードは3、次に2、そして1を実行することに注意してください! –

3

独自のコードを書くのではなく、Cプリプロセッサを使用することができます。それは、少なくともそれが実行可能な解決策であるかどうかを見てみましょう。

+0

ええ、私はそれをすることができます。私を止めさせるのは、埋め込み言語を即座に変更できることです。これはかなりクールです。プリプロセッサはフローに悩まされますが、コードを正常に保つのに本当に役立つかもしれません。 – Nosredna

1

技術的に最も優れた解決策(コードや開発者にアクセスできると仮定します)は、JS言語を変更して本当に必要なものを実行することです。

最善の解決策は、あなたが説明されていない問題の側面に依存し、それに失敗:

  1. は「機能」再帰的ですか?
  2. 機能パラメータはありますか?
  3. JSで提供されていない他の制御構造が必要ですか?
  4. 関数呼び出しの順序は実行時パラメータによって異なりますか?
  5. 現在の要件と予想される要件を満たすプリプロセッサ言語を設計して実装するには、熟練していると自信がありますか?
  6. は、長期的にあなた/同僚の時間を節約するプリプロセッサを実装していますか?

5. などの十分なへの答えは「イエス」である場合、あなたのオプション#2が正解です。それ以外の場合は、#1や#3のような醜い解決策が実際にはより良いアイデアかもしれません。

編集:ソースコードへのアクセス権がなく、開発チームがニーズに対応していない場合は、オープンソースの代替方法を検討することを検討してください。

+0

良い質問。 1.いいえ2.ユーザー関数はないが、グローバル変数とメモリにアクセスするため、明らかに渡されません。 3.必要はありませんが、好きです。はい。ユーザーはいつでも変更できます。はい。 6.わからない。それが私が煮詰めているものです。 – Nosredna

+0

言語を変更することは現実的ではありません。ソースは閉じられ、実行可能な変更が頻繁に発生します。また、リアルタイムデバッガもあります。たぶん私はジャスティン・フランケルに電子メールを送って、それに取り組んでいる仕事をしたいと告げるべきでしょう。 :-) – Nosredna

+0

またはオープンソースの代替手段を探してください。 –

関連する問題