Výrazová gramatika
Poznámka
Microsoft Power Fx je nový názov jazyka vzorcov pre aplikácie plátna. Tieto články sú rozpracované, pretože jazyk extrahujeme z aplikácií plátna a integrujeme ho s ostatnými produktmi Microsoft Power Platform, aby sme ho sprístupnili ako open source. Začnite s prehľadom Microsoft Power Fx ako úvod do jazyka.
Microsoft Power Fx je založený na vzorcoch, ktoré viažu názov k výrazu. Rovnako ako v hárkoch programu Excel, keď sa zmenia prichádzajúce závislosti výrazu, výraz sa prepočíta a zmení sa hodnota názvu, čo môže viesť k kaskádovému prepočtu do iných vzorcov.
Táto gramatika pokrýva výrazovú časť vzorca. Viazanie na meno, aby sa vytvoril vzorec, závisí od toho, ako je integrovaný Power Fx. V hárkoch nie je sprístupnená syntax väzby, je implikovaná miestom, kde je výraz napísaný – napríklad zadanie =B1
v bunke A1. V niektorých prípadoch sa nevyžaduje vôbec žiadna väzba a Power Fx sa používa ako vyhodnocovač výrazov, napríklad na podporu vypočítaných stĺpcov databázovej tabuľky. Pre Power Apps sa väzba implikuje pri práci v Power Apps Studio s formátom serializácie založeným na YAML na použitie mimo Power Apps Studio.
Gramatické pravidlá
Lexikálne a syntaktické gramatiky sú prezentované pomocou gramatických produkcií. Každá gramatická produkcia definuje nekoncový symbol a možné rozšírenia tohto nekoncového symbolu do postupností nekoncových alebo koncových symbolov. V gramatických produkciách sa nekoncové symboly zobrazujú kurzívou a koncové symboly sa zobrazujú písmom s pevnou šírkou.
Prvým riadkom gramatickej produkcie je názov práve definovaného nekoncového symbolu, za ktorým nasleduje dvojbodka. Každý nasledujúci odsadený riadok obsahuje možné rozšírenie nekoncového symbolu, ktorý je daný ako postupnosť nekoncových alebo koncových symbolov. Napríklad produkcia:
GlobalIdentifier:
[@
Identifikátor]
definuje GlobalIdentifier, ktorý pozostáva z tokenu [@
, za ktorým nasleduje Identifikátor, za ktorým nasleduje token ]
.
Keď existuje viac rozšírení nekoncového symbolu, alternatívy sú uvedené v samostatných riadkoch. Na označenie voliteľného symbolu sa používa index „opt“. Napríklad produkcia:
FunctionCall:
FunctionIdentifier(
FunctionArgumentsopt)
je skratka pre:
FunctionCall:
FunctionIdentifier(
)
FunctionIdentifier(
FunctionArguments)
Alternatívy sú zvyčajne uvedené v samostatných riadkoch, aj keď v prípadoch, kde existuje veľké množstvo alternatív, zoznamu rozšírení uvedených v jednom riadku môže predchádzať fráza „jeden z“. Toto je jednoducho skratka pre každú alternatívu v samostatných riadkoch.
Napríklad produkcia:
DecimalDigit:jedna z
0
1
2
3
4
5
6
7
8
9
je skratka pre:
Desatinné číslo:
0
1
2
3
4
5
6
7
8
9
Lexikálna analýza
Produkcia lexical-unit definuje lexikálnu gramatiku pre výraz Power Fx. Každý platný výraz Power Fx zodpovedá tejto gramatike.
ExpressionUnit:
ExpressionElementsopt
ExpressionElements:
ExpressionElement
ExpressionElementExpressionElementsopt
ExpressionElement:
Medzery
Komentujte
Na lexikálnej úrovni sa výraz jazyka Power Fx skladá zo streamu prvkov Prázdny znak, Komentár a Token. Každá z týchto produkcií je popísaná v nasledujúcich sekciách. V syntaktickej gramatike sú významné iba prvky Token.
Prázdny znak
Prázdne znaky sa používajú na oddelenie komentárov a tokenov v rámci dokumentu Power Apps.
Medzera:
akýkoľvek oddeľovač medzery Unicode (trieda Zs)
akýkoľvek oddeľovač riadka Unicode (trieda Zl)
akýkoľvek oddeľovač odsekov Unicode (trieda Zp)
Znak vodorovného tabulátora (U+0009)
Znak posunu riadka (U+000A)
Znak zvislého tabulátora (U+000B)
Znak posunu riadka (U+000C)
Znak návratu na začiatok riadka (U+000D)
Znak nasledujúceho riadka (U+0085)
Vytvoril
Podporované sú dve formy komentárov:
- Jednoriadkové komentáre, ktoré začínajú znakmi
//
a rozširujú sa na koniec zdrojového riadka. - Komentáre s oddeľovačmi, ktoré začínajú znakmi
/*
a končia znakmi*/
. Komentáre s oddeľovačmi môžu obsahovať viacero riadkov.
Komentár:
DelimitedComment
SingleLineComment
SingleLineComment:
//
SingleLineCommentCharactersvoliteľné
SingleLineCommentCharacters:
SingleLineCommentCharacter
SingleLineCommentCharacterSingleLineCommentCharactersopt
SingleLineCommentCharacter:
akékoľvek znaky Unicode okrem znaku NewLineCharacter
DelimitedComment:
/*
Znaky s oddeleným komentáromopt*/
DelimitedCommentCharacters:
DelimitedCommentCharactersNohviezdičkaDelimitedCommentCharactersopt
*
Oddelený komentár po znakoch hviezdičky
DelimitedCommentAfterAsteriskCharacters:
DelimitedCommentNoSlashHviezdičkaCharacterDelimitedCommentCharactersopt
*
Oddelený komentár po znakoch hviezdičky
Znaky s oddeleným komentárom Bez hviezdičky:
ľubovoľný znak Unicode okrem * (hviezdička)
DelimitedCommentNoSlashHviezdičkaCharacter:
ľubovoľný znak Unicode okrem / (lomka) alebo * (hviezdička)
Komentáre nie sú vnorené. Postupnosti znakov /*
a */
nemajú v jednoriadkovom komentári žiadny zvláštny význam a postupnosti znakov //
a /*
nemajú v komentári s oddeľovačmi žiadny zvláštny význam.
Komentáre sa nespracovávajú v reťazcoch explicitných hodnôt premenných.
Nasledujúci príklad obsahuje dva komentáre s oddeľovačmi:
/* Hello, world
*/
"Hello, world" /* This is an example of a text literal */
Nasledujúce príklady zahŕňajú tri jednoriadkové komentáre:
// Hello, world
//
"Hello, world" // This is an example of a text literal
Explicitné hodnoty premenných
Explicitná hodnota premennej je reprezentácia zdrojového kódu hodnoty.
Doslov:
LogicalLiteral
NumberLiteral
TextLiteral
Logické explicitné hodnoty premenných
Logická explicitná hodnota premennej sa používa na zápis hodnôt pravda a nepravda a na vytvorenie logickej hodnoty.
LogicalLiteral:jeden z
true
false
Číselné explicitné hodnoty premenných
Číselná explicitná hodnota premennej sa používa na zápis číselnej hodnoty a vytvorenie číselnej hodnoty.
NumberLiteral:
DecimalDigitsExponentPartopt
Desatinné čísliceOddeľovač desatinných miestDesatinné čísliceoptExponentPartopt
DecimalSeparatorDecimalDigitsExponentPartopt
Desatinné číslice:
DecimalDigit
DecimalDigitsDecimalDigits
DecimalDigit:jedna z
0
1
2
3
4
5
6
7
8
9
ExponentPart:
ExponentIndicatorZnakoptDecimalDigits
Textové explicitné hodnoty premennej
Textová explicitná hodnota premennej sa používa na zápis postupnosti znakov Unicode a na vytvorenie textovej hodnoty. Textové explicitné hodnoty premennej sú uzavreté v úvodzovkách. Ak chcete do textovej hodnoty zahrnúť dvojité úvodzovky, opakujte dvojité úvodzovky, ako je to znázornené v nasledujúcom príklade:
"The ""quoted"" text" // The "quoted" text
TextLiteral:
"
TextLiteralCharactersvoliteľné"
TextLiteralCharacters:
TextLiteralCharacterTextLiteralCharactersopt
TextLiteralCharacter:
TextCharacterNoDoubleQuote
DoubleQuoteEscapeSequence
TextCharacterNoDoubleQuote:
akýkoľvek bod kódu Unicode okrem dvojitej úvodzovky
DoubleQuoteEscapeSequence:
"
"
Identifikátory
Identifikátor je názov, ktorý sa používa na odkazovanie na hodnotu. Identifikátory môžu byť buď regulárne identifikátory alebo identifikátory v jednoduchých úvodzovkách.
Identifikátor:
IdentifierNamealenieOperátoraleboKontextové kľúčové slovo
IdentifierName:
IdentifierStartCharacterIdentifierContinueCharactersopt
'
SingleQuotedIdentifier'
IdentifierStartCharacter:
LetterCharacter
_
IdentifierContinueCharacter:
IdentifierStartCharacter
DecimalDigitCharacter
ConnectingCharacter
Kombinovanie znakov
Formátovaniecharakteru
IdentifierContinueCharacters:
IdentifierContinueCharacterIdentifierContinueCharactersopt
Písmeno:
akýkoľvek znak Unicode triedy Veľké písmeno (Lu) alebo Malé písmeno (Ll)
akýkoľvek znak Unicode triedy Písmeno nadpisu (Lt)
akýkoľvek znak Unicode triedy Modifikátor písmena (Lm) alebo Iné písmeno (Lo)
akýkoľvek znak Unicode triedy Číselné písmeno (Nl)
Kombinovaný znak:
akýkoľvek znak Unicode triedy Značka bez medzery (Mn) alebo Značka kombinujúca medzeru (Mc)
DecimalDigitCharacter:
akýkoľvek znak Unicode triedy Desatinná číslica (Nd)
ConnectingCharacter:
akýkoľvek znak Unicode triedy Interpunkcia konektora (Pc)
Formátovací znak:
akýkoľvek znak Unicode triedy Formát (Cf)
Identifikátory v jednoduchých úvodzovkách
Identifikátor jednoduchej úvodzovky môže obsahovať akúkoľvek postupnosť znakov Unicode, ktoré sa majú použiť ako identifikátor, vrátane kľúčových slov, prázdnych znakov, komentárov a operátorov. Znaky jednoduchých úvodzoviek sú podporované „escape“ postupnosťou dvoch jednoduchých úvodzoviek.
SingleQuotedIdentifier:
SingleQuotedIdentifierCharacters
SingleQuotedIdentifierCharacters:
SingleQuotedIdentifierCharacterSingleQuotedIdentifierCharactersvoliteľné
SingleQuotedIdentifierCharacter:
TextCharactersNoSingleQuote
SingleQuoteEscapeSequence
TextCharactersNoSingleQuote:
ľubovoľný znak Unicode okrem ' (U+0027)
SingleQuoteEscapeSequence:
'
'
Jednoznačný identifikátor
DisambiguatedIdentifier:
TableColumnIdentifier
GlobalIdentifier
TableColumnIdentifier:
Identifikátor[@
Identifikátor]
GlobalIdentifier:
[@
Identifikátor]
Kontextové kľúčové slová
Kontextové kľúčové slovo:
Parent
Self
ThisItem
ThisRecord
Rozlišovanie malých a veľkých písmen
Pri identifikátoroch Power Apps sa rozlišujú malé a veľké písmená. Nástroj na tvorbu obsahu ich pri písaní vzorca automaticky zmení na správne veľké a malé písmená.
Oddeľovače
Decimal Separator:
.
(bodka) pre jazyky, ktoré napríklad používajú bodku ako oddeľovač desatinných čísel 1.23
,
(čiarka) pre jazyky, ktoré používajú čiarku ako oddeľovač desatinných čísel, napr 1,23
Oddeľovač zoznamu:
,
(čiarka) ak Oddeľovač desatinných miest je .
(bodka)
;
(bodkočiarka) ak Oddeľovač desatinných miest je ,
(čiarka)
Reťazový oddeľovač:
;
(bodkočiarka), ak Oddeľovač desatinných miest je .
(bodka)
;;
(dvojitá bodkočiarka) ak Oddeľovač desatinných miest je ,
(čiarka)
Operátory
Operátory sa používajú vo vzorcoch na popis operácií zahrňujúcich jeden alebo viac operandov. Napríklad výraz a + b
pomocou operátora +
pridá dva operandy a
a b
.
operátor:
BinaryOperator
BinaryOperatorRequiresWhitespace
PrefixOperator
PrefixOperatorRequiresWhitespace
PostfixOperator
BinaryOperator:jeden z
=
<
<=
>
>=
<>
+
-
*
/
^
&
&&
||
in
exactin
BinaryOperatorRequiresWhitespace:
And
Medzery
Or
Medzery
PrefixOperatorRequiresWhitespace:
Not
Medzery
Referenčný operátor
Referenčný operátor:jeden z
.
!
Odkaz na objekt
Referencia:
Základná referencia
BaseReferenceReferenceOperatorReferenceList
Základná referencia:
Identifikátor
DisambiguatedIdentifier
Kontextové kľúčové slovo
Referenčný zoznam:
Identifikátor
IdentifikátorReferenčný operátorZoznam referencií
Vnorený záznam
InlineRecord:
{
InlineRecordListopt}
InlineRecordList:
Identifikátor:
Výraz
Identifikátor:
VýrazSeparátor zoznamuInlineRecordList
Vnorená tabuľka
InlineTable:
[
InlineTableListopt]
InlineTableList:
Výraz
ExpressionListSeparatorInlineTableList
Expression
Výraz:
Doslovný
Odkaz
InlineRecord
InlineTable
FunctionCall
(
Výraz)
PrefixOperatorVýraz
VýrazOperátor Postfix
VýrazBinárny operátorVýraz
Reťazené výrazy
ChainedExpression:
Výraz
ExpressionChainingSeparatorChainedExpressionopt
Volanie funkcie
FunctionCall:
FunctionIdentifier(
FunctionArgumentsopt)
FunctionIdentifier:
Identifikátor
Identifikátor.
Identifikátor funkcie
Funkčné argumenty:
Chained Expression
ChainedExpressionListSeparatorFunctionArguments