Freigeben über


Ausdrucksgrammatik

Notiz

Microsoft Power Fx ist der neue Name für die Formelsprache für Canvas-Apps. Diese Artikel werden ständig weiterentwickelt, da wir die Sprache aus Canvas-Apps extrahieren, in andere Microsoft Power Platform-Produkte integrieren und als Open Source zur Verfügung stellen. Beginnen Sie mit der Microsoft Power Fx-Übersicht, um eine Einführung in die Sprache zu erhalten.

Microsoft Power Fx basiert auf Formeln, die einen Namen an einen Ausdruck binden. W in Excel-Arbeitsblättern wird der Ausdruck als eingehende Abhängigkeit vom Ausdruck neu berechnet und der Wert des Namens geändert, wodurch die Neuberechnung möglicherweise in andere Formeln kaskadiert wird.

Diese Grammatik deckt den Ausdrucksteil der Formel ab. Die Bindung an einen Namen zum Erstellen einer Formel hängt davon ab, wie Power Fx integriert ist. In Arbeitsblättern wird die Bindungssyntax nicht verfügbar gemacht, sondern vom Speicherort impliziert, an dem der Ausdruck geschrieben wird, beispielsweise durch Eingabe von =B1 in der A1-Zelle. In einigen Fällen ist überhaupt keine Bindung erforderlich, und Power Fx wird als Ausdrucksauswerter verwendet, beispielsweise zur Unterstützung berechneter Spalten einer Datenbanktabelle. Für Power Apps wird die Bindung impliziert, wenn in Power Apps Studio mit einem auf YAML basierenden Serialisierungsformat zur Verwendung außerhalb von Power Apps Studio gearbeitet wird.

Grammatikalische Konventionen

Die lexikalische und syntaktische Grammatik wird mithilfe von Grammatikproduktionen dargestellt. Jede Grammatikproduktion definiert ein Nichtterminalsymbol und dessen mögliche Erweiterungen in Sequenzen aus Nichtterminal- oder Terminalsymbolen. In Grammatikproduktionen werden Nichtterminalsymbole kursiv und Terminalsymbole werden in nichtproportionaler Schriftart dargestellt.

Die erste Zeile einer Grammatikproduktion entspricht dem Namen des Nichtterminalsymbols, das definiert wird, gefolgt von einem Doppelpunkt. Jede aufeinanderfolgende eingerückte Zeile enthält eine mögliche Erweiterung des Nichtterminalsymbols als Sequenz aus Nichtterminal- und Terminalsymbolen. Zum Beispiel wird bei der folgenden Produktion:

   GlobalIdentifier:
     [@ Kennung]

definiert einen globalen Bezeichner, der aus dem Token [@ besteht, gefolgt von einem Bezeichner, gefolgt vom Token ].

Wenn es mehrere mögliche Erweiterungen eines Nichtterminalsymbols gibt, werden die Alternativen in separaten Zeilen aufgeführt. Das tiefergestellte „opt“ wird als indexiertes Suffix verwendet, um optionale Symbole zu kennzeichnen. Zum Beispiel wird bei der folgenden Produktion:

   Funktionsaufruf:
     Funktionsbezeichner(Funktionsargumenteopt)

ist die Kurzform für:

   Funktionsaufruf:
     Funktionskennung()
     Funktionsbezeichner(Funktionsargumente)

Alternativen werden normalerweise in separaten Zeilen aufgeführt. In einigen Fällen mit vielen Alternativen kann „One of“ („Eine von“) einer Liste von Erweiterungen vorangestellt werden, die in einer einzelnen Zeile angegeben werden. Dabei handelt es sich lediglich um eine Kurzform zum Auflisten aller Alternativen in separaten Zeilen.

Zum Beispiel wird bei der folgenden Produktion:

   DecimalDigit:eine von
    0123456789

ist die Kurzform für:

   Dezimalziffer:
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9

Lexikalische Analyse

Die Produktion von lexikalischen Einheiten definiert die lexikalische Grammatik für einen Power Fx-Ausdruck. Jeder gültige Power Fx-Ausdruck entspricht dieser Grammatik.

   Ausdruckseinheit:
     Ausdruckselementeopt

   Ausdruckselemente:
     Ausdruckselement
     AusdruckselementAusdruckselementeopt

   Ausdruckselement:
     Leerzeichen
     Kommentar

Auf lexikalischer Ebene besteht ein Power Fx Ausdruck aus einem Stream aus den Elementen Leerraum, Kommentar und Token. All diese Produktionen werden in den folgenden Abschnitten beschrieben. Nur Tokenelemente sind in der syntaktischen Grammatik von Bedeutung.

Leerzeichen

Leerraum wird verwendet, um Kommentare und Token in einem Power Apps Dokument voneinander zu trennen.

   Leerzeichen:
    ein beliebiges Unicode-Leerzeichen (Klasse Zs)
    ein beliebiges Unicode Zilentrennzeichen (Klasse ZI)
    ein beliebiges Unicode-Absatztrennzeichen (Klasse Zp)
    Horizontales Tabstoppzeichen (U+0009)
    Zeilenvorschubzeichen (U+000A)
    Vertikales Tabulatorzeichen (U+000B)
    Seitenvorschubzeichen (U+000C)
    Wagenrücklaufzeichen (U+000D)
    Zeilenumbruchzeichen (U+0085)

Kommentare

Es werden zwei Arten von Kommentaren unterstützt:

  • Einzeilige Kommentare beginnen mit den Zeichen // und werden an das Ende der Quellzeile angefügt.
  • Durch Trennzeichen getrennte Kommentare beginnen mit den Zeichen /* und enden mit den Zeichen */. Durch Trennzeichen getrennte Kommentare können mehrere Zeilen umfassen.

   Kommentar:
     Durch Trennzeichen getrennter Kommentar
     Einzeiliger Kommentar

   Einzeiliger Kommentar:
     // EinzeiligeKommentarzeichenopt

   Einzeilige Kommentarzeichen:
     Einzeiliges Kommentarzeichen
     Einzeiliges KommentarzeichenEinzeilige Kommentarzeichenopt

   Einzeiliges Kommentarzeichen:
    Alle Unicode-Zeichen außer einem NewLineCharacter

   Getrennter Kommentar:
     /* Durch Trennzeichen getrennte Kommentarzeichenopt*/

   Durch Trennzeichen getrennte Kommentarzeichen:
     Durch Trennzeichen getrennte KommentarzeichenKein SternchenDurch Trennzeichen getrennte Kommentarzeichenopt
     * Getrennter Kommentar nach Sternchen

   Getrennter Kommentar nach Sternchenzeichen:
     Getrennter Kommentar ohne Schrägstrich und SternchenGetrennte Kommentarzeichenopt
     * Getrennter Kommentar nach Sternchen

   Durch Trennzeichen getrennte Kommentarzeichen ohne Sternchen:
    Beliebiges Unicode-Zeichen mit Ausnahme von * (Stern)

   Getrennter Kommentar ohne Schrägstrich und Sternchenzeichen:
    Beliebiges Unicode-Zeichen mit Ausnahme von / (Slash) oder * (Stern)

Kommentare sind nicht verschachtelt. Die Zeichenfolgen /* und */ verfügen innerhalb eines einzeiligen Kommentars über keine besondere Bedeutung, und die Zeichenfolgen // und /* verfügen in einem durch Trennzeichen getrennten Kommentar über keine besondere Bedeutung.

Kommentare werden nicht in Textliteralzeichenfolgen verarbeitet.

Das folgende Beispiel enthält zwei begrenzte Kommentare:

/* Hello, world
*/
"Hello, world"    /* This is an example of a text literal */

Die folgenden Beispiele enthalten drei einzeilige Kommentare:

// Hello, world
//
"Hello, world"    // This is an example of a text literal

Literale

Ein Literal ist die Quellcodedarstellung eines Werts.

   Wörtlich:
     LogischesLiteral
     NummerLiteral
     TextLiteral

Logische Literale

Ein logisches Literal wird zum Schreiben der Werte „true“ und „false“ verwendet und erzeugt einen logischen Wert.

   LogicalLiteral:eines von
    truefalse

Zahlenliterale

Ein Zahlenliteral wird zum Schreiben eines numerischen Werts verwendet und erzeugt einen numerischen Wert.

   Zahlenliteral:
     DezimalziffernExponententeilopt
     DezimalziffernDezimaltrennzeichenDezimalziffernoptExponententeilopt
     DezimaltrennzeichenDezimalziffernExponententeilopt

   Dezimalziffern:
     Dezimalziffer
     DezimalziffernDezimalziffer

   DecimalDigit:eine von
    0123456789

   Exponententeil:
     ExponentIndicatorVorzeichenoptDezimalziffern

   ExponentIndicator:einer von
    eE

   Zeichen:eines von
    +-

Textliterale

Ein Textliteral wird zum Schreiben einer Sequenz von Unicode-Zeichen verwendet und erzeugt einen Textwert. Textliterale werden in doppelte Anführungszeichen gesetzt. Um doppelte Anführungszeichen in den Textwert aufzunehmen, wiederholen Sie die doppelten Anführungszeichen, wie im folgenden Beispiel gezeigt:

"The ""quoted"" text" // The "quoted" text

   TextLiteral:
     " TextLiteralCharactersopt"

   TextLiteralCharacters:
     TextLiteralCharacterTextLiteralCharactersopt

   TextLiteralCharacter:
     TextCharacterNoDoubleQuote
     AnführungszeichenEscape-Sequenz

   TextCharacterNoDoubleQuote:
    Beliebiger Unicode-Codepunkt außer doppeltem Anführungszeichen

   AnführungszeichenEscape-Sequenz:
    ""

Bezeichner

Ein Bezeichner ist ein Name für einen Wert. Es gibt sowohl reguläre Bezeichner als auch Bezeichner in einelnen Anführungszeichen.

   Kennung:
     IdentifierNameabernichtOperatoroderContextKeyword

   IdentifierName:
     BezeichnerStartzeichenBezeichnerFortsetzungszeichenopt
     ' SingleQuotedIdentifier'

   IdentifierStartCharacter:
     BriefZeichen
    _

   BezeichnerContinueCharacter:
     BezeichnerStartZeichen
     DezimalZifferZeichen
     Verbindungscharakter
     KombinierenCharakter
     FormatierungZeichen

   BezeichnerWeiterZeichen:
     BezeichnerWeiterZeichenBezeichnerWeiterZeichenopt

   BuchstabeZeichen:
    ein beliebiges Unicode-Zeichen der Klasse Zeichen in Großschreibung (Lu) oder Zeichen in Kleinschreibung (LI)
    ein beliebiges Unicode-Zeichen der Klasse Titlecase Buchstaben (Lt)
    ein beliebiges Unicode-Zeichen der Klasse Buchstaben-Modifizierer (Lm) oder Buchstaben andere (Lo)
    ein beliebiges Unicode-Zeichen der Klasse Zahlzeichen (Nl)

   KombinierendesZeichen:
    ein beliebiges Unicode-Zeichen der Klasse Non-spacing mark (Mn) oder Spacing combining mark (Mc)

   Dezimalziffernzeichen:
    ein beliebiges Unicode-Zeichen der Klasse Dezimalstelle (Nd)

   Verbindungszeichen:
    ein beliebiges Unicode-Zeichen der Klasse Konnektor-Satzzeichen (Pc)

   Formatierungszeichen:
    ein beliebiges Unicode-Zeichen der Klasse Format (Cf)

Einfache Bezeichner in Anführungszeichen

Ein Bezeichner in einfachen Anführungszeichen kann beliebige Sequenzen mit keinen oder mehreren Unicode-Zeichen enthalten, einschließlich Schlüsselwörter, Leerraum, Kommentare und Operatoren. Einfache Anführungszeichen werden mit einer Escape-Sequenz aus zwei einfachen Anführungszeichen unterstützt.

   SingleQuotedIdentifier:
     Bezeichner in einzelnen Anführungszeichen

   SingleQuotedIdentifierCharacters:
     SingleQuotedIdentifierCharacterSingleQuotedIdentifierCharactersopt

   SingleQuotedIdentifierCharacter:
     TextZeichenNeinEinzelAnführungszeichen
     Einzelnes AnführungszeichenEscape-Sequenz

   TextZeichenKeinEinzelAnführungszeichen:
    beliebiges Unicode-Zeichen mit Ausnahme von ' (U+0027)

   Einfaches AnführungszeichenEscape-Sequenz:
    ''

Eindeutige Kennung

   DisambiguatedIdentifier:
     Tabellenspaltenbezeichner
     GlobalIdentifier

   Tabellenspaltenbezeichner:
     Kennung[@Kennung]

   GlobalIdentifier:
     [@ Kennung]

Kontextschlüsselwörter

   KontextStichwort:
    Parent
    Self
    ThisItem
    ThisRecord

Groß-/Kleinschreibung beachten

Power Apps Bezeicher unterscheiden zwischen Groß‑ und Kleinschreibung. Das Dokumenterstellungstool ändert sie automatisch in die richtige Schreibweise, wenn eine Formel geschrieben wird.

Trennzeichen

   Dezimaltrennzeichen:
     . (Punkt) für Sprachen, die einen Punkt als Trennzeichen für Dezimalzahlen verwenden, zum Beispiel 1.23
     , (Komma) für Sprachen, die ein Komma als Trennzeichen für Dezimalzahlen verwenden, zum Beispiel 1,23

   Listentrennzeichen:
     , (Komma) wenn DecimalSeparator ist . (Punkt)
     ; (Semikolon) wenn DecimalSeparator ist , (Komma)

   Verkettungstrennzeichen:
     ; (Semikolon) wenn DecimalSeparator. ist (Punkt)
     ;; (doppeltes Semikolon) wenn DecimalSeparator ist , (Komma)

Operatoren

Operatoren werden in Formeln verwendet, um Vorgänge mit einem oder mehreren Operanden zu beschreiben. Der Ausdruck a + b verwendet beispielsweise den Operator +, um die zwei Operanden a und b hinzuzufügen.

   Operator:
     Binärer Operator
     Binärer Operator erfordert Leerzeichen
     PräfixOperator
     PräfixOperatorErfordertLeerzeichen
     PostfixOperator

   Binärer Operator:einer von
    =<<=>>=<>
    +-*/^
    &
    &&||
    inexactin

   Binärer Operator erfordert Leerzeichen:
     And Leerzeichen
     Or Leerzeichen

   PräfixOperator:
    !

   PräfixOperatorErfordertLeerzeichen:
     Not Leerzeichen

   PostfixOperator:
    %

Operatorreferenz

   ReferenzOperator:einer von
    .!

Objektverweis

   Referenz:
     Basisreferenz
     BaseReferenceReferenceOperatorReferenceList

   Basisreferenz:
     Kennung
     Disambiguierter Bezeichner
     KontextSchlüsselwort

   Referenzliste:
     Kennung
     BezeichnerReferenzoperatorReferenzliste

Inline-Datensatz

   InlineRecord:
     { InlineRecordListopt}

   InlineRecordList:
     Bezeichner:Ausdruck
     Bezeichner:AusdruckListSeparatorInlineRecordList

Positionstabelle

   InlineTable:
     [ InlineTableListOption]

   InlineTableList:
     Ausdruck
     AusdruckListSeparatorInlineTableList

Expression

   Ausdruck:
     Wörtlich
     Referenz
     InlineRecord
     InlineTable
     Funktionsaufruf
     ( Ausdruck)
     PräfixOperatorAusdruck
     AusdruckPostfixOperator
     AusdruckBinaryOperatorAusdruck

Verkettete Ausdrücke

   Verketteter Ausdruck:
     Ausdruck
     AusdruckChainingSeparatorChainedExpressionopt

Funktionsaufruf

   Funktionsaufruf:
     Funktionsbezeichner(Funktionsargumenteopt)

   Funktionskennung:
     Kennung
     Bezeichner.Funktionsbezeichner

   Funktionsargumente:
     Verketteter Ausdruck
     Verketteter AusdruckListentrennzeichenFunktionsargumente