3 votes

Désambiguïsation en Java des opérateurs préfixes unaires

Comment l'analyseur Java gère-t-il les opérateurs unaires ambigus ?

Par exemple, en supposant que vous ayez int x déclaré quelque part, +--x est un code parfaitement valide. ---x est théoriquement valide aussi, mais le compilateur jette une erreur. De même, +~~~~~~+--x est accepté, mais ~~~~~~++--x ne l'est pas, même si elles peuvent toutes deux être analysées en expressions valides.

D'après ce que je sais, la grammaire est ambiguë, elle doit donc être gérée pendant la tokénisation, mais je ne trouve rien qui l'explique.

3voto

Stephen P Points 5521

---x est ambiguë car elle pourrait signifier -(--x) o --(-x) o -(-(-x)) tandis que +--x est sans ambiguïté car il n'y a pas +-(-x) possible.

3voto

ajmccluskey Points 131

Comme Stephen P l'a laissé entendre, les opérateurs unaires sont regroupés de droite à gauche en Java, ce qui signifie que ces expressions sont ambiguës car différents opérateurs pourraient se regrouper à droite. Voir Section 15.15 de la spécification Java 7 pour les règles sur les opérateurs unaires.

EDITAR

Dans une certaine mesure, je pense que vous avez répondu à votre propre question. Il semble que les expressions ambiguës, telles que ---x, provoquent des erreurs de compilation, car le compilateur ne sait pas ce que vous voulez qu'il fasse. Dans ces cas, c'est le programmeur qui doit résoudre l'ambiguïté en rendant l'expression plus spécifique - par exemple en ajoutant des parenthèses pour lever l'ambiguïté.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X