2009-06-17 14 views
12
#!/bin/csh 

@ cows = 4 - 3 + 1 
echo $cows 

यह सरल csh स्क्रिप्ट जब रन का उत्पादन "0" उत्पादन के लिए जब मैं उम्मीद थी "2"।csh में, क्यों 4 करता है?

~root: csh simple.1 
0 

मैं देख रही है और केवल एक चीज मैं के बारे में सोच सकते थे के एक समूह के लिए किया था "-" नहीं बल्कि घटाव की तुलना में एक एकल निषेध के रूप में पढ़ा जा रहा था, इसलिए ऑपरेटर पूर्वता बदल रहा है और साथ 4 समाप्त - 4 के बजाय 2 + से अधिक 1. क्या यह सही है? यदि हां, तो कोई कारण क्यों? यदि नहीं ... मदद करो!

संपादित करें: तो वे सही साहचर्य रहे हैं! ये ऑपरेटर सी में सही सहयोगी नहीं हैं, क्या वे हैं? सी-शैल सी से अलग है?

+4

यहाँ एक बेहतर सवाल है ... क्यों csh उपयोग सही-साहचर्य पार्स पेड़ और नहीं छोड़ दिया है का मूल्यांकन किया है? –

+11

... और एक बेहतर सवाल है। सीएसएच का उपयोग क्यों करें? –

+0

मैं वास्तव में इसका उपयोग नहीं कर रहा था। यह एक सवाल था कि मैं एक दोस्त के जवाब देने की कोशिश कर रहा था। यहां नई चर्चा है: http://stackoverflow.com/questions/1010119/ – Instantsoup

उत्तर

32

आप ऑपरेटरों साहचर्य छोड़ा जा सकता उम्मीद कर रहे हैं, वहीं वे right associative in csh हैं, तो यह रूप में 4-(3+1)

- 
/\ 
/ \ 
4  + 
    /\ 
    3 1 
+0

एक पार्स पेड़ नहीं है यही कारण है कि। यह एक एएसटी नहीं है। फिर BNF को देखो और देखते हैं कि दोनों ऑपरेंड और ऑपरेटरों एक अभिव्यक्ति नोड के बच्चे नोड्स रहे हैं। कंपाइलर्स को पार्स पेड़ को अभिव्यक्ति पेड़ों में बदलने के लिए अतिरिक्त काम करना पड़ता है। –

3

ऑपरेटर समूह। यह ऑपरेशन को 4 - (3 + 1) के रूप में पढ़ रहा है, (4 - 3) + 1.

21

+ और - ऑपरेटर सीएसएच में सही-सहयोगी हैं। इसका मतलब है कि '4 - 3 + 1' का मूल्यांकन '4 - (3 + 1)' के रूप में किया जाता है।

संबंधित मुद्दे