1.3.1b Sintaxis de las expresiones C++
§1 Sinopsis:
En este epígrafe se incluye una descripción formal de la gramática permitida a las expresiones en C++. Como puede verse, las expresiones son definidas recursivamente, de forma que las subexpresiones pueden ser anidadas sin ningún límite formal, aunque quizás el compilador pueda reportar un error de límite de memoria si no puede compilar una expresión muy compleja.
Como en el caso de las sentencias (
1.3.1a), en los casos que pudieran resultar
dudosos, junto a la traducción al español se
ha incluido el original inglés.
Expresiones primarias: (primary-expression):
literal
this
:: identificador
:: nombre de función-operador (operator-function-name)
:: nombre cualificado
(expresión)
expresión-de-identificación
literal:
constante entera (integer-constant)
constante carácter (character-constant)
constante fraccionaria (floating-constant)
cadena de caracteres (string-literal)
expresión-de-identificación:
nombre (no cualificado)
nombre-cualificado
nombre (no cualificado):
identificador
nombre de función-operador
conversion-function-name
~ nombre-de-clase
nombre-cualificado
nombre-cualificado: (qualified-name)
nombre-cualificado-de-clase :: nombre
expresiones: (postfix-expression)
primary-expression
postfix-expression [ expression ]
postfix-expression ( <expression-list> )
simple-type-name ( <expression-list> )
postfix-expression . name
postfix-expression -> name
postfix-expression ++
postfix-expression --
const_cast < identificación-de-tipo > ( expresión )
dynamic_cast < identificación-de-tipo > ( expresión )
reinterpret_cast < identificación-de-tipo > ( expresión )
static_cast < identificación-de-tipo > ( expresión )
typeid ( expresión )
typeid ( nombre-de-tipo )
lista de expresiones: (expression-list)
expresión-de-asignación
lista-de-expresiones , expresión-de-asignación
expresión-unitiaria: (unary-expression)
postfix-expression
++ expresión unitaria
- - expresión-unitaria
operador-unario expresión-de-modelado
sizeof expresión-unitaria
sizeof ( nombre-de-tipo )
expresión de asignación-de-memoria (allocation-expression)
expresión-de-desasignación
operador-unario: (alguno de los siguientes)
& * + - ! ~
expresión-de-asignación-de-memoria: (allocation-expression)
<::> new <placement> new-type-name <inicializador>
<::> new <placement> (nombre-de-tipo) <inicializador>
placement:
(lista-de-expresiones )
new-type-name:
especificadores-de-tipo <declarador-new>
declarador-new: (new-declarator)
ptr-operator <new-declarator>
declarador-new [ <expresión> ]
expresión de desasignación: (deallocation-expression)
<::> delete expresión-de-modelado
<::> delete [ ] expresión-de-modelado
expresión-de-modelado: (cast-expression)
expresión-unitaria
( nombre-de-tipo ) expresión-de-modelado
expresión-pm: (pm-expression)
expresión-de-modelado
pm-expresion .* expresión-de-modelado
pm-expresion ->* expresión-de-modelado
expresión-multiplicativa: (multiplicative-expression)
expresión-pm
expresión-multiplicativa * pm-expression
expresión-multiplicativa / pm-expression
expresión-multiplicativa % pm-expression
expresión-aditiva: (additive-expression)
expresión-multiplicativa
expresión-aditiva + expresión-multiplicativa
expresión-aditiva - expresión-multplicativa
expresión-de-desplazamiento: (shift-expression):
expresión-aditiva
expresión-de-desplazamiento << expresión-aditiva
expresión-de-desplazamiento >> expresión-aditiva
expresión relacional: (relational-expression)
expresión-de-desplazamiento
expresión-relacional < expresión-de-desplazamiento
expresión-relacional > expresión-de-desplazamiento
expresión-relacional <= expresión-de-desplazamiento
expresión-relacional >= expresión-de-desplazamiento
expresión-de-igualdad: (equality-expression)
expresión-relacional
expresión-de-igualdad == expresión-relacional
expresión-de-igualdad != expresión-relacional
expresión-AND: (AND-expression)
expresión-de-igualdad
expresión-AND & expresión-de-igualdad
expresión-de-OR-exclusivo: (exclusive-OR-expression)
expresión-AND
expresión-de-OR-exclusivo ^ expresión-AND
expresión-de-OR-inclusivo: (inclusive-OR-expression)
expresión-de-OR-exclusivo
expresión-de-OR-inclusivo | expresión-de-OR-exclusivo
expresión-lógica-AND: (logical-AND-expression)
expresión-de-OR-inclusivo
expresión-lógica-AND && expresión-de-OR-inclusivo
expresión-lógica-OR: (logical-OR-expression)
expresión-lógica-AND
expresión-lógica-OR || expresón-lógica-AND
expresión condicional:
expresión-lógica-OR
expresión-logica-OR ? expresión : expresión-condicional
expresión-de-asignación: (assignment-expression)
expresión condicional
expresión-unitiaria operador-de-asignación expresión-de-asignación
operador-de-asignación (alguno de los siguientes):
= *= /= %= += -=
<< => >= &= ^= |=
expresión:
expresión-de-asignación
expresión, expresión-de-asignación
expresión-constante:
expresión-condicional