Grammaire des expressions
Note
Microsoft Power Fx est le nouveau nom du langage de formule pour les applications de canevas. Ces articles associés sont un travail en cours car nous extrayons le langage des applications de canevas, l’intégrons à d’autres produits Microsoft Power Platform, et le rendons disponible en open source. Commencez par l’Aperçu de Microsoft Power Fx pour une introduction à la langue.
Microsoft Power Fx est basé sur des formules qui lient un nom à une expression. Tout comme dans les feuilles de calcul Excel, à mesure que les dépendances entrantes à l’expression changent, l’expression est recalculée et la valeur du nom change, ce qui peut entraîner le recalcul dans d’autres formules.
Cette grammaire couvre la partie expression de la formule. La liaison à un nom pour créer une formule dépend de la façon dont Power Fx est intégré. Dans les feuilles de calcul, la syntaxe de liaison n’est pas exposée, elle est impliquée par l’emplacement où l’expression est écrite, par exemple, en entrant =B1
dans la cellule A1. Dans certains cas, aucune liaison n’est requise du tout et Power Fx est utilisé comme évaluateur d’expression, par exemple pour prendre en charge les colonnes calculées d’une table de base de données. Pour Power Apps, la liaison est implicite lorsque vous travaillez dans Power Apps Studio avec un format de sérialisation basé sur YAML pour une utilisation en dehors de Power Apps Studio.
Conventions grammaticales
Les grammaires lexicales et syntaxiques sont présentées à l’aide de productions grammaticales. Chaque production grammaticale définit un symbole non terminal et les expansions possibles de ce symbole non terminal en séquences de symboles non terminaux ou terminaux. Dans les productions grammaticales, les symboles non terminaux sont affichés en italique, et les symboles terminaux sont affichés dans une police à largeur fixe.
La première ligne d’une production grammaticale est le nom du symbole non terminal en cours de définition, suivi d’un signe deux-points. Chaque ligne en retrait successive contient une expansion possible du symbole non terminal sous forme de séquence de symboles non terminaux ou terminaux. Par exemple, la production :
GlobalIdentifier :
[@
Identifier]
définit un GlobalIdentifier qui se compose du jeton [@
, suivi d’un Identifiant, suivi du jeton ]
.
Quand il existe plusieurs expansions possibles d’un symbole non terminal, les alternatives sont listées sur des lignes distinctes. L’indice « opt » est utilisé pour indiquer un symbole facultatif. Par exemple, la production :
FunctionCall :
FunctionIdentifier(
FunctionArgumentsopt)
est un raccourci de :
FunctionCall :
FunctionIdentifier(
)
FunctionIdentifier(
FunctionArguments)
Les alternatives sont normalement listées sur des lignes distinctes, bien que dans les cas où il existe de nombreuses alternatives, l’expression « one of » pourrait précéder une liste d’expansions donnée sur une seule ligne. Il s’agit simplement d’un raccourci pour lister chacune des alternatives sur des lignes distinctes.
Par exemple, la production :
DecimalDigit : one of
0
1
2
3
4
5
6
7
8
9
est un raccourci de :
DecimalDigit :
0
1
2
3
4
5
6
7
8
9
Analyse lexicale
La production d’unité lexicale définit la grammaire lexicale d’une expression Power Fx. Chaque expression Power Fx valide est conforme à cette grammaire.
ExpressionUnit :
ExpressionElementsopt
ExpressionElements :
ExpressionElement
ExpressionElementExpressionElementsopt
ExpressionElement :
Whitespace
Comment
Au niveau lexical, une expression Power Fx est constituée d’un flux d’éléments Espace blanc, Commentaire et Jeton. Chacune de ces productions est présentée individuellement dans les sections suivantes. Seuls les éléments Jeton sont significatifs dans la grammaire syntaxique.
Espace blanc
Les espaces blancs servent à séparer les commentaires et les jetons dans un document Power Apps.
Whitespace :
tout séparateur d’espace Unicode (classe Zs)
tout séparateur de ligne Unicode (classe Zl)
tout séparateur de paragraphe Unicode (classe Zp)
Caractère de tabulation horizontale (U+0009)
Caractère de saut de ligne (U+000A)
Caractère de tabulation verticale (U+000B)
Caractère de saut de page (U+000C)
Caractère de retour chariot (U+000D)
Caractère de ligne suivante (U+0085)
Commentaires
Deux formes de commentaires sont prises en charge :
- Les commentaires sur une seule ligne commençant par les caractères
//
et s’étendant jusqu’à la fin de la ligne source. - Les commentaires délimités commençant par les caractères
/*
et se terminant par les caractères*/
. Les commentaires délimités peuvent s’étendre sur plusieurs lignes.
Comment :
DelimitedComment
SingleLineComment
SingleLineComment:
//
SingleLineCommentCharactersopt
SingleLineCommentCharacters :
SingleLineCommentCharacter
SingleLineCommentCharacterSingleLineCommentCharactersopt
SingleLineCommentCharacter :
tous les caractères Unicode sauf NewLineCharacter
DelimitedComment :
/*
DelimitedCommentCharactersopt*/
DelimitedCommentCharacters :
DelimitedCommentCharactersNoAsteriskDelimitedCommentCharactersopt
*
DelimitedCommentAfterAsteriskCharacters
DelimitedCommentAfterAsteriskCharacters :
DelimitedCommentNoSlashAsteriskCharacterDelimitedCommentCharactersopt
*
DelimitedCommentAfterAsteriskCharacters
DelimitedCommentCharactersNoAsterisk :
Tout caractère Unicode sauf * (astérisque)
DelimitedCommentNoSlashAsteriskCharacter :
Tout caractère Unicode sauf / (barre oblique) ou * (astérisque)
Les commentaires ne sont pas imbriqués. Les séquences de caractères /*
et */
n’ont aucune signification particulière dans un commentaire sur une seule ligne, et les séquences de caractères //
et /*
n’ont aucune signification particulière dans un commentaire délimité.
Les commentaires ne sont pas traités dans les chaînes littérales de texte.
L’exemple suivant comprend deux commentaires délimités :
/* Hello, world
*/
"Hello, world" /* This is an example of a text literal */
Les exemples suivants incluent trois commentaires sur une seule ligne :
// Hello, world
//
"Hello, world" // This is an example of a text literal
Littéraux
Un littéral est une représentation en code source d’une valeur.
Literal :
LogicalLiteral
NumberLiteral
TextLiteral
Littéraux logiques
Un littéral logique est utilisé pour écrire les valeurs true et false, et génère une valeur logique.
LogicalLiteral :one of
true
false
Littéraux numériques
Un littéral numérique est utilisé pour écrire une valeur numérique, et génère une valeur numérique.
NumberLiteral :
DecimalDigitsExponentPartopt
DecimalDigitsDecimalSeparatorDecimalDigitsoptExponentPartopt
DecimalSeparatorDecimalDigitsExponentPartopt
DecimalDigits :
DecimalDigit
DecimalDigitsDecimalDigit
DecimalDigit :one of
0
1
2
3
4
5
6
7
8
9
ExponentPart :
ExponentIndicatorSignoptDecimalDigits
Littéraux de texte
Un littéral de texte est utilisé pour écrire une séquence de caractères Unicode, et génère une valeur de texte. Les littéraux de texte sont placés entre guillemets doubles. Pour inclure des guillemets doubles dans la valeur de texte, répétez les guillemets doubles, comme illustré dans l’exemple suivant :
"The ""quoted"" text" // The "quoted" text
TextLiteral :
"
TextLiteralCharactersopt"
TextLiteralCharacters :
TextLiteralCharacterTextLiteralCharactersopt
TextLiteralCharacter :
TextCharacterNoDoubleQuote
DoubleQuoteEscapeSequence
TextCharacterNoDoubleQuote :
tout point de code Unicode sauf les guillemets doubles
DoubleQuoteEscapeSequence :
"
"
Identifiers
Un identificateur est un nom utilisé pour faire référence à une valeur. Les identificateurs peuvent être des identificateurs réguliers ou des identificateurs entre guillemets simples.
Identifier :
IdentifierNamemaispasOperatorouContextKeyword
IdentifierName :
IdentifierStartCharacterIdentifierContinueCharactersopt
'
SingleQuotedIdentifier'
IdentifierStartCharacter :
LetterCharacter
_
IdentifierContinueCharacter :
IdentifierStartCharacter
DecimalDigitCharacter
ConnectingCharacter
CombiningCharacter
FormattingCharacter
IdentifierContinueCharacters :
IdentifierContinueCharacterIdentifierContinueCharactersopt
LetterCharacter :
tout caractère Unicode de la classe Lettre majuscule (Lu) ou Lettre minuscule (Ll)
tout caractère Unicode de la classe Casse de titre (Lt)
tout caractère Unicode de la classe Modificateur de lettre (Lm) ou Lettre autre (Ll)
tout caractère Unicode de la classe Lettre nombre (Nl)
CombiningCharacter :
tout caractère Unicode de la classe Marque sans espacement (Mn) ou Espacement combinant la marque (Mc)
DecimalDigitCharacter :
tout caractère Unicode de la classe Chiffre décimal (Nd)
ConnectingCharacter :
tout caractère Unicode de la classe Ponctuation connecteur (Pc)
FormattingCharacter :
tout caractère Unicode de la classe Format (Cf)
Identificateurs entre guillemets simples
Vous pouvez utiliser un identificateur avec un seul guillemet pour utiliser n’importe quelle séquence de zéro, un ou plusieurs caractères Unicode comme identificateur, y compris les mots clés, les espaces blancs, les commentaires, les signes de ponctuation et les opérateurs. Les guillemets simples sont pris en charge avec une séquence d’échappement de deux guillemets simples.
SingleQuotedIdentifier :
SingleQuotedIdentifierCharacters
SingleQuotedIdentifierCharacters :
SingleQuotedIdentifierCharacterSingleQuotedIdentifierCharactersopt
SingleQuotedIdentifierCharacter :
TextCharactersNoSingleQuote
SingleQuoteEscapeSequence
TextCharactersNoSingleQuote :
tout caractère Unicode sauf ’ (U+0027)
SingleQuoteEscapeSequence :
'
'
Identificateur sans ambiguïté
DisambiguatedIdentifier :
TableColumnIdentifier
GlobalIdentifier
TableColumnIdentifier :
Identifier[@
Identifier]
GlobalIdentifier :
[@
Identifier]
Mots-clés de contexte
ContextKeyword :
Parent
Self
ThisItem
ThisRecord
Sensibilité à la casse
Les identificateurs Power Apps sont sensibles à la casse. L’outil de création les changera automatiquement en casse correcte lorsqu’une formule est en cours d’écriture.
Séparateurs
DecimalSeparator :
.
(point) pour les langues qui utilisent un point comme séparateur pour les nombres décimaux, par exemple 1.23
,
(virgule) pour les langues qui utilisent une virgule comme séparateur pour les nombres décimaux, par exemple 1,23
ListSeparator :
,
(virgule) si DecimalSeparator est .
(point)
;
(point-virgule) si DecimalSeparator est ,
(virgule)
ChainingSeparator :
;
(point-virgule) si DecimalSeparator est .
(point)
;;
(point-virgule double) si DecimalSeparator est ,
(virgule)
Opérateurs
Les opérateurs sont utilisés dans les formules pour décrire des opérations impliquant un ou plusieurs opérandes. Par exemple, l’expression a + b
utilise l’opérateur +
pour ajouter les deux opérandes a
et b
.
Operator :
BinaryOperator
BinaryOperatorRequiresWhitespace
PrefixOperator
PrefixOperatorRequiresWhitespace
PostfixOperator
BinaryOperator :one of
=
<
<=
>
>=
<>
+
-
*
/
^
&
&&
||
in
exactin
BinaryOperatorRequiresWhitespace :
And
Whitespace
Or
Whitespace
PrefixOperatorRequiresWhitespace :
Not
Whitespace
Opérateur de référence
Référence d’objet
Reference :
BaseReference
BaseReferenceReferenceOperatorReferenceList
BaseReference :
Identificateur
DisambiguatedIdentifier
ContextKeyword
ReferenceList :
Identificateur
IdentifierReferenceOperatorReferenceList
Enregistrement en ligne
InlineRecord :
{
InlineRecordListopt}
InlineRecordList :
Identifier:
Expression
Identifier:
ExpressionListSeparatorInlineRecordList
Table en ligne
InlineTable :
[
InlineTableListopt]
InlineTableList :
Expression
ExpressionListSeparatorInlineTableList
Expression
Expression :
Literal
Reference
InlineRecord
InlineTable
FunctionCall
(
Expression)
PrefixOperatorExpression
ExpressionPostfixOperator
ExpressionBinaryOperatorExpression
Expressions enchaînées
ChainedExpression :
Expression
ExpressionChainingSeparatorChainedExpressionopt
Appel de fonction
FunctionCall :
FunctionIdentifier(
FunctionArgumentsopt)
FunctionIdentifier :
Identificateur
Identifier.
FunctionIdentifier
FunctionArguments :
ChainedExpression
ChainedExpressionListSeparatorFunctionArguments
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour