Partager via


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
    0123456789

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
    truefalse

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
    0123456789

  Partie exposante:
    ExposantIndicateurSigneoptChiffres décimaux

  ExponentIndicator :l’un des
    eE

  Signe :l’un des
    +-

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

  BinaryOperatorRequiresWhitespace :
    AndEspace blanc
    OrEspace blanc

  PréfixeOpérateur :
    !

  PréfixeOpérateurNécessiteUnEspace :
    NotEspace blanc

  Opérateur Postfix :
    %

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