Gramàtica d'expressió
Nota
Microsoft Power Fx és el nom nou del llenguatge de formules de les aplicacions de llenç. Aquests articles són un treball en curs a mesura que extraiem el llenguatge de les aplicacions de llenç, l'integrem amb altres productes del Microsoft Power Platform i fem que estigui disponible com a codi obert. Comenceu amb la Informació general del Microsoft Power Fxper veure una introducció al llenguatge.
Microsoft Power Fx es basa en fórmules que uneixen un nom a una expressió. Igual que als fulls de càlcul de l'Excel, com que les dependències d'entrada a l'expressió canvien, l'expressió es torna a calcular i el valor del nom canvia, probablement desplegant el nou càlcul en altres fórmules.
Aquesta gramàtica cobreix la part de l'expressió de la fórmula. La funció de vincular amb un nom per crear una fórmula depèn de la manera com s'integra el Power Fx. En els fulls de càlcul, la sintaxi d'enllaç no està exposada, està implícita en la ubicació on s'escriu l'expressió; per exemple, introduint =B1
a la cel·la A1. En alguns casos, no es necessita cap tipus de vinculació i el Power Fx s'utilitza com a avaluador d'expressions, per exemple, a l'hora de donar suport a les columnes calculades d'una taula de base de dades. Per al Power Apps, la vinculació és implícita quan es treballa al Power Apps Studio amb un format de serialització basat en YAML per utilitzar-lo fora del Power Apps Studio.
Convencions gramaticals
Les gramàtiques lèxiques i sintàctiques es presenten utilitzant produccions de gramàtica. Cada producció de gramàtica defineix un símbol no terminal i les possibles ampliacions d'aquest símbol no terminal en seqüències de símbols no terminals o terminals. En les produccions de gramàtiques, els símbols no terminals es mostren en cursiva, i els símbols terminals es mostren en un tipus de lletra d'amplada fixa.
La primera línia d'una producció de gramàtica és el nom del símbol no defineix que es defineix, seguit de dos punts. Cada línia successiva sagnada conté una possible ampliació del símbol no terminal proporcionat com a seqüència de símbols no terminals o terminals. Per exemple, la producció:
Identificador global:
[@
Identificador]
defineix un GlobalIdentifier que consisteix en el testimoni [@
, seguit d'un Identificador, seguit del testimoni]
.
Quan hi ha més d'una possible ampliació d'un símbol no terminal, les alternatives es mostren en línies separades. El subíndex "opt" s'utilitza per indicar un símbol opcional. Per exemple, la producció:
Crida a la funció:
FunctionIdentifier(
FunctionArgumentsopt)
és una forma breu de:
Crida a la funció:
Identificador de funció(
)
FunctionIdentifier(
FunctionArguments)
Les alternatives es mostren normalment en línies separades, encara que en els casos en què hi ha moltes alternatives, la frase "one of" podria precedir una llista d'ampliacions proporcionades en una sola línia. Això és simplement una manera abreujada de llistar cadascuna de les alternatives en línies separades.
Per exemple, la producció:
DecimalDigit:un dels
0
1
2
3
4
5
6
7
8
9
és una forma breu de:
Dígit decimal:
0
1
2
3
4
5
6
7
8
9
Anàlisi lèxica
La producció d'unitats lèxiques defineix la gramàtica lèxica per a una expressió del Power Fx. Cada expressió vàlida del Power Fx compleix aquesta gramàtica.
ExpressionUnit:
ExpressionElementsopt
ExpressionElements:
ExpressióElement
ExpressionElementExpressionElementsopt
ExpressionElement:
Espai en blanc
Comentari
En el nivell lèxic, una expressió del Power Fx consisteix en un flux d'elements WhiteSpace, Comment i Token. Cadascuna d'aquestes produccions es cobreix a les seccions següents. Només els elements Testimoni són importants a la gramàtica sintàctica.
Espai en blanc
Els espais en blanc s'utilitzen per separar els comentaris i els testimonis d'un document del Power Apps.
Espai en blanc:
qualsevol separador d'espai Unicode (classe Zs)
qualsevol separador de línia Unicode (classe Zl)
qualsevol separador de paràgraf Unicode (classe Zp)
Caràcter de pestanya horitzontal (U+0009)
Caràcter de retorn de carro de línia (U+000A)
Caràcter de pestanya vertical (U+000B)
Caràcter de retorn de carro de formulari (U+000C)
Caràcter de retorn de carro (U+000D)
Caràcter de línia següent (U+0085)
Comentaris
S'admeten dues formes de comentaris:
- Comentaris d'una sola línia que comencen amb els caràcters
//
i s'estenen fins al final de la línia d'origen. - Comentaris delimitats que comencen amb els caràcters
/*
i acaben amb els caràcters*/
. Els comentaris delimitats poden abastar diverses línies.
Comentari:
Comentari delimitat
Comentari de línia única
Comentari de línia única:
//
SingleLineCommentCharactersopt
Caràcters SingleLineComment:
Caràcter SingleLineCommentCharacter
SingleLineCommentCharacterSingleLineCommentCharactersopt
Caràcter SingleLineComment:
qualsevol caràcter Unicode, tret d'un NewLineCharacter
Comentari delimitat:
/*
DelimitedCommentCharactersopt*/
Caràcters delimitats:
DelimitedCommentCharactersNoAsteriskDelimitedCommentCharactersopt
*
DelimitedCommentAfterAsteriskCharacters
DelimitedCommentAfterAsteriskCharacters:
DelimitedCommentNoSlashAsteriskCharacterDelimitedCommentCharactersopt
*
DelimitedCommentAfterAsteriskCharacters
DelimitedCommentCharactersNoAsterisk:
qualsevol caràcter Unicode excepte * (asterisc)
DelimitedCommentNoSlashAsteriskCharacter:
qualsevol caràcter Unicode excepte / (barra inclinada) o * (asterisc)
Els comentaris no s'han imbricats. Les seqüències de caràcters /*
i */
no tenen cap significat especial dins d'un comentari en una sola línia i les seqüències de caràcters //
i /*
no tenen cap significat especial dins d'un comentari delimitat.
Els comentaris no es processen dins de les cadenes de text literal.
L'exemple següent inclou dos comentaris delimitats:
/* Hello, world
*/
"Hello, world" /* This is an example of a text literal */
Els exemples següents inclouen tres comentaris d'una sola línia:
// Hello, world
//
"Hello, world" // This is an example of a text literal
Literals
Un literal és una representació en codi font d'un valor.
Literal:
LògicLiteral
NúmeroLiteral
TextLiteral
Literals lògics
S'utilitza un literal lògic per escriure els valors certs i falsos, i produir un valor lògic.
LogicalLiteral:un dels
true
false
Literals de número
Un literal de numero s'utilitza per escriure un valor numèric i produir un valor numèric.
NumberLiteral:
DecimalDigitsExponentPartopt
DecimalDigitsDecimalSeparatorDecimalDigitsoptExponentPartopt
DecimalSeparatorDecimalDigitsExponentPartopt
Dígits decimals:
Dígit decimal
DecimalDigitsDecimalDigit
DecimalDigit:un dels
0
1
2
3
4
5
6
7
8
9
Part de l'exponent:
Signeindicador exponentoptDecimalDigits
Literals de text
Un literal de text s'utilitza per escriure una seqüència de caràcters Unicode i produir un valor de text. Els literals de text estan tancats amb cometes dobles. Per incloure cometes dobles al valor de text, repetiu les cometes dobles, tal com es mostra a l'exemple següent:
"The ""quoted"" text" // The "quoted" text
TextLiteral:
"
TextLiteralCharactersopta"
TextLiteralCharacters:
TextLiteralCharacterTextLiteralCharactersopt
TextLiteralCharacter:
TextCharacterNoDoubleQuote
Seqüència d'escapament de cometes dobles
TextCharacterNoDoubleQuote:
qualsevol punt de codi Unicode excepte cometes dobles
Seqüència d'escapament de cites dobles:
"
"
Identificadors
Un identificador és un nom que s'utilitza per fer referència a un valor. Els identificadors poden ser identificadors normals o identificadors entre cometes simples.
Identificador:
IdentifierNameperònoOperatorniContextKeyword
Nom de l'identificador:
IdentifierStartCharacterIdentifierContinueCharactersopt
'
Identificador entre cometes'
IdentifierStartCharacter:
Caràcter de la lletra
_
IdentifierContinueCharacter:
IdentifierStartCharacter
Caràcter decimal
ConnectingCharacter
CombinacióCaràcter
FormattingCharacter
IdentifierContinueCharacters:
IdentifierContinueCharacterIdentifierContinueCharactersopt
Caràcter de lletra:
qualsevol caràcter Unicode de la classe En majúscules (Lu) o Lletra en minúscules (Ll)
qualsevol caràcter Unicode de la classe Lletra de títol (Lt)
qualsevol caràcter Unicode de la classe Modificador de lletra (Lm) o Lletra altres (Lo)
qualsevol caràcter Unicode de la classe Lletra de número (Nl)
Caràcter combinat:
qualsevol caràcter Unicode de la classe Marca sense espaiat (Mn) o Marca de combinació d'espaiat (Mc)
DecimalDigitCharacter:
qualsevol caràcter Unicode de la classe Dígit decimal (Nd)
Personatge de connexió:
qualsevol caràcter Unicode de la classe Puntuació de connector (Pc)
FormattingCharacter:
qualsevol caràcter Unicode de la classe Format (Cf)
Identificadors de cometes simples
Un identificador entre cometes simples pot contenir qualsevol seqüència de caràcters Unicode que s'utilitzin com a identificador, incloent-hi paraules clau, espais blancs, comentaris i operadors. Els caràcters de cometes simples estan admesos amb una seqüència d'escapada de dues marques de cometes simples.
Identificador entre cometes:
SingleQuotedIdentifierCharacters
Caràcters identificators:
SingleQuotedIdentifierCharacterSingleQuotedIdentifierCharactersopt
SingleQuotedIdentifierCharacter:
TextCharactersNoSingleQuote
Single QuoteEscapeSequence
TextCharactersNoSingleQuote:
qualsevol caràcter Unicode excepte ' (U+0027)
SingleQuoteEscapeSequence:
'
'
Identificador desambiguat
Identificador desambiguat:
TableColumnIdentifier
GlobalIdentifier
TableColumnIdentifier:
Identificador[@
Identificador]
GlobalIdentifier:
[@
Identificador]
Paraules clau de context
Paraula clau de context:
Parent
Self
ThisItem
ThisRecord
Distinció entre majúscules i minúscules
Els identificadors del Power Apps distingeixen entre majúscules i minúscules. L'eina de creació els canviarà automàticament al cas correcte quan s'escrigui una fórmula.
Separadors
Separador decimal:
.
(punt) per a idiomes que utilitzen un punt com a separador de nombres decimals, per exemple 1.23
,
(coma) per a idiomes que utilitzen una coma com a separador de nombres decimals, per exemple 1,23
ListSeparator:
,
(coma) si DecimalSeparator és .
(punt)
;
(punt i coma) si DecimalSeparator és ,
(coma)
ChainingSeparator:
;
(punt i coma) si DecimalSeparator és .
(punt)
;;
(doble punt i coma) si DecimalSeparator és ,
(coma)
Operadors
Els operadors s'utilitzen a les fórmules per descriure operacions que impliquen un o diversos operands. Per exemple, l'expressió a + b
utilitza l'operador +
per afegir els dos operands a
i b
.
Operador:
Operador binari
BinaryOperatorRequiresWhitspace
Operador de prefix
PrefixOperatorRequiresWhitespace
PostfixOperator
BinaryOperator:un dels
=
<
<=
>
>=
<>
+
-
*
/
^
&
&&
||
in
exactin
BinaryOperatorRequiresWhitespace:
And
Espai en blanc
Or
Espai en blanc
PrefixOperatorRequiresWhitespace:
Not
Espai en blanc
Operador de referència
Referència d'objectes
Referència:
BaseReference
BaseReferenceReferenceOperatorReferenceList
BaseReferència:
Identificador
Identificador desambiguat
Paraula clau context
Llista de referències:
Identificador
IdentificadorReferenceOperatorReferenceList
Registre en línia
Registre en línia:
{
InlineRecordListopt}
Llista de registres en línia:
Expressió identificadora:
...
Identificador:
d'expressionsListSeparatorInlineRecordList
Taula en línia
Taula en línia:
[
InlineTableListopt]
InlineTableList:
Expressió
Separatorde llista d'expressionsInlineTableList
Expression
Expressió:
Literal
Referència
Registre en línia
Taula en línia
Crida a la funció
(
Expressió)
Expressió PrefixOperator...
ExpressióPostfixOperator
ExpressióBinaryOperator...
Expressions encadenades
Expressió encadenada:
Expressió
Encadenament d'expressióSeparatorChainedExpressionopt
Crida de funció
Crida a la funció:
FunctionIdentifier(
FunctionArgumentsopt)
Identificador de funció:
Identificador
Identificador.
FunctionIdentifier
FunctionArguments:
Expressió encadenada
ChainedExpressionListSeparatorFunctionArguments