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

@ cows = 4 - 3 + 1 
echo $cows 

Ce simple script csh lors de l'exécution produit "0" pour la sortie lorsque je m'attendais à "2".Dans csh, pourquoi 4 - 3 + 1 == 0?

~root: csh simple.1 
0 

Je l'ai fait un tas de recherche et la seule chose que je pouvais penser était que le « - » a été lu comme une négation unaire plutôt que la soustraction, donc changer la priorité de l'opérateur et de se retrouver avec 4 - 4 plutôt que 2 + 1. Est-ce correct? Si oui, pourquoi? Si non ... aidez!

Edit: Donc, ils ont raison associative! Ces opérateurs ne sont pas associatifs en C, n'est-ce pas? Est-ce que C-Shell est différent de C?

+4

Voici une meilleure question ... pourquoi ne arbres parse csh droit associatif et non à gauche? –

+11

... et une meilleure question. Pourquoi utiliser csh? –

+0

Je ne l'utilisais pas réellement. C'était une question à laquelle j'essayais de répondre pour un ami. Voici la nouvelle discussion: http://stackoverflow.com/questions/1010119/ – Instantsoup

Répondre

32

Pendant que vous attendez les opérateurs à laisser associatif, ils sont right associative in csh, il est donc évalué comme 4-(3+1)

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

Ce n'est pas un arbre d'analyse. Ce n'est pas un AST. Regardez à nouveau la BNF et voyez comment les opérandes et les opérateurs sont des nœuds enfants d'un nœud d'expression. Les compilateurs doivent faire un travail supplémentaire pour convertir les arbres d'analyse en arbres d'expression. –

3

Groupement d'opérateurs. Il lit l'opération comme 4 - (3 + 1), par opposition à (4 - 3) + 1.

21

Les opérateurs + et - sont associatifs à droite dans csh. Cela signifie que '4 - 3 + 1' est évalué comme '4 - (3 + 1)'.

Questions connexes