Compartir a través de


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
    0123456789

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
    truefalse

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
    0123456789

   ParteExponente:
     Indicador de exponenteSignooptDígitos decimales

   Indicador de exponente:uno de
    eE

   Signo:uno de
    +-

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
    =<<=>>=<>
    +-*/^
    &
    &&||
    inexactin

   BinaryOperatorRequiresWhitespace:
     And Espacio en blanco
     Or Espacio en blanco

   Operador de prefijo:
    !

   PrefixOperatorRequiresWhitespace:
     Not Espacio en blanco

   Operador Postfix:
    %

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