Gramatika výrazů
Poznámka:
Microsoft Power Fx je nový název jazyka vzorců pro aplikace plátna. Práce na těchto článcích stále probíhá, jak extrahujeme jazyk z aplikací plátna, integrujeme jej s ostatními produkty Microsoft Power Platform a zpřístupňujeme jako open source. Začněte v části Přehled jazyka Microsoft Power Fx obsahující úvod do jazyka.
Microsoft Power Fx je založen na vzorcích, které svazují název a výraz. Stejně jako v listech aplikace Excel se při změně příchozích závislostí výrazu výraz přepočítá a změní se hodnota názvu, což se případně kaskádově přepočítá do jiných vzorců.
Tato gramatika zahrnuje část vzorce tvořenou výrazem. Vazba na název pro vytvoření vzorce závisí na tom, jak je integrován Power Fx. V listech není ukázána syntaxe vazby, je implikována umístěním, kde je výraz zapsán, například zadáním =B1
v buňce A1. V některých případech není vůbec nutná žádná vazba a Power Fx je používán jako vyhodnocovač výrazů, například při podpoře počítaných sloupců databázové tabulky. V případě Power Apps je vazba implicitní při práci v Power Apps Studio s formátem serializace založeným na YAML pro použití mimo Power Apps Studio.
Gramatické zásady
Gramatika slov a syntaxe se zobrazuje pomocí gramatických produkcí. Každá produkce definuje neterminální symbol a jeho možná rozšíření do sekvencí neterminálních nebo terminálních symbolů. V gramatických produkcích se neterminální symboly uvádí kurzívou a terminální symboly písmem s pevnou šířkou.
První řádek produkce představuje název definovaného neterminálního symbolu následovaný dvojtečkou. Každý po sobě jdoucí odsazený řádek obsahuje možné rozšíření neterminálního symbolu v podobě sekvence neterminálních a terminálních symbolů. Například tato produkce:
GlobalIdentifier:
[@
Identifikátor]
definuje GlobalIdentifier (globální identifikátor) sestávající z tokenu [@
následovaného identifikátorem následovaného tokenem]
.
Když existuje více než jedno možné rozšíření neterminálního symbolu, jsou alternativy uvedeny na samostatných řádcích. Dolní index „opt“ slouží k označení volitelného symbolu. Například tato produkce:
FunctionCall:
FunctionIdentifier(
FunctionArgumentsvolba)
představuje zkrácený tvar této produkce:
FunctionCall:
FunctionIdentifier(
)
FunctionIdentifier(
FunctionArguments)
Alternativy se obvykle uvádí na samostatných řádcích. Pokud je alternativ mnoho, rozšíření jsou uvedena na jednom řádku a předchází jim fráze „může být“. Jedná se jednoduše o zkrácenou verzi, aby nebylo nutné vypisovat každou alternativu na samostatné řádky.
Například tato produkce:
DecimalDigit:jeden z
0
1
2
3
4
5
6
7
8
9
představuje zkrácený tvar této produkce:
Desetinné číslo:
0
1
2
3
4
5
6
7
8
9
Lexikální analýza
Produkce lexikální jednotky definuje lexikální gramatiku pro výraz Power Fx. Každý platný výraz Power Fx odpovídá této gramatice.
ExpressionUnit:
ExpressionElementsopt
ExpressionElements:
ExpressionElement
ExpressionElementExpressionElementsopt.
ExpressionElement:
Mezera
Komentář
Na úrovni slov se výraz Power Fx skládá z proudu prvků Whitespace (prázdný znak), Comment (komentář) a Token. Jednotlivé typy produkcí jsou probrány v následujících částech. V gramatice syntaxe jsou významné jen prvky Token.
Prázdný znak
Prázdné znaky slouží k oddělení komentářů a tokenů v dokumentu Power Apps.
Mezera:
jakýkoli Unicode znak mezery (třída Zs)
jakýkoli Unicode znak řádku (třída Zl)
jakýkoli Unicode znak odstavce (třída Zp)
Znak horizontálního tabulátoru (U+0009)
Znak odřádkování (U+000A)
Znak vertikálního tabulátoru (U+000B)
Znak posunu stránky (U+000C)
Znak návratu na začátek řádku (U+000D)
Znak nového řádku (U+0085)
Komentáře
Podporovány jsou dvě formy komentářů:
- Jednořádkové komentáře začínají znaky
//
a končí na konci řádku zdrojového kódu. - Komentáře s oddělovači začínají a končí znaky
/*
a*/
. Komentáře s oddělovači mohou být rozloženy na více řádků.
Komentář:
Oddělený komentář
SingleLineComment
SingleLineComment:
//
SingleLineCommentCharactersvol
SingleLineCommentCharacters:
SingleLineCommentCharacter
SingleLineCommentCharacterSingleLineCommentCharactersvolba
SingleLineCommentCharacter:
jakékoli znaky Unicode kromě NewLineCharacter
DelimitedComment:
/*
DelimitedCommentCharactersvol*/
Znaky s odděleným komentářem:
DelimitedCommentCharactersNohvězdičkaDelimitedCommentCharactersopt
*
DelimitedCommentAfterAsteriskChaacters
DelimitedCommentAfterAsteriskCharacters:
DelimitedCommentNoSlashHvězdičkaCharacterDelimitedCommentCharactersopt
*
DelimitedCommentAfterAsteriskChaacters
DelimitedCommentCharactersNoHvězdička:
jakýkoli znak Unicode kromě * (hvězdička)
DelimitedCommentNoSlashHvězdičkaCharacter:
jakýkoli znak Unicode kromě / (lomítko) nebo * (hvězdička)
Komentáře nejsou vnořené. Sekvence znaků /*
a */
nemá v rámci jednořádkových komentářů žádný speciální význam. To stejné platí se sekvencemi //
a /*
v komentářích s oddělovači.
Komentáře se nezpracovávají v řetězcích textových literálů.
Následující příklad obsahuje dva oddělené komentáře:
/* Hello, world
*/
"Hello, world" /* This is an example of a text literal */
Následující příklady zahrnují tři jednořádkové komentáře:
// Hello, world
//
"Hello, world" // This is an example of a text literal
Literály
Literál představuje ve zdrojovém kódu hodnotu.
Doslov:
LogicalLiteral
NumberLiteral
TextLiteral
Logické literály
Logický literál slouží k zápisu hodnot true a false a dává logickou hodnotu.
LogicalLiteral:jeden z
true
false
Číselné literály
Číselný literál slouží k zápisu číselné hodnoty a dává také číselnou hodnotu.
NumberLiteral:
DecimalDigitsExponentPartvolba
Desetinné čísliceOddělovač desetinných místDesetinné čísliceoptExponentPartopt
DecimalSeparatorDesetinné čísliceExponentPartvolba
Desetinné číslice:
DecimalDigit
DecimalDigitsDecimalDigit
DecimalDigit:jeden z
0
1
2
3
4
5
6
7
8
9
ExponentPart:
ExponentIndicatorZnaménkooptDesetinná čísla
Textové literály
Textový literál slouží k zápisu sekvence znaků Unicode a dává textovou hodnotu. Textové literály jsou uzavřeny v dvojitých uvozovkách. Chcete-li do textové hodnoty zahrnout dvojité uvozovky, zadejte je dvakrát, jak je znázorněno v následujícím příkladu:
"The ""quoted"" text" // The "quoted" text
TextLiteral:
"
TextLiteralCharactersvol"
TextLiteralCharacters:
TextLiteralCharacterTextLiteralCharactersvolba
TextLiteralCharacter:
TextCharacterNoDoubleQuote
DoubleQuoteEscapeSequence
TextCharacterNoDoubleQuote:
jakýkoli bod kódu Unicode kromě dvojitých uvozovek
DoubleQuoteEscapeSequence:
"
"
Identifikátory
Identifikátor je název, který slouží k odkazování na hodnotu. Identifikátory mohou být buď běžné, nebo v jednoduchých uvozovkách.
Identifikátor:
IdentifierNamealeneOperátorneboKontextKeyword
IdentifierName:
IdentifierStartCharacterIdentifierContinueCharactersvolba
'
SingleQuotedIdentifier'
IdentifierStartCharacter:
PísmenoZnak
_
IdentifierContinueCharacter:
IdentifierStartCharacter
DecimalDigitCharacter
ConnectingCharacter
Kombinující charakter
Formátování znaku
IdentifierContinueCharacters:
IdentifierContinueCharacterIdentifierContinueCharactersvolba
Písmeno:
jakýkoli znak Unicode třídy Velké písmeno (Lu) nebo Malé písmeno (Ll)
jakýkoli znak Unicode ve třídě Velké počáteční písmeno (Lt)
jakýkoli znak Unicode třídy Modifikátor písmena (Lm) nebo Ostatní písmena (Lo)
jakýkoli znak Unicode ve třídě Písmeno číslice (Nl)
Kombinující znak:
jakýkoli znak Unicode třídy Značka bez mezery (Mn) nebo Značka kombinující mezery (Mc)
DecimalDigitCharacter:
libovolný znak Unicode třídy Desetinná číslice (Nd)
ConnectingCharacter:
jakýkoli znak Unicode třídy Interpunkce konektoru (Pc)
Formátovací znak:
jakýkoli znak Unicode třídy Formát (Cf)
Identifikátory ve formě jednoduchých uvozovek
Identifikátor ve formě jednoduchých uvozovek může obsahovat libovolně dlouhou sekvenci znaků Unicode, kterou lze použít jako identifikátor, včetně klíčových slov, prázdných znaků, komentářů a operátorů. Znaky jednoduchých uvozovek lze uvést sekvencí dvou jednoduchých uvozovek.
SingleQuotedIdentifier:
SingleQuotedIdentifierCharacters
SingleQuotedIdentifierCharacters:
SingleQuotedIdentifierCharacterSingleQuotedIdentifierCharactersvolba
SingleQuotedIdentifierCharacter:
TextCharactersNoSingleQuote
SingleQuoteEscapeSequence
TextCharactersNoSingleQuote:
libovolný znak Unicode vyjma ' (U+0027)
SingleQuoteEscapeSequence:
'
'
Nerozlišený identifikátor
DisambiguatedIdentifier:
TableColumnIdentifier
GlobalIdentifier
TableColumnIdentifier:
Identifikátor[@
Identifikátor]
GlobalIdentifier:
[@
Identifikátor]
Kontextová klíčová slova
Kontextové klíčové slovo:
Parent
Self
ThisItem
ThisRecord
Rozlišování malých a velkých písmen
U identifikátorů Power Apps se rozlišují malá a velká písmena. Nástroj pro vytváření při psaní vzorce písmena automaticky změní na správnou velikost.
Oddělovače
Desetinný oddělovač:
.
(tečka) pro jazyky, které používají tečku jako oddělovač například pro desetinná čísla 1.23
,
(čárka) pro jazyky, které používají čárku jako oddělovač například desetinných čísel 1,23
Oddělovač seznamu:
,
(čárka) if Desetinný oddělovač je .
(tečka)
;
(středník) if Desetinný oddělovač je ,
(čárka)
Řetězový oddělovač:
;
(středník) if Desetinný oddělovač je .
(tečka)
;;
(dvojitý středník) pokud Oddělovač desetinných míst je ,
(čárka)
Operátory
Operátory ve vzorcích slouží k popisu operací zahrnujících jeden nebo více operandů. Například výraz a + b
sečte pomocí operátoru +
dva operandy a
a b
.
Operátor:
Binární operátor
BinaryOperatorRequiresWhitespace
PrefixOperator
PrefixOperatorRequiresWhitespace
PostfixOperator
BinaryOperator:jeden z
=
<
<=
>
>=
<>
+
-
*
/
^
&
&&
||
in
exactin
BinaryOperatorRequiresWhitespace:
And
Mezera
Or
Mezera
PrefixOperatorRequiresWhitespace:
Not
Mezera
Referenční operátor
Odkaz na objekt
Odkaz:
BaseReference
BaseReferenceReferenceOperatorReferenceList
Základní reference:
Identifikátor
DisambiguatedIdentifier
ContextKeyword
ReferenceList:
Identifikátor
IdentifikátorOperátor referenceSeznam odkazů
Vložený záznam
InlineRecord:
{
InlineRecordListopt}
InlineRecordList:
Identifikátor:
Výraz
Identifikátor:
VýrazSeparátor seznamuInlineRecordList
Vložená tabulka
InlineTable:
[
InlineTableListopt]
InlineTableList:
Výraz
VýrazSeparátor seznamuInlineTableList
Expression
Výraz:
Doslovný
Odkaz
InlineRecord
InlineTable
Funkce volání
(
Výraz)
PrefixOperatorVýraz
VýrazOperátor Postfix
VýrazBinární operátorVýraz
Zřetězené výrazy
Řetězovaný výraz:
Výraz
ExpressionChainingSeparatorChainedExpressionvolba
Volání funkce
FunctionCall:
FunctionIdentifier(
FunctionArgumentsvolba)
Identifikátor funkce:
Identifikátor
Identifikátor.
Identifikátor funkce
Funkční Argumenty:
Řetězovaný výraz
ChainedExpressionListSeparatorFunctionArguments