В любых учебниках по языку программирования нам всегда говорят, что каждый оператор на этом языке имеет левую или правую ассоциативность. Кажется, что ассоциативность - фундаментальное свойство любого оператора, независимо от того, сколько операндов он принимает. Мне также кажется, что мы можем назначить любую ассоциативность любому оператору, независимо от того, как мы назначаем ассоциативность другим операторам.
Но почему это так? Возможно, лучше пример. Предположим, я хочу создать гипотетический язык программирования. Допустимо ли назначать этим операторам ассоциативность таким произвольным образом (все они имеют одинаковый приоритет):
unary operator:
! right associative
binary operators:
+ left associative
- right associative
* left associative
/ right associative
! + - * / все мои 5 операторов имеют одинаковый приоритет.
Если да, то как мой гипотетический синтаксический анализатор заключит в скобки такое выражение, как 2 + 2! 3 + 5 * 6 / 3-5! 3! 3-3 * 2? И почему.
РЕДАКТИРОВАТЬ:
Первый пример (2 + 2! 3 + 5 * 6 / 3-5! 3! 3-3 * 2) неверен. Возможно, забудьте об унарной операции и позвольте мне сказать так: можем ли мы назначать операторам с одинаковым приоритетом и разной ассоциативностью, как это было сделано выше? Если да, то как будет оцениваться пример, скажем, 2 + 3-4 * 5/3 + 2? Потому что большинство языков программирования, кажется, приписывают одинаковую ассоциативность операторам, имеющим одинаковый приоритет. Но мы всегда говорим об АССОЦИАЦИИ ОПЕРАТОРОВ, как если бы это свойство отдельного оператора, а не свойство уровня приоритета.
!
унарный и, следовательно,2!3
недопустим. - person Felix Kling   schedule 28.07.20122 + 3 - (4 * 5 / (3 + 2))
. - person Felix Kling   schedule 28.07.2012