Gramática de expresión
Nota
Microsoft Power Fx é o novo nome da linguaxe de fórmulas para aplicacións de lenzo. Estes artigos son un traballo en curso a medida que extraemos o idioma das aplicacións de lenzo, o integramos con outros produtos de Microsoft Power Platform e o poñemos a disposición como código aberto. Comece coa visión xeral de Microsoft Power Fx para ver unha introdución á lingaxe.
Microsoft Power Fx baséase en fórmulas que unen un nome a unha expresión. Do mesmo xeito que nas follas de traballo de Excel, a medida que as dependencias de entrada coa expresión cambian, a expresión recálculase e o valor do nome cambia, posiblemente xerando en cascada o recálculo noutras fórmulas.
Esta gramática abrangue a parte de expresión da fórmula. A vinculación a un nome para crear unha fórmula depende de como se integre Power Fx. Nas follas de traballo, a sintaxe de vinculación non está exposta, está implícita no lugar onde está escrita a expresión; por exemplo, inserindo =B1
na cela A1. Nalgúns casos, non se require ningunha vinculación e Power Fx úsase como avaliador de expresións, por exemplo, para soportar columnas calculadas dunha táboa de base de datos. Para Power Apps, a vinculación está implícita cando se traballa en Power Apps Studio cun formato de serialización baseado en YAML para usar fóra de Power Apps Studio.
Convencións gramaticais
As gramáticas léxicas e sintácticas preséntanse empregando producións gramaticais. Cada produción gramatical define un símbolo non terminal e as posibles expansións dese símbolo non terminal en secuencias de símbolos non terminais ou terminais. Nas producións gramaticais, os símbolos non terminais móstranse en cursiva e os símbolos terminais móstranse nunha fonte de ancho fixo.
A primeira liña dunha produción gramatical é o nome do símbolo non terminal que se define, seguido de dous puntos. Cada liña sucesiva de sangría contén unha posible expansión do símbolo non terminal dado como unha secuencia de símbolos non terminais ou terminais. Por exemplo, a produción:
GlobalIdentifier:
[@
Identificador]
define un GlobalIdentifier como un elemento que consta do token [@
seguido dun Identificador, seguido do token ]
.
Cando hai máis dunha posible expansión dun símbolo non terminal, as alternativas enuméranse en liñas separadas. O subíndice "opt" úsase para indicar un símbolo opcional. Por exemplo, a produción:
FunctionCall:
FunctionIdentifier(
FunctionArgumentsopt)
é a abreviatura de:
FunctionCall:
Identificador de función(
)
FunctionIdentifier(
FunctionArguments)
As alternativas normalmente están listadas en liñas separadas, aínda que nos casos en que hai moitas alternativas, a frase "one of" pode preceder a unha lista de expansións dada nunha única liña. Isto é simplemente unha abreviatura para listar cada unha das alternativas en liñas separadas.
Por exemplo, a produción:
DecimalDigit:unha de
0
1
2
3
4
5
6
7
8
9
é a abreviatura de:
Cifra decimal:
0
1
2
3
4
5
6
7
8
9
Análise léxica
A produción de unidades léxicas define a gramática léxica para unha expresión de Power Fx. Todas as expresións válidas de Power Fx axústanse a esta gramática.
ExpressionUnit:
ExpressionElementsopt
ExpressionElements:
ExpressionElement
ExpressionElementExpressionElementsopt
ExpressionElement:
Espazo en branco
Comenta
A nivel léxico, unha expresión de Power Fx está composta por un fluxo de elementos de Espazo en branco, Comentario e Token. Cada unha destas producións está cuberta nas seguintes seccións. Só os elementos Token son significativos na gramática sintáctica.
Espazo en branco
O espazo en branco úsase para separar comentarios e tokens dentro dun documento de Power Apps.
Espazo en branco:
calquera separador de espazo Unicode (clase Zs)
calquera separador de liña Unicode (clase Zl)
calquera separador de parágrafos Unicode (clase Zp)
Carácter de pestana horizontal (U + 0009)
Carácter de avance de liña (U + 000A)
Carácter de pestana vertical (U + 000B)
Carácter de avance de páxina (U + 000C)
Carácter de retorno de carro (U+000D)
Carácter de seguinte liña (U+0085)
Comentarios
Admítense dúas formas de comentarios:
- Comentarios dunha soa liña que comezan cos caracteres
//
e se estenden ao final da liña de orixe. - Comentarios delimitados que comezan cos caracteres
/*
e rematan cos caracteres*/
. Os comentarios delimitados poden abarcar varias liñas.
Comentario:
Comentario delimitado
SingleLineComment
SingleLineComment:
//
SingleLineCommentCharactersopt
SingleLineCommentCharacters:
SingleLineCommentCharacter
SingleLineCommentCharacterSingleLineCommentCharactersopt
SingleLineCommentCharacter:
calquera carácter Unicode excepto un NewLineCharacter
DelimitedComment:
/*
DelimitedCommentCharactersopt*/
DelimitedCommentCharacters:
DelimitedCommentCharactersNoAsteriskDelimitedCommentCharactersopt
*
DelimitedCommentAfterAsteriskCharacters
DelimitedCommentAfterAsteriskCharacters:
DelimitedCommentNoSlashAsteriskCharacterDelimitedCommentCharactersopt
*
DelimitedCommentAfterAsteriskCharacters
DelimitedCommentCharactersNoAsterisk:
calquera carácter Unicode excepto * (asterisco)
DelimitedCommentNoSlashAsteriskCharacter:
calquera carácter Unicode excepto a / (barra) ou * (asterisco)
Os comentarios non están aniñados. As secuencias de caracteres /*
e */
non teñen un significado especial dentro dun comentario dunha soa liña, e as secuencias de caracteres //
e /*
non teñen un significado especial dentro dun comentario delimitado.
Os comentarios non se procesan dentro de cadeas de literais de texto.
O seguinte exemplo inclúe dous comentarios delimitados:
/* Hello, world
*/
"Hello, world" /* This is an example of a text literal */
Os seguintes exemplos inclúen tres comentarios dunha soa liña:
// Hello, world
//
"Hello, world" // This is an example of a text literal
Literais
Un literal é unha representación de código fonte dun valor.
Literal:
LóxicoLiteral
NúmeroLiteral
Texto literal
Literais lóxicos
Un literal lóxico úsase para escribir os valores verdadeiro e falso e producir un valor lóxico.
LóxicoLiteral:unha de
true
false
Literais de número
Un literal numérico úsase para escribir un valor numérico e producir un valor numérico.
NumberLiteral:
DecimalDigitsExponentPartopt
DecimalDigitsDecimalSeparatorDecimalDigitsoptExponentPartopt
DecimalSeparatorDecimalDigitsExponentPartopt
Cifras decimais:
Díxito decimal
DecimalDigitsDíxito decimal
DecimalDigit:unha de
0
1
2
3
4
5
6
7
8
9
ExponentPart:
ExponentIndicatorSignoptDíxitos decimais
Literais de texto
Un literal de texto úsase para escribir unha secuencia de caracteres Unicode e producir un valor de texto. Os literais de texto están encerrados entre comiñas dobres. Para incluír comiñas dobres no valor do texto, repita as comiñas dobres, como se mostra no seguinte exemplo:
"The ""quoted"" text" // The "quoted" text
TextLiteral:
"
TextLiteralCharactersopt"
TextLiteralCharacters:
TextLiteralCharacterTextLiteralCharactersopt
TextLiteralCharacter:
TextCharacterNoDoubleQuote
DoubleQuoteEscapeSequence
TextCharacterNoDoubleQuote:
calquera punto de código Unicode excepto as comiñas dobres
DoubleQuoteEscapeSequence:
"
"
Identificadores
Un identificador é un nome usado para facer referencia a un valor. Os identificadores poden ser identificadores regulares ou identificadores entre comiñas simples.
Identificador:
IdentifierNameperononOperadorouContextKeyword
IdentifierName:
IdentifierStartCharacterIdentifierContinueCharactersopt
'
SingleQuotedIdentifier'
IdentifierStartCharacter:
LetraCaracter
_
IdentificadorContinueCharacter:
Identificador de inicioCaracter
Carácter DecimalDíxito
Personaxe de conexión
Carácter combinado
Formato de caracteres
IdentificadorContinueCharacters:
IdentifierContinueCharacterIdentifierContinueCharactersopt
LetraCaracter:
calquera carácter Unicode da clase Letra maiúscula (Lu) ou Letra minúscula (Ll)
calquera carácter Unicode da clase letra maiúscula (Lt)
calquera carácter Unicode da clase modificador de letra (Lm) ou Outra letra (Lo)
calquera carácter Unicode da clase letra número (Nl)
CombiningCharacter:
calquera carácter Unicode da clase Marca sen espazamento (Mn) ou Espazamento combinando marca (Mc)
DecimalDigitCharacter:
calquera carácter Unicode da clase díxito decimal (Nd)
Personaxe de conexión:
calquera carácter Unicode da clase Puntuación de conector (Pc)
Formato do carácter:
calquera carácter Unicode da clase Formato (Cf)
Identificadores cunha comiña
Un identificador único entre comiñas pode conter calquera secuencia de caracteres Unicode que se usará como identificador, incluíndo palabras clave, espazos en branco, comentarios e operadores. Os caracteres de comiñas simples admítense cunha secuencia de escape de dúas comiñas simples.
SingleQuotedIdentifier:
SingleQuotedIdentifierCharacters
SingleQuotedIdentifierCharacters:
SingleQuotedIdentifierCharacterSingleQuotedIdentifierCharactersopt
SingleQuotedIdentifierCharacter:
TextCharactersNoSingleQuote
Single QuoteEscapeSequence
TextCharactersNoSingleQuote:
calquera carácter Unicode excepto ' (U+0027)
SingleQuoteEscapeSequence:
'
'
Identificador sen ambigüidade
Identificador desambiguado:
TableColumnIdentifier
GlobalIdentifier
TableColumnIdentifier:
Identificador[@
Identificador]
GlobalIdentifier:
[@
Identificador]
Palabras clave de contexto
Palabra clave de contexto:
Parent
Self
ThisItem
ThisRecord
Diferenciación entre maiúsculas e minúsculas
Os identificadores de Power Apps distinguen entre maiúsculas e minúsculas. A ferramenta de creación cambiaráos automaticamente á letra correcta cando se estea escribindo unha fórmula.
Separadores
Separador decimal:
.
(punto) para linguas que usan un punto como separador de números decimais, por exemplo 1.23
,
(coma) para linguas que usan coma como separador de números decimais, por exemplo 1,23
ListSeparator:
,
(coma) se DecimalSeparator é .
(punto)
;
(punto e coma) se DecimalSeparator é ,
(coma)
Separador de encadeamento:
;
(punto e coma) se DecimalSeparator é .
(punto)
;;
(punto e coma) se DecimalSeparator é ,
(coma)
Operadores
Os operadores úsanse en fórmulas para describir operacións que inclúen un ou máis operandos. Por exemplo, a expresión a + b
usa o operador +
para engadir os dous operandos a
e b
.
Operador:
Operador binario
BinaryOperatorRequiresWhitspace
Operador de prefixos
PrefixOperatorRequiresWhitspace
PostfixOperator
BinaryOperator:un dos
=
<
<=
>
>=
<>
+
-
*
/
^
&
&&
||
in
exactin
BinaryOperatorRequiresWhitspace:
And
Espazo en branco
Or
Espazo en branco
PrefixOperatorRequiresWhitspace:
Not
Espazo en branco
Operador de referencia
Referencia do obxecto
Referencia:
BaseReference
BaseReferenceReferenceOperatorReferenceList
Referencia base:
Identificador
Identificador desambiguado
Palabra clave de contexto
Lista de referencia:
Identificador
IdentificadorReferenceOperatorReferenceList
Rexistro en liña
Inline Record:
{
InlineRecordListopt}
InlineRecordList:
Identificador:
Expresión
Identificador:
ExpresiónListSeparatorInlineRecordList
Táboa en liña
InlineTable:
[
InlineTableListopt]
InlineTableList:
Expresión
ExpresiónListSeparatorInlineTableList
Expression
Expresión:
Literal
Referencia
InlineRecord
InlineTable
FunctionCall
(
Expresión)
PrefixOperatorExpresión
ExpresiónPostfixOperator
ExpresiónBinaryOperatorExpresión
Expresións encadeadas
Expresión encadeada:
Expresión
ExpresiónChainingSeparatorChainedExpressionopt
Chamada de función
FunctionCall:
FunctionIdentifier(
FunctionArgumentsopt)
Identificador de función:
Identificador
Identificador.
Identificador de función
Argumentos da función:
Expresión encadeada
ChainedExpressionListSeparatorFunctionArguments