Я не могу понять, что означает синтаксис на C99. Здесь, говоря C99, я имею в виду ISO/IEC 9899: 1999. Ну, я думаю, что синтаксическая часть грамматики не сильно меняется с тех пор, как ANSI C, C89.Как понять C99 стандартный синтаксис
Возьмем для примера из this question:
6.5.5 Multiplicative operators
Syntax
multiplicative-expression:
cast-expression
multiplicative-expression * cast-expression
multiplicative-expression/cast-expression
multiplicative-expression % cast-expression
Constraints
Each of the operands shall have arithmetic type. The operands of the % operator
shall have integer type.
Semantics
The usual arithmetic conversions are performed on the operands.
The result of the binary * operator is the product of the operands.
The result of the/operator is the quotient
Интересно, почему в синтаксисе мультипликативных операторов мы имеем «литую-выражение»? И какая грамматика может означать этот синтаксис? В that question @Avi сказал, что в
a*b*c
«с должны быть разобраны как литым выражение», я не могу понять это.
Возьмем другой пример из c99 6.6.1, синтаксис постоянных выражений
Syntax
constant-expression:
conditional-expression
почему это условное выражение приходят сюда? Может ли кто-нибудь показать мне, как объяснить этот синтаксис? Спасибо всем заранее.
Я вижу, что если мы просто принимаем 'cast-expression' как некоторое выражение, не являющееся« мультипликативным-выражением », то мы можем знать ассоциативность мультипликативного выражения. Но само литье-выражение имеет синтаксис в c99 '6.5.4.1', нам не нужно гарантировать, что 'c' в выражении примера является' cast-expression'? Можете ли вы немного рассказать о части «условного выражения»? –
Это означает, что мы можем просто изменить выражение 'cast-expression' на' условное выражение'? –
Операторы трансляции просто представляют собой ряд операторов с одним приоритетом выше мультипликативных операторов. Таким же образом строится глава стандартного приоритета оператора. Да, это довольно непонятно и запутанно, как и вся глава относительно выражений в стандарте. – Lundin