3.2. Κατηγορίες εκφράσεων της C – προτεραιότητα και προσεταιριστικότητα

Κατηγορίες εκφράσεων της C – προτεραιότητα και προσεταιριστικότητα

Οι εκφράσεις τής C μπορούν να καταταγούν στις παρακάτω κατηγορίες:

  • Σταθερές εκφράσεις. Είναι εκφράσεις που περιέχουν μόνο σταθερές τιμές.
  • Ακέραιες εκφράσεις και εκφράσεις κινητής υποδιαστολής. Είναι εκφράσεις, οι οποίες μετά από όλες τις άμεσες και έμμεσες μετατροπές τύπων δίνουν αποτέλεσμα ακέραιου τύπου ή τύπου κινητής υποδιαστολής, αντίστοιχα.
  • Εκφράσεις δείκτη. Είναι εκφράσεις με τιμή μία διεύθυνση. Περιλαμβάνουν μεταβλητές δείκτη, τον τελεστή διεύθυνσης (&), αλφαριθμητικές σταθερές και ονόματα πινάκων.

 

Διαφήμιση

 

Ο υπολογισμός μίας έκφρασης δεν είναι πάντοτε απλή υπόθεση, ιδιαίτερα στην περίπτωση που υπάρχουν ένθετες (nested) εκφράσεις, δηλαδή εκφράσεις που είναι φωλιασμένες μέσα σε άλλες. Στην έκφραση

 

(((n+5)<=a) && q)

 

η έκφραση n+5 είναι φωλιασμένη στην έκφραση (n+5)<=a, η οποία με τη σειρά της είναι φωλιασμένη στη συνολική έκφραση. Μία άλλη περίπτωση δυσχέρειας στον υπολογισμό είναι η διαδοχική παράθεση τελεστών: 7*8-2, η οποία μπορεί να υπολογισθεί είτε ως (7*8)-2=54 είτε ως 7*(8-2)=42, οδηγώντας σε διαφορετικά αποτελέσματα.

Για να αντιμετωπισθούν οι ανωτέρω δυσχέρειες έχει υιοθετηθεί μία σειρά εφαρμογής των τελεστών, η επονομαζόμενη εφαρμοστική σειρά (applicative order), η οποία στηρίζεται στις έννοιες της προτεραιότητας (precedence) και της προσεταιριστικότητας (associativity) των τελεστών.

Οι τελεστές ταξινομούνται σε επίπεδα προτεραιότητας, με τη σύμβαση ότι οι τελεστές υψηλότερου επιπέδου προτεραιότητας δρουν επί των τελεστέων πριν από τους τελεστές χαμηλότερου επιπέδου.

Η ύπαρξη περισσότερων τελεστών στο ίδιο επίπεδο προτεραιότητας επιβάλλει τον προσδιορισμό της κατεύθυνσης εφαρμογής, με την κατεύθυνση από τα αριστερά προς τα δεξιά να είναι ευρύτερα χρησιμοποιούμενη. Ένας τελεστής καλείται αριστερής προσεταιριστικότητας (left associative), όταν σε εκφράσεις που περιέχουν πολλά στιγμιότυπα του τελεστή η ομαδοποίηση γίνεται από τα αριστερά προς τα δεξιά. Έτσι, η έκφραση 10-8-2 υπολογίζεται ως (10-8)-2. Οι τελεστές +,-,*,/ είναι όλοι αριστερής προσεταιριστικότητας.

 

Διαφήμιση

 

Για τη C παράδειγμα δεξιάς προσεταιριστικότητας αποτελεί η ύψωση σε δύναμη και ο τελεστής ανάθεσης (=). Στην έκφραση num1=num2=10 εφαρμόζεται πρώτα ο δεξιός τελεστής ανάθεσης, με αποτέλεσμα η num2 να αποκτήσει την τιμή 10, και ακολούθως εφαρμόζεται ο αριστερός τελεστής ανάθεσης, έτσι ώστε η num1 εξισώνεται με τη num2 και αποκτά την τιμή 10.

Η προτεραιότητα και το είδος προσεταιριστικότητας των τελεστών παρατίθενται στον παρακάτω πίνακα, όπου οι τελεστές έχουν τοποθετηθεί με σειρά φθίνουσας προτεραιότητας:

 

 

Προτεραιότητα και προσεταιριστικότητα τελεστών
Εικόνα 10. Προτεραιότητα και προσεταιριστικότητα τελεστών

 

Με βάση τα προαναφερθέντα, είναι προφανές ότι με τους κανόνες προτεραιότητας και προσεταιριστικότητας δεν είναι απαραίτητη η χρήση παρενθέσεων για τον προσδιορισμό του τρόπου υπολογισμού της τιμής των εκφράσεων. Ωστόσο, οι παρενθέσεις χρησιμοποιούνται για τους ακόλουθους λόγους:

  • Για να προσδιορισθεί συγκεκριμένη σειρά εφαρμογής, όπως στην έκφραση (2-3)*4.
  • Για να καταστεί μία έκφραση ευανάγνωστη, όπως στην έκφραση 2-(3*4), παρά το γεγονός ότι στην τελευταία περίπτωση αποτελεί πλεονασμό.

Στην περίπτωση ένθετων παρενθέσεων ο μεταγλωττιστής εφαρμόζει πρώτα τις εσωτερικές παρενθέσεις. Για παρενθέσεις όμως που βρίσκονται στο ίδιο βάθος ένθεσης, δεν ορίζεται η σειρά υπολογισμού.

 

Διαφήμιση

Συνημμένα1

  • Προτεραιότητα και προσεταιριστικότητα τελεστών
SEE ALL Add a note
YOU
Add your Comment
 
error: Το περιεχόμενο προστατεύεται!!
X