Gramática de expresión
Nota
Microsoft Power Fx es el nuevo nombre del lenguaje de fórmulas para aplicaciones de lienzo. Estos artículos son un trabajo en progreso a medida que extraemos el idioma de las aplicaciones de lienzo, lo integramos con otros productos Microsoft Power Platform y ponerlo a disposición como código abierto. Empiece con Información general de Microsoft Power Fx para una introducción al idioma.
Microsoft Power Fx se basa en fórmulas que unen un nombre a una expresión. Al igual que en las hojas de cálculo de Excel, a medida que cambian las dependencias entrantes de la expresión, la expresión se vuelve a calcular y el valor del nombre cambia, posiblemente haciendo que el recálculo se vuelva en cascada a otras fórmulas.
Esta gramática cubre la parte de expresión de la fórmula. La vinculación a un nombre para crear una fórmula depende de cómo se integre Power Fx. En las hojas de trabajo, la sintaxis de enlace no está expuesta, está implícita en la ubicación donde se escribe la expresión, por ejemplo, ingresando =B1
en la celda A1. En algunos casos, no se requiere ningún enlace y Power Fx se utiliza como evaluador de expresiones, por ejemplo, para admitir columnas calculadas de una tabla de base de datos. Para Power Apps, el enlace está implícito cuando se trabaja en Power Apps Studio con un formato de serialización basado en YAML para usar fuera de Power Apps Studio.
Convenciones gramaticales
Las gramáticas léxicas y sintácticas se presentan mediante producciones gramaticales. En cada producción gramatical se define un símbolo que no es de terminal y las posibles expansiones de ese símbolo en secuencias de símbolos terminales o no terminales. En las producciones gramaticales, los símbolos no terminales se muestran en cursiva y los símbolos terminales se muestran en una fuente de ancho fijo.
La primera línea de una producción gramatical es el nombre del símbolo que no es de terminal que se define, seguido de un signo de dos puntos. Cada línea con sangría sucesiva contiene una posible expansión del símbolo de no terminal proporcionada como una secuencia de símbolos terminales o no terminales. Por ejemplo, la producción:
Identificador global:
[@
Identificador]
Define un GlobalIdentifier para consistir en el token [@
, seguido de un Identificador, seguido del token ]
.
Cuando hay más de una expansión posible de un símbolo que no es de terminal, las alternativas se enumeran en líneas independientes. Se usa el sufijo de subíndice "opt" para indicar un símbolo opcional. Por ejemplo, la producción:
Llamada de función:
IdentificadorDeFunción(
ArgumentosDeFunciónopt)
es la abreviatura de:
Llamada de función:
Identificador de función(
)
FunctionIdentifier(
Argumentos de función)
Las alternativas se muestran normalmente en líneas independientes, aunque en casos donde hay muchas alternativas, la frase "uno de" podría preceder a una lista de expansiones indicadas en una sola línea. Esto es simplemente una abreviatura para enumerar cada una de las alternativas en líneas independientes.
Por ejemplo, la producción:
DecimalDigit:uno de
0
1
2
3
4
5
6
7
8
9
es la abreviatura de:
Dígito decimal:
0
1
2
3
4
5
6
7
8
9
Análisis léxico
La producción de unidades léxicas define la gramática léxica para una expresión de Power Fx. Cada expresión válida de Power Fx se ajusta a esta gramática.
Unidad de expresión:
Elementos de expresiónopt
Elementos de expresión:
Elemento de expresión
Elemento de expresiónElementos de expresiónopt
Elemento de expresión:
Espacio en blanco
Comentario
En el nivel léxico, una expresión de Power Fx está formada por una secuencia de elementos Whitespace, Comment y Token. Cada una de estas producciones se explica en las secciones siguientes. Solo los elementos Token son significativos en la gramática sintáctica.
Espacio en blanco
El espacio en blanco se usa para separar los comentarios y los tokens dentro de un documento de Power Apps.
Espacio en blanco:
cualquier separador de espacio Unicode (clase Zs)
cualquier separador de línea Unicode (clase Zl)
cualquier separador de párrafo Unicode (clase Zp)
carácter de tabulación horizontal (U+0009)
carácter de avance de línea (U+000A)
carácter de tabulación vertical (U+000B)
Carácter de avance de página (U+000C)
Carácter de retorno de carro (U+000D)
Carácter de línea siguiente (U+0085)
Comentarios
Se admiten dos formas de comentarios:
- Los comentarios de una sola línea comienzan con los caracteres
//
y se extienden hasta el final de la línea de código fuente. - Los comentarios delimitados comienzan con los caracteres
/*
y terminan con los caracteres*/
. Los comentarios delimitados pueden abarcar varias líneas.
Comentario:
Comentario delimitado
Comentario de una sola línea
Comentario de una sola línea:
//
CaracteresDeComentarioDeLíneaSimpleopt
CaracteresDeComentarioDeLíneaSingle:
Carácter de comentario de una sola línea
CarácterDeComentarioDeLíneaSimpleCaracteresDeComentarioDeLíneaSimpleopt
Carácter de comentario de una sola línea:
cualquier carácter Unicode excepto un NewLineCharacter
Comentario delimitado:
/*
CaracteresDelimitadosDeComentarioopt*/
Caracteres de comentarios delimitados:
CaracteresDelimitadosDeComentarioSinAsteriscoCaracteresDelimitadosDeComentarioopt
*
Comentario delimitado después de caracteres asterisco
Comentario delimitado después de caracteres asterisco:
Comentario delimitadoSin barraAsteriscoCarácterCaracteres de comentarios delimitadosopt
*
Comentario delimitado después de asterisco Caracteres
CaracteresDeComentariosDelimitadosSinAsterisco:
Cualquier carácter Unicode menos * (asterisco)
Comentario delimitado sin barra oblicua y carácter asterisco:
Cualquier carácter Unicode menos un / (barra) o * (asterisco)
Los comentarios no están anidados. Las secuencias de caracteres /*
y */
no tienen ningún significado especial en un comentario de una sola línea y las secuencias de caracteres //
y /*
tampoco lo tienen dentro de un comentario delimitado.
Los comentarios no se procesan dentro de las cadenas literales de texto.
El siguiente ejemplo incluye dos comentarios delimitados:
/* Hello, world
*/
"Hello, world" /* This is an example of a text literal */
Los siguientes ejemplos incluyen tres comentarios de una sola línea:
// Hello, world
//
"Hello, world" // This is an example of a text literal
Literales
Un literal es una representación de código fuente de un valor.
Literalmente:
Lógico Literal
Número literal
Texto literal
Literales lógicos
Un literal lógico se usa para escribir los valores true y false, y genera un valor lógico.
Literal lógico:uno de
true
false
Literales numéricos
Un literal numérico se usa para escribir un valor numérico y genera un valor de número.
NúmeroLiteral:
Dígitos decimalesParte del exponenteopt
DígitosDecimalesSeparadorDecimalDígitosDecimalesoptParteExponenteopt
SeparadorDecimalDígitosDecimalesParteExponenteopt
Dígitos decimales:
Dígito decimal
Dígitos decimalesDígito decimal
DecimalDigit:uno de
0
1
2
3
4
5
6
7
8
9
ParteExponente:
Indicador de exponenteSignooptDígitos decimales
Indicador de exponente:uno de
e
E
Literales de texto
Un literal de texto se usa para escribir una secuencia de caracteres Unicode y genera un valor de texto. Los literales de texto se encierran entre comillas dobles. Para incluir comillas dobles en el valor del texto, repita las comillas dobles, como se muestra en el siguiente ejemplo:
"The ""quoted"" text" // The "quoted" text
Texto literal:
"
Caracteres literales de textoopt"
Caracteres literales del texto:
Carácter literal de textoCaracteres literales de textoopt
Carácter literal del texto:
TextoCarácterNoDobleComilla
Secuencia de escape de cita doble
Carácter de texto sin comillas dobles:
cualquier punto de código Unicode excepto comillas dobles
Secuencia de escape de cita doble:
"
"
Identificadores
Un identificador es un nombre que se usa para hacer referencia a un valor. Los identificadores pueden ser normales o entre comillas.
Identificador:
NombreIdentificadorperonooperadoroPalabraClaveContexto
NombreIdentificador:
IdentificadorCarácterInicioIdentificadorCarácterContinuoopt
'
Identificador entre comillas simples'
IdentificadorInicioCarácter:
LetraCarácter
_
IdentificadorContinuarCarácter:
IdentificadorCarácterInicio
Carácter decimal
Personaje que conecta
Combinando Personajes
Formato de carácter
IdentificadorContinuarCaracteres:
IdentificadorContinuarCarácterIdentificadorContinuarCaracteresopt
LetraCarácter:
cualquier carácter Unicode de la clase Letra mayúscula (Lu) o Letra minúscula (Ll)
cualquier carácter Unicode de la clase Título letra mayúscula (Lt) (Lt)
cualquier carácter Unicode de la clase Modificador de letra (Lm) u (Lm) u Otra letra (Lo)
cualquier carácter Unicode de la clase letra Número (Nl)
Combinación de caracteres:
cualquier carácter Unicode de la clase Marca sin espaciado (Mn) o Marca de combinación de espaciado (Mc)
Carácter decimal :
cualquier carácter Unicode de la clase Dígito decimal (Nd)
Personaje de conexión:
cualquier carácter Unicode de la clase Puntuación del conector (Pc)
Carácter de formato:
cualquier carácter Unicode de la clase Formato (Cf)
Identificadores entre comillas simples
Un identificador único entre comillas puede contener cualquier secuencia de caracteres Unicode como identificador, incluidas las palabras clave, los espacios en blanco, los comentarios y los operadores. Los caracteres de comillas simples se admiten con una secuencia de escape de dos comillas simples.
Identificador entre comillas simples:
Caracteres identificadores entre comillas simples
Caracteres identificadores entre comillas simples:
Carácter identificador entre comillas simplesCaracteres identificadores entre comillas simplesopt
Carácter identificador entre comillas simples:
TextoCaracteresSinComillasSimples
Secuencia de escape de cita única
TextoCaracteresSinComillasSimples:
Cualquier carácter Unicode menos ' (U+0027)
Secuencia de escape de cita única:
'
'
Identificador desambiguado
DesambiguadoIdentificador:
Identificador de columna de tabla
Identificador global
Identificador de columna de tabla:
Identificador[@
Identificador]
Identificador global:
[@
Identificador]
Palabras clave de contexto
ContextoPalabra clave:
Parent
Self
ThisItem
ThisRecord
Distinguir mayúsculas de minúsculas
Los nombres de identificadores Power Apps distinguen entre mayúsculas y minúsculas. La herramienta de creación los cambiará automáticamente al caso correcto cuando se escriba una fórmula.
Separadores
Separador decimal:
.
(punto) para idiomas que utilizan un punto como separador de números decimales, por ejemplo 1.23
,
(coma) para idiomas que utilizan una coma como separador de números decimales, por ejemplo 1,23
Separador de lista:
,
(coma) si SeparadorDecimal es .
(punto)
;
(punto y coma) si SeparadorDecimal es ,
(coma)
Separador de encadenamiento:
;
(punto y coma) si SeparadorDecimal es .
(punto)
;;
(doble punto y coma) si SeparadorDecimal es ,
(coma)
Operadores
Los operadores se usan en formulas para describir las operaciones con uno o varios operandos implicados. Por ejemplo, la expresión a + b
usa el operador +
para agregar los dos operandos a
y b
.
operador:
Operador binario
Operador binario requiere espacios en blanco
Operador de prefijo
PrefixOperatorRequiresWhitespace
Operador Postfix
OperadorBinario:uno de
=
<
<=
>
>=
<>
+
-
*
/
^
&
&&
||
in
exactin
BinaryOperatorRequiresWhitespace:
And
Espacio en blanco
Or
Espacio en blanco
PrefixOperatorRequiresWhitespace:
Not
Espacio en blanco
Referencia de operador
Operador de referencia:uno de
.
!
Referencia del objeto
Referencia:
Referencia base
ReferenciaBaseOperadorReferenciaListaReferencia
Referencia base:
Identificador
Identificador desambiguado
ContextoPalabra clave
Lista de referencias:
Identificador
IdentificadorOperador de referenciaLista de referencia
Registro alineado
Registro en línea:
{
Lista de registros en líneaopt}
Lista de registros en línea:
Identificador:
Expresión
Identificador:
ExpresiónListSeparatorInlineRecordList
Tabla alineada
Tabla en línea:
[
Lista de tablas en líneaopt]
Lista de tabla en línea:
Expresión
ExpresiónSeparador de listaLista de tabla en línea
Expression
Expresión:
Literal
Referencia
Registro en línea
Tabla en línea
Llamada de función
(
Expresión)
PrefijoOperadorExpresión
Operador de sufijoExpresión
ExpresiónBinaryOperatorExpresión
Expresiones encadenadas
Expresión encadenada:
Expresión
ExpresiónSeparador de encadenamientoExpresión encadenadaopt
Llamada a función
Llamada de función:
IdentificadorDeFunción(
ArgumentosDeFunciónopt)
Identificador de función:
Identificador
Identificador.
Identificador de función
Argumentos de función:
Expresión encadenada
Expresión encadenadaSeparador de listaArgumentos de función