Przeczytaj w języku angielskim

Udostępnij za pośrednictwem


Gramatyka wyrażeń

Uwaga

Microsoft Power Fx to nowa nazwa języka formuł dla aplikacji kanw. Te artykuły są pracą w toku, gdyż stale wyodrębniamy język z aplikacji kanw, integrujemy go z innymi produktami Microsoft Power Platform i udostępniamy jako rozwiązanie open source. Zacznij od przeglądu Microsoft Power Fx, aby znaleźć wprowadzenie do języka.

Microsoft Power Fx jest oparte na formułach, które łączą nazwę z wyrażeniem. Podobnie jak w arkuszach programu Excel, jak zależności przychodzące od zmiany wyrażenia, wyrażenie jest ponownie przeliczane, a wartość nazwy zmienia się, a następnie kaskadowo przeliczana jest na inne formuły.

Ta gramatyka odpowiedzialna jest za wyrażenie w formule. Powiązanie z nazwą, aby utworzyć formułę, zależy od tego, jak zintegrowane jest Power Fx. W arkuszach składnia połączenia nie jest wyeksponowana, ale jest ona zapisywana przez lokalizację, w której zostało zapisane wyrażenie — na przykład przez wprowadzenie wyrażenia =B1 w komórce A1. W niektórych przypadkach nie jest w ogóle wymagane powiązanie, a Power Fx używane jest jako narzędzie do oceny wyrażeń. Np. ma to miejsce w przypadku obsługi kolumn obliczanych w tabeli bazy danych. W przypadku Power Apps, powiązanie jest niejawne podczas pracy w Power Apps Studio za pomocą formatu seryjnego opartego na YAML do użycia poza Power Apps Studio.

Konwencje dotyczące gramatyki

Gramatyki leksykalne i składniowe są prezentowane przy użyciu produkcji gramatyki. Każda produkcja gramatyki definiuje symbol niekońcowy i możliwe rozszerzenia tego symbolu na sekwencje symboli niekońcowych i końcowych. W przypadku produkcji gramatyki symbole niekońcowe są pisane kursywą, a symbole końcowe są pisane czcionką o stałej szerokości.

Pierwszy wiersz produkcji gramatyki jest nazwą zdefiniowanego symbolu niekońcowego, po którym następuje dwukropek. Każdy kolejny wiersz z wcięciem zawiera możliwe rozszerzenie niekońcowe podane jako sekwencja symboli niekońcowych lub końcowych. Na przykład produkcja:

   Identyfikator globalny:
     [@ Identyfikator]

Definiuje element GlobalIdentifier, który ma składać się z tokenu [@, po nim identyfikatora, a po nim tokenu ].

Jeśli istnieje więcej niż jedno możliwe rozszerzenie symbolu niekońcowego, alternatywy są wyświetlane w oddzielnych wierszach. Ten sufiks jako indeks dolny „opcjonalnie” jest używany do wskazania opcjonalnego symbolu. Na przykład produkcja:

   Wywołanie funkcji:
     FunctionIdentifier(FunctionArgumentsopt)

to skrócona forma produkcji:

   Wywołanie funkcji:
     Identyfikator funkcji()
     FunctionIdentifier(Argumenty funkcji)

Alternatywy są zwykle wyświetlane w oddzielnych wierszach, chociaż w przypadkach, gdy istnieje wiele alternatyw, fraza „jedno z następujących” może poprzedzać listę rozszerzeń podaną w jednym wierszu. Jest to po prostu skrócony sposób wyświetlania każdej z alternatyw w osobnych wierszach.

Na przykład produkcja:

   Cyfra dziesiętna:jedna z
    0123456789

to skrócona forma produkcji:

   Cyfra dziesiętna:
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9

Analiza leksykalna

Produkcja jednostek alfabetycznych definiuje leksykę gramatyczną wyrażenia Power Fx. Każde prawidłowe wyrażenie Power Fx jest zgodne z tą gramatyką.

   Jednostka wyrażenia:
     Opcja ExpressionElements

   Elementy wyrażenia:
     Element wyrażenia
     ExpressionElementExpressionElementsopcjonalnie

   Element wyrażenia:
     Odstępu
     Komentarz

Na poziomie leksykalnym wyrażenie Power Fx składa się ze strumienia elementów Whitespace, Comment i Token. Każda z tych produkcji została omówiona w poniższych sekcjach. Tylko elementy token są istotne w gramatyce składniowej.

Znak odstępu

Białe znaki są używane do oddzielania komentarzy i tokenów w dokumencie Power Apps.

   Białe znaki:
    dowolny separator spacji Unicode (klasa Zs)
    dowolny separator linii Unicode (klasa Zl)
    dowolny separator akapitu Unicode (klasa Zp)
    Znak tabulacji poziomej (U+0009)
    Znak wysuwu wiersza (U+000A)
    Znak tabulacji pionowej (U+000B)
    Znak wysuwu strony (U+000C)
    Znak powrotu karetki (U+000D)
    Znak następnego wiersza (U+0085)

Komentarze

Obsługiwane są dwa typy komentarzy:

  • Komentarze jednowierszowe zaczynają się od znaków // i przechodzą do końca wiersza źródłowego.
  • Komentarze z ogranicznikami rozpoczynają się od znaków /* i kończą się znakami */. Komentarze z ogranicznikami mogą obejmować wiele wierszy.

   Komentarz:
     Rozdzielany komentarz
     Komentarz jednowierszowy

   Komentarz jednowierszowy:
     // SingleLineCommentCharactersopt

   SingleLineCommentCharacters:
     SingleLineCommentCharacter
     SingleLineCommentCharacterSingleLineCommentCharactersopt

   SingleLineCommentCharacter:
    wszelkie znaki Unicode poza znakiem NewLineCharacter

   Ograniczony komentarz:
     /* DelimitedCommentCharactersopt*/

   DelimitedCommentCharacters:
     DelimitedCommentCharactersNoAsteriskDelimitedCommentCharactersopt
     * DelimitedCommentAfterAsteriskCharacters

   DelimitedCommentAfterAsteriskCharacters:
     OgraniczonaKomentarzNoSlashGwiazdkaZnakOgraniczonyKomentarzZnakiopt
     * DelimitedCommentAfterAsteriskCharacters

   DelimitedCommentCharactersNoAsterisk:
    Dowolny znak Unicode z wyjątkiem gwiazdki (*)

   OgraniczonaKomentarzNoSlashGwiazdkaPostać:
    Dowolny znak Unicode z wyjątkiem ukośnika (/) oraz gwiazdki (*)

Komentarze nie są zagnieżdżone. Sekwencje znaków /* i */ nie mają specjalnego znaczenia w komentarzu jednowierszowym, a sekwencje znaków // i /* nie mają specjalnego znaczenia w komentarzu z ogranicznikami.

Komentarze nie są przetwarzane w literałach tekstowych.

W następującym przykładzie przedstawiono dwa komentarze z ogranicznikami:

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

W poniższych przykładach przedstawiono trzy jednowierszowe komentarze:

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

Literały

Element literał jest reprezentacją wartości w kodzie źródłowym.

   Dosłownie:
     Literał logiczny
     Literał liczbowy
     Literał tekstowy

Literały logiczne

Literał logiczny jest używany do zapisywania wartości true i false i produkuje wartość logiczną.

   LogicalLiteral:jeden z
    truefalse

Literały liczbowe

Literał liczbowy jest używany do zapisywania wartości liczbowej i produkuje wartość liczbową.

   Literał liczbowy:
     Cyfry dziesiętne Wykładnik...części opcjonalnej
     Cyfrydziesiętne SeparatorCyfrydziesiętne wybierzWykładnikCzęśćopt
     SeparatordziesiętnyCyfrydziesiętne WykładnikCzęśćopt

   Cyfry dziesiętne:
     Cyfra dziesiętna
     Cyfry dziesiętne Cyfradziesiętna

   Cyfra dziesiętna:jedna z
    0123456789

   Część wykładnicza:
     ZnakwykładnikaoptDecimalDigits

   Wykładnik:jeden z
    eE

   Znak:jeden z
    +-

Literały tekstowe

Literał tekstowy jest używany do zapisania sekwencji znaków Unicode i produkuje wartość tekstową. Literały tekstowe są zamknięte w cudzysłów. Aby uwzględnić w wartości tekstowej cudzysłowy, powtórz te cudzysłowy, jak pokazano w następującym przykładzie:

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

   Literał tekstowy:
     " TextLiteralCharacterswybiera opcję"

   TextLiteralCharacters:
     TextLiteralCharacterTextLiteralCharacterswybierz opcję

   TextLiteralCharacter:
     TextCharacterNoDoubleQuote (TekstPostaćNiepodwójnyCytat)
     DoubleQuoteEscapeSequence (Sekwencja ucieczki DoubleQuote)

   TextCharacterNoDoubleQuote:
    dowolny znak punktowy Unicode z wyjątkiem podwójnego cudzysłowu

   DoubleQuoteEscapeSequence:
    ""

Identyfikatory

Element identyfikator to nazwa używana do odwoływania się do wartości. Identyfikatory mogą być zwykłymi identyfikatorami lub identyfikatorami w cudzysłowie pojedynczym.

   Identyfikator:
     IdentifierName,alenieOperatorlubContextKeyword

   IdentyfikatorNazwa:
     IdentifierStartCharacterIdentifierContinueCharactersopt
     ' SingleQuotedIdentifier (Identyfikator pojedynczego cytatu)'

   IdentifierStartCharacter:
     LiteraZnak
    _

   IdentifierContinueCharacter:
     IdentifierStartCharacter (IdentyfikatorZnakPoczątkowy)
     Cyfra dziesiętna
     ŁącznikPostać
     CombiningCharacter (ŁączeniePostaci)
     FormattingCharacter (FormattCharacter)

   IdentifierContinueCharacters:
     IdentifierContinueCharacterIdentifierContinueCharactersopt

   LiteraZnak:
    dowolny znak Unicode klasy Wielkie litery (Lu) lub Małe litery (Ll)
    dowolny znak Unicode z klasy Jak nazwy własne (Lt)
    dowolny znak Unicode klasy Modyfikator litery (Lm) lub Inne litery (Lo)
    dowolny znak Unicode z klasy Liczba litera (Nl)

   ŁączeniePostać:
    dowolny znak Unicode klasy Znak bez odstępów (Mn) lub Znak łączący odstępy (Mc)

   Cyfra dziesiętna:
    dowolny znak Unicode klasy Liczba dziesiętna (Nd)

   ŁącznikPostać:
    dowolny znak Unicode klasy Łącznik interpunkcji (Pc)

   Formatowanie znaku:
    dowolny znak Unicode klasy Format (Cf)

Identyfikatory w formie cudzysłowów pojedynczych

Element identyfikator-w-pojedynczym-cudzysłowie może służyć do zezwalania na użycie jako identyfikator dowolnej sekwencji zawierającej zero lub więcej znaków Unicode, co obejmuje słowa kluczowe, białe znaki, komentarze i operatory. Pojedyncze znaki cudzysłowu są obsługiwane z sekwencją dwóch cudzysłowów.

   SingleQuotedIdentifier:
     SingleQuotedIdentifierCharacters (SingleQuotedIdentifierCharacters)

   SingleQuotedIdentifierCharacters:
     SingleQuotedIdentifierCharacterSingleQuotedIdentifierCharactersopcjonalnie

   SingleQuotedIdentifierCharacter:
     TextCharactersNoSingleQuote
     SingleQuoteEscapeSequence (Sekwencja ucieczki)

   TextCharactersNoSingleQuote:
    Dowolny znak Unicode z wyjątkiem ' (U+0027)

   SingleQuoteEscapeSequence:
    ''

Jednoznaczny identyfikator

   DisambiguatedIdentifier:
     Identyfikator kolumny tabeli
     Identyfikator globalny

   Identyfikator kolumny tabeli:
     Identyfikator[@Identyfikator]

   Identyfikator globalny:
     [@ Identyfikator]

Słowa kluczowe w kontekście

   KontekstSłowo kluczowe:
    Parent
    Self
    ThisItem
    ThisRecord

Uwzględnij wielkość liter

Power Apps rozróżnia wielkość liter w identyfikatorach. Narzędzie do tworzenia automatycznie zamieni je na odpowiedni rozmiar w trakcie pisania formuły.

Separatory

   Separator dziesiętny:
     . (kropka) dla języków, w których kropka jest separatorem liczb dziesiętnych, na przykład 1.23
     , (przecinek) w przypadku języków, w których przecinek służy jako separator liczb dziesiętnych, na przykład 1,23

   ListSeparator:
     , (przecinek) jeśli separator dziesiętny to . (kropka)
     ; (średnik), jeśli separator dziesiętny to , (przecinek)

   Separator łańcuchowy:
     ; (średnik), jeśli separator dziesiętny ma wartość . (kropka)
     ;; (podwójny średnik), jeśli DecimalSeparator to , (przecinek)

Operatory

Operatory są używane w formułach w celu opisywania operacji obejmujących co najmniej jeden operand. Na przykład wyrażenie a + b używa operatora +, aby dodać dwa operandy a i b.

   Operator:
     BinaryOperator
     BinaryOperatorRequiresWhitespace
     PrefixOperator (Operator prefiksu)
     PrefixOperatorRequiresWhitespace
     Operator przyrostka

   BinaryOperator:jeden z
    =<<=>>=<>
    +-*/^
    &
    &&||
    inexactin

   BinaryOperatorRequiresWhitespace:
     And Odstępu
     Or Odstępu

   PrefixOperator:
    !

   PrefixOperatorRequiresWhitespace:
     Not Odstępu

   Operator przyrostka:
    %

Operator odnośnika

   ReferenceOperator:jeden z
    .!

Odwołanie do obiektu

   Odniesienie:
     Odniesienie podstawowe
     BaseReferenceReferenceOperatorReferenceList

   Odniesienie podstawowe:
     Identyfikator
     DisambiguatedIdentifier (Identyfikator ujednoznaczniony)
     Słowo kluczowe kontekstu

   Lista referencji:
     Identyfikator
     IdentyfikatorReferenceOperatorReferenceList

Rekord inline

   Rekord w linii:
     { Opcja InlineRecordList}

   InlineRecordList:
     Wyrażenie identyfikatora:...
     Identifier:ExpressionListSeparatorInlineRecordList

Tabela inline

   Tabela wbudowana:
     [ Opcja InlineTableList]

   InlineTableList:
     Wyrażenie
     WyrażenieListSeparatorInlineTableList

Expression

   Wyrażenie:
     Dosłowny
     Odniesienie
     Rekord w tekście
     Tabela wbudowana
     Wywołanie funkcji
     ( Wyrażenie)
     Wyrażenie PrefixOperator...
     WyrażeniePostfixOperator
     WyrażenieBinaryOperatorExpression

Wyrażenia łączone

   ChainedExpression:
     Wyrażenie
     WyrażenieChainingSeparatorChainedExpressionopt

Wywoływanie funkcji

   Wywołanie funkcji:
     FunctionIdentifier(FunctionArgumentsopt)

   Identyfikator funkcji:
     Identyfikator
     Identyfikator.FunctionIdentifier

   Argumenty funkcji:
     ChainedExpression (Wyrażenie łańcuchowe)
     ChainedExpressionListSeparatorFunctionArguments