0

ポーランド記法に変換した後に式を評価する方法を知っています。ただし、次のようなものを評価する方法を知りたいです。

If a < b Then a + b Else a - b

a + bconditiona < bが True の場合に発生し、そうでない場合は Falsea - bが計算された場合に発生します。

ここでは文法は問題ではありません。この問題を解決するためのアルゴリズムだけが必要なので。ブール式と代数式を評価できます。しかし、どうすれば上記の問題を解決できますか?

4

4 に答える 4

0

S-express については LISP 言語を参照してください。

 (if (> a b)                  ; if-part
     (+ a b)                  ; then-part
   (- a b))                   ; else-part
于 2013-10-17T05:25:47.057 に答える
0

実際には、この単純な if ステートメントだけを評価したい場合は、トークナイズして評価しますが、ネストされた if then else、if with experssions、複数の else、変数の割り当て、型など、より複雑なものを評価したい場合は、... LR パーサーなどのパーサーを使用する必要があります。たとえば、 Lex&Yaccを使用して、独自の言語用の優れたパーサーを作成できます。彼らはどういうわけか複雑な文法をサポートしています。しかし、LR パーサー (など) がどのように機能するかを知りたい場合は、それらを読み取り、テーブルを使用してトークンを読み取って解析する方法を確認する必要があります。たとえば、wiki ページを見て、LR パーサー テーブルがどのように機能するかを確認してください (単純なスタック以上のものであり、ここで説明するのは簡単ではありません)。

問題が実際ifにステートメントを解析するだけの場合は、パーサー手法からごまかすことができます。 a < b の後に空のものを追加できます。これはアクションを意味し、 の後に空のものを追加できますelse。これもアクションを意味します。条件を解析すると、正誤に応じていずれかのアクションが実行されます。ちなみに if 文の中で式を解析したい場合は、条件付きスタックが必要ですSLR tableのようなものを意味します。

于 2013-10-17T08:23:03.910 に答える