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
0
1
2
3
4
5
6
7
8
9
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:
Ograniczony komentarz
Komentarz jednowierszowy
Komentarz jednowierszowy:
//
SingleLineCommentCharactersopt
SingleLineCommentCharacters:
SingleLineCommentCharacter
SingleLineCommentCharacterSingleLineCommentCharactersopt
SingleLineCommentCharacter:
wszelkie znaki Unicode poza znakiem NewLineCharacter
Ograniczony komentarz:
/*
DelimitedCommentCharactersopt*/
DelimitedCommentCharacters:
DelimitedCommentCharactersNoAsteriskDelimitedCommentCharactersopt
*
DelimitedCommentAfterAsteriskCharacters
DelimitedCommentAfterAsteriskCharacters:
OgranicznikKomentarzNoSlashGwiazdkaZnakOgraniczonyKomentarzZnakiopt
*
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
LiczbaLiterał
TextLiteral (Literał tekstowy)
Literały logiczne
Literał logiczny jest używany do zapisywania wartości true i false i produkuje wartość logiczną.
LogicalLiteral:jeden z
true
false
Literały liczbowe
Literał liczbowy jest używany do zapisywania wartości liczbowej i produkuje wartość liczbową.
LiczbaLiterał:
Cyfry dziesiętne Wykładnik...Część opt
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
0
1
2
3
4
5
6
7
8
9
Część wykładnicza:
ZnakwykładnikaoptDecimalDigits
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
TextLiteral:
"
TextLiteralCharactersopt"
TextLiteralCharacters:
TextLiteralCharacterTextLiteralCharactersopcjonalnie
TextLiteralCharacter:
TextCharacterNoDoubleQuote
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,alenieOperatoraniContextKeyword
IdentyfikatorNazwa:
IdentifierStartCharacterIdentifierContinueCharactersopt
'
SingleQuotedIdentifier (Identyfikator pojedynczego cytatu)'
IdentifierStartCharacter:
Znak litery
_
IdentifierContinueCharacter:
IdentifierStartCharacter (IdentyfikatorZnak_startowy)
Cyfra dziesiętna
Łącznik Character
Łączenie postaci
FormattingCharacter (FormatowanieZnak)
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)
ŁączenieZnaku:
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 separatorem liczb dziesiętnych jest przecinek. 1,23
ListSeparator:
,
(przecinek), jeśli separator dziesiętny to .
(kropka)
;
(średnik), jeśli DecimalSeparator to ,
(przecinek)
Separator łańcuchów:
;
(średnik), jeśli DecimalSeparator to .
(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
=
<
<=
>
>=
<>
+
-
*
/
^
&
&&
||
in
exactin
BinaryOperatorRequiresWhitespace:
And
Odstępu
Or
Odstępu
PrefixOperatorRequiresWhitespace:
Not
Odstępu
Operator odnośnika
Odwołanie do obiektu
Odniesienie:
Odniesienie podstawowe
BaseReferenceReferenceOperatorReferenceList
Odniesienie podstawowe:
Identyfikator
DisambiguatedIdentifier (Identyfikator ujednoznaczniony)
KontekstSłowo kluczowe
Lista referencji:
Identyfikator
IdentyfikatorReferenceOperatorReferenceList
Rekord inline
Rekord w tekście:
{
Opcja InlineRecordList}
InlineRecordList:
Wyrażenie identyfikatora:
...
Identifier:
ExpressionListSeparatorInlineRecordList
Tabela inline
Tabela wbudowana:
[
Opcja InlineTableList]
InlineTableList:
Wyrażenie
ExpressionListSeparatorInlineTableList
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