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:
[@
Identifiant]
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 :
Appel de fonction :
Identificateur de fonction(
Arguments de fonctionopt)
est un raccourci de :
Appel de fonction :
Identificateur de fonction(
)
FunctionIdentifier(
Arguments de la fonction)
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:l’un des
0
1
2
3
4
5
6
7
8
9
est un raccourci de :
Chiffre décimal:
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
Éléments d’expression:
Élément d’expression
ExpressionElementExpressionElementsopt
ExpressionElement:
Espace blanc
Commentaire
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.
Espace blanc :
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.
Commentaire:
Commentaire délimité
Commentaire sur une seule ligne
Commentaire sur une seule ligne :
//
Caractères de commentaire sur une seule ligneopt
Caractères de commentaire sur une seule ligne :
Caractère de commentaire sur une seule ligne
Caractère de commentaire sur une seule ligneCaractères de commentaire sur une seule ligneoption
Caractère de commentaire sur une seule ligne :
tous les caractères Unicode sauf NewLineCharacter
Commentaire délimité :
/*
Caractères de commentaire délimitésopt*/
Caractères de commentaire délimités :
Caractères de commentaire délimités sans astérisqueCaractères de commentaire délimitésoption
*
Caractères délimitésCommentAfterAsterisk
CaractèresDelimitedCommentAfterAsterisk :
Commentaire délimitéSans barre obliqueAstérisqueCaractèreCaractères de commentaire délimitésoption
*
Caractères délimitésCommentAfterAsterisk
Caractères de commentaire délimités sans astérisque :
Tout caractère Unicode sauf * (astérisque)
Commentaire délimitéPas de caractère barre obliqueAstérisque :
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.
Littéral:
Littéral logique
NombreLittéral
TexteLittéral
Littéraux logiques
Un littéral logique est utilisé pour écrire les valeurs true et false, et génère une valeur logique.
LogicalLiteral:l’un des
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.
NombreLiteral:
Chiffres décimauxPartie exposantopt
Chiffres décimauxSéparateur décimalChiffres décimauxoptPartie exposantopt
Séparateur décimalChiffres décimauxPartie exposantopt
Chiffres décimaux:
Chiffre décimal
Chiffres décimauxChiffre décimal
DecimalDigit:l’un des
0
1
2
3
4
5
6
7
8
9
Partie exposante:
ExposantIndicateurSigneoptChiffres décimaux
ExponentIndicator :l’un des
e
E
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
TexteLittéral:
"
TexteLiteralCharactersopt"
TexteLiteralCharacters:
TexteLiteralCharacterTextLiteralCharactersopt
TexteLiteralCharacter:
TexteCaractèrePas de guillemets doubles
DoubleQuoteEscapeSequence
TexteCaractèreSansDoubleGuillemet:
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.
Identifiant:
IdentifierNamemaispasopérateurouContextKeyword
Nom d’identification :
IdentifiantDébutCaractèreIdentifiantContinuerCaractèresopt
'
Identifiant à citation unique'
IdentifiantStartCharacter :
LettreCaractère
_
IdentifiantContinueCharacter :
IdentifiantStartCharacter
Caractère décimal
Caractère de connexion
Combinaison de caractères
FormatageCaractère
IdentifiantContinuerCaractères:
IdentifiantContinueCharacterIdentifierContinueCharactersopt
LettreCaractère:
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)
Combinaison de caractères :
tout caractère Unicode de la classe Marque sans espacement (Mn) ou Espacement combinant la marque (Mc)
Caractère décimal:
tout caractère Unicode de la classe Chiffre décimal (Nd)
Caractère de connexion:
tout caractère Unicode de la classe Ponctuation connecteur (Pc)
Formatage des caractères :
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.
Identifiant avec citation unique :
Caractères d’identification entre guillemets simples
Caractères d’identification entre guillemets simples :
Caractère d’identification avec guillemets simplesCaractères d’identification avec guillemets simplesoption
Caractère d’identification avec guillemets simples :
TexteCaractèresPas de guillemets simples
SingleQuoteEscapeSequence
TexteCaractèresPas de guillemets simples:
tout caractère Unicode sauf ’ (U+0027)
SingleQuoteEscapeSequence:
'
'
Identificateur sans ambiguïté
DésambiguïséIdentifiant :
Identificateur de colonne de table
Identifiant global
Identificateur de colonne de table :
Identifiant[@
Identifiant]
Identifiant global :
[@
Identifiant]
Mots-clés de contexte
ContexteMot-clé :
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
Séparateur décimal :
.
(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
Séparateur de liste :
,
(virgule) si le séparateur décimal est .
(point)
;
(point-virgule) si le séparateur décimal est ,
(virgule)
Séparateur de chaînage :
;
(point-virgule) si le séparateur décimal est .
(point)
;;
(double point-virgule) si le séparateur décimal 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
.
opérateur:
Opérateur binaire
L’opérateur binaire nécessite un espace blanc
PréfixeOpérateur
PréfixeOpérateurNécessiteUnEspace
Opérateur Postfix
BinaryOperator :l’un des
=
<
<=
>
>=
<>
+
-
*
/
^
&
&&
||
in
exactin
BinaryOperatorRequiresWhitespace :
And
Espace blanc
Or
Espace blanc
PréfixeOpérateurNécessiteUnEspace :
Not
Espace blanc
Opérateur de référence
Opérateur de référence : l’un des
.
!
Référence d’objet
Référence:
Référence de base
BaseReferenceReferenceOperatorReferenceList
Référence de base :
Identifiant
Identifiant désambigu
ContexteMot-clé
Liste de références :
Identifiant
IdentifiantOpérateur de référenceListe de références
Enregistrement en ligne
Enregistrement en ligne :
{
InlineRecordListoption}
Liste d’enregistrements en ligne :
Identifiant:
Expression
Identifiant:
ExpressionListSeparatorInlineRecordList
Table en ligne
Tableau en ligne :
[
InlineTableListoption]
Liste de tables en ligne :
Expression
ExpressionListSeparatorInlineTableList
Expression
Expression:
Littéral
Référence
Enregistrement en ligne
Tableau en ligne
Appel de fonction
(
Expression)
PréfixeOpérateurExpression
ExpressionOpérateur de postfixation
ExpressionBinaryOperatorExpression
Expressions enchaînées
Expression enchaînée :
Expression
ExpressionChainingSeparatorChainedExpressionopt
Appel de fonction
Appel de fonction :
Identificateur de fonction(
Arguments de fonctionopt)
Identificateur de fonction :
Identifiant
Identifiant.
FonctionIdentifier
Arguments de la fonction :
Expression enchaînée
Expression en chaîneSéparateur de listeArguments de fonction