問題タブ [evaluator]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
58 参照

alloy - Alloy Analyzer の Evaluator でインスタンスのセットを関数または述語に渡すにはどうすればよいですか?

BLUF: 署名のインスタンスと同じ署名のインスタンスのセットを引数として取る述語があります。モデルのインスタンスを生成する際に、シグニチャーのインスタンスを述語に渡したいのですが、可能であればインスタンスのセットを渡す方法に途方に暮れています。

Alloy's Evaluator は、私が見逃していない限り、十分に文書化されていないようです。私はダニエル・ジャクソンの本を持っていて、チュートリアルを行い、オンラインで他のさまざまなリソースを見つけましたが、エバリュエーターの使用方法を実際に扱っている人は誰もいないようです。

私は次のような表記法を試しました:

myPred[instance$0,set(instance$1,instance$2)]

myPred[instance$0,set[instance$1,instance$2]]

myPred[instance$0,(instance$1,instance$2)]

myPred[instance$0,[instance$1,instance$2]]

評価者はそれらのどれも好きではありません。インスタンスのセットを渡すことは可能ですか? もしそうなら、どうすればいいですか?助けてくれてありがとう!

0 投票する
0 に答える
22 参照

node.js - 数式をラテックスに変換する

タイトルの通り、「3x+4/0.5」などの単純な数式を「ラテックス形式」に変換しようとしています。反応ネイティブまたは他の言語で使用できるパッケージがあれば、私を推薦してもらえますか? ありがとう

0 投票する
0 に答える
24 参照

java - java 右から左へのエバリュエーターが左から右へのエバリュエーターに変わる、StringIndexOutOfBoundsException java

右から左への評価プログラムを左から右への評価プログラムに変換する必要がある割り当てがあります (Y/N プロンプトで複数の式を評価するように求められる場合もそうします)。プログラムにいくつかの変更を加える必要がありました。

  1. 数字と演算子の間にスペースを許可する
  2. 負の数には、マイナス記号の直後に数字または小数点が続く必要があります。さらに、負の数は通常、括弧で囲む必要があります。(これは、ネガティブにアンダースコアを使用する古いプログラムとは異なります)
  3. 最高の優先順位で累乗を許可する必要があります。
  4. 評価は左から右に行う必要があります。これが主な変更点です。A) formNum() メソッドは、数値の左端の桁または先頭の小数点に遭遇したときに左から右にスキャンするように書き直す必要があります。もちろん、左から右にスキャンしているため、連続する数字から double 値を構築する方法を調整する必要があります。いくつかの例を試して、正しい方法を見つけてください。B) evaluator() メソッドも、左から右にスキャンするように調整する必要があります。いくつかの変更があります: i) 左括弧が検出されると、負の数 (5+ (-13.4) +2 など) を通知しない限り、常にスタック A にプッシュされます。その場合、formNum() を呼び出して負の数を計算し、それを double として B にプッシュし、対応する右括弧をスキップする必要があります。ii) 右括弧が検出されると (負の数の右端ではない)、evalDown() への呼び出しがトリガーされ、対応する左括弧に到達するまで、括弧で囲まれた部分式の操作が評価されます。左括弧も A からポップされます。 iii) 現在のトークン演算子の優先順位がスタックの一番上の演算子と等しい場合、トークンをプッシュしません。代わりに、eval() を使用して A スタックの最上位で操作を実行し、現在のトークン演算子を A スタックの新しい最上位と比較します。例。3.0 / 2.0 * 4.0 があるとします。3 を B にプッシュし、/ を A にプッシュし、2 を B にプッシュします。(誤って) * を A にプッシュし (/ と同じ優先順位)、次に 4 を B にプッシュすると、最初に 2 * 4 を計算し、次に 3/ を計算します。 8.. 代わりに、最初に 3./2 を計算して 1.5 をプッシュし、後で 1.5 * 4 = 6.0 を計算する必要があります。

これを念頭に置いて、ここに古いプログラム ファイルを示します。//古いプログラム ファイルをペーストビン リンクに入れて、読みやすくしました。

ExpressionEvaluator.java https://pastebin.com/QkKdU6dh

ExprEvaluatorTest.java https://pastebin.com/3UqqLsvr

Stack1gen.java https://pastebin.com/KW4Pz9Pt

これが新しいプログラムでの私の試みです。

LR.java

LRTest.java

および Stack1gen.java // 編集: 誤ってこのクラスに間違ったコードを追加しました

LRtest.java を実行して y と入力すると、 StringIndexOutOfBoundsException が発生し、 evaluator() の先頭を指します。何が悪いのかわかりません。誰かが私を助けることができれば、それは大歓迎です。