みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

評価について質問

質問1:式を構成する要素(変数やリテラル)の評価と演算について、左から右に評価していく過程で、その式の演算子の優先順位の高い順から、その演算子の取るリテラルの評価が終わり次第、計算をする。
よって、オペランドを取る演算子の位置によっては、評価と演算が交互に行われることもある。


たとえば
a*b+cという式があれば、
aを評価→bを評価→*の演算→cを評価→+の演算という計算プロセス。

これはつまり、*は、この式において最も優先順位が高いから、aとbを評価した直後、演算を実行したといえる。

何故僕はこんな質問したかというと、全ての要素の評価が終わってから、演算が実行されるものだと思ったからです。


質問2:「式を評価する」とは、変数やリテラルの評価と優先順位を考慮した演算を実行し、そしてその式の答えを求める一連のプロセスのことでしょうか?

質問3:変数の評価とは、「ソースコードの中でその単語(token)を変数だと解釈することで、そのtokenがjavaの変数名の規約に従っていることかつ、それが事前に宣言されていることを
検査した上で、その変数の値を解釈する」こういうことですか?

投稿日時 - 2011-07-11 14:07:03

QNo.6868672

すぐに回答ほしいです

質問者が選んだベストアンサー

質問1:そのとおり。

質問2:そのとおり。

質問3:違います。

変数の評価とは、「ソースコードの中でその単語(token)を変数だと解釈することで、そのtokenがjavaの変数名の規約に従っていることかつ、それが事前に宣言されていることを検査した上で、その変数の値を解釈する」こういうことですか?

それはコンパイラがすること。コンパイル済みのコードには単語(変数名)自体が有りません。

変数を評価するとは、変数に入っている値を認識(解釈)することです。

事前にa=0;という式が実行されていたとしても、その変数の中は実際に評価するとき何が入っているかは判りません。別なところで変更されているかもしれない。なので、変数aの中は「0」なんだと認識すること。

投稿日時 - 2011-07-11 16:27:51

お礼

丁重なご回答誠にありがとうございます!!

>変数を評価するとは、変数に入っている値を認識(解釈)することです。

シンプルな回答助かります!

投稿日時 - 2011-07-15 22:29:04

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

回答はNo2の方のとおりかな。

補足として、質問1についてですが、このあたりは言語によっていろいろです。ここはJavaのカテゴリなので、Javaであれば、お書きのとおり。

Cだと、部分式の評価順序は(別途定めのある場合を除き)未規定です。つまり、a*b+c に対して、
cを評価 → bを評価 → aを評価 → a*bの演算 → その結果+cの演算
もありえるということ。演算子の優先度があるので、*の演算が+の演算より先であることは保証。
別途定めとは、&& や || や , や ? : の演算子のこと。

Java以外の言語に触れる機会があるなら、そういうことも知っておいたほうがいいでしょうね。

投稿日時 - 2011-07-12 00:30:44

お礼

丁重なご回答誠にありがとうございます!!
java以外にも触れてみようかな、、

投稿日時 - 2011-07-15 22:29:34

ANo.1

しまった・・・こっちを先に読むべきだったわね。
もう片方の質問にも回答したけど式の評価は

・原則左から順に処理する
・オペランドが出現した場合、その左右をオペランドで処理する
・その2つのうち、優先度の高いものがあれば先に処理する

たったこれだけの規則よ。
コンパイルという手順があるから無理だけど
もしコンパイルという手順がなければ
右の方に文法が間違ったコードが会ったとしても実行されちゃうわけね。

つまり
回答1
・全ての要素の評価を行わない、上記のルールに則って左から行われるわ。
回答2
・コードを実行すること。それ以上でもそれ以下でもないわ。
回答3
これはちょっとわからないわ。

投稿日時 - 2011-07-11 16:19:52

お礼

いつもお手数かけます、、丁重なご回答ありがとうございます!!
もっと僕シンプルに考える必要ありますね、、

投稿日時 - 2011-07-15 22:28:29

あなたにオススメの質問