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:
[@
Identifier]
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(
FunctionArgumentsopt)
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:one of
0
1
2
3
4
5
6
7
8
9
představuje zkrácený tvar této produkce:
DecimalDigit:
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:
Bílý znak
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.
Bílý znak:
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ář:
DelimitedComment
SingleLineComment
SingleLineComment:
//
SingleLineCommentCharactersopt
SingleLineCommentCharacters:
SingleLineCommentCharacter
SingleLineCommentCharacterSingleLineCommentCharactersopt
SingleLineCommentCharacter:
jakékoli znaky Unicode kromě NewLineCharacter
DelimitedComment:
/*
DelimitedCommentCharactersopt*/
DelimitedCommentCharacters:
DelimitedCommentCharactersNoAsteriskDelimitedCommentCharactersopt
*
DelimitedCommentAfterAsteriskCharacters
DelimitedCommentAfterAsteriskCharacters:
DelimitedCommentNoSlashAsteriskCharacterDelimitedCommentCharactersopt
*
DelimitedCommentAfterAsteriskCharacters
DelimitedCommentCharactersNoAsterisk:
jakýkoli znak Unicode kromě * (hvězdička)
DelimitedCommentNoSlashAsteriskCharacter:
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.
Literal:
LogicalLiteral
NumberLiteral
TextLiteral
Logické literály
Logický literál slouží k zápisu hodnot true a false a dává logickou hodnotu.
LogicalLiteral:one of
true
false
Číselné literály
Číselný literál slouží k zápisu číselné hodnoty a dává také číselnou hodnotu.
NumberLiteral:
DecimalDigitsExponentPartopt
DecimalDigitsDecimalSeparatorDecimalDigitsoptExponentPartopt
DecimalSeparatorDecimalDigitsExponentPartopt
DecimalDigits:
DecimalDigit
DecimalDigitsDecimalDigit
DecimalDigit:one of
0
1
2
3
4
5
6
7
8
9
ExponentPart:
ExponentIndicatorSignoptDecimalDigits
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:
"
TextLiteralCharactersopt"
TextLiteralCharacters:
TextLiteralCharacterTextLiteralCharactersopt
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.
Identifier:
IdentifierNamebutnotOperatororContextKeyword
IdentifierName:
IdentifierStartCharacterIdentifierContinueCharactersopt
'
SingleQuotedIdentifier'
IdentifierStartCharacter:
LetterCharacter
_
IdentifierContinueCharacter:
IdentifierStartCharacter
DecimalDigitCharacter
ConnectingCharacter
CombiningCharacter
FormattingCharacter
IdentifierContinueCharacters:
IdentifierContinueCharacterIdentifierContinueCharactersopt
LetterCharacter:
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)
CombiningCharacter:
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)
FormattingCharacter:
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:
SingleQuotedIdentifierCharacterSingleQuotedIdentifierCharactersopt
SingleQuotedIdentifierCharacter:
TextCharactersNoSingleQuote
SingleQuoteEscapeSequence
TextCharactersNoSingleQuote:
libovolný znak Unicode vyjma ' (U+0027)
SingleQuoteEscapeSequence:
'
'
Nerozlišený identifikátor
DisambiguatedIdentifier:
TableColumnIdentifier
GlobalIdentifier
TableColumnIdentifier:
Identifier[@
Identifier]
GlobalIdentifier:
[@
Identifier]
Kontextová klíčová slova
ContextKeyword:
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
DecimalSeparator:
.
(tečka) pro jazyky, které používají tečku jako oddělovač desetinných čísel, například 1.23
,
(čárka) pro jazyky, které používají čárku jako oddělovač desetinných čísel, například 1,23
ListSeparator:
,
(čárka), pokud DecimalSeparator je .
(tečka)
;
(středník), pokud DecimalSeparator je ,
(čárka)
ChainingSeparator:
;
(středník), pokud DecimalSeparator je .
(tečka)
;;
(dvojitý středník), pokud DecimalSeparator 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
.
Operator:
BinaryOperator
BinaryOperatorRequiresWhitespace
PrefixOperator
PrefixOperatorRequiresWhitespace
PostfixOperator
BinaryOperator:one of
=
<
<=
>
>=
<>
+
-
*
/
^
&
&&
||
in
exactin
BinaryOperatorRequiresWhitespace:
And
Whitespace
Or
Whitespace
PrefixOperatorRequiresWhitespace:
Not
Whitespace
Referenční operátor
Odkaz na objekt
Reference:
BaseReference
BaseReferenceReferenceOperatorReferenceList
BaseReference:
Identifier
DisambiguatedIdentifier
ContextKeyword
ReferenceList:
Identifier
IdentifierReferenceOperatorReferenceList
Vložený záznam
InlineRecord:
{
InlineRecordListopt}
InlineRecordList:
Identifier:
Expression
Identifier:
ExpressionListSeparatorInlineRecordList
Vložená tabulka
InlineTable:
[
InlineTableListopt]
InlineTableList:
Expression
ExpressionListSeparatorInlineTableList
Expression
Expression:
Literal
Reference
InlineRecord
InlineTable
FunctionCall
(
Expression)
PrefixOperatorExpression
ExpressionPostfixOperator
ExpressionBinaryOperatorExpression
Zřetězené výrazy
ChainedExpression:
Expression
ExpressionChainingSeparatorChainedExpressionopt
Volání funkce
FunctionCall:
FunctionIdentifier(
FunctionArgumentsopt)
FunctionIdentifier:
Identifier
Identifier.
FunctionIdentifier
FunctionArguments:
ChainedExpression
ChainedExpressionListSeparatorFunctionArguments