Sdílet prostřednictvím


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
    0123456789

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:
     LogicLiteral
     NumberLiteral
     TextLiteral

Logické literály

Logický literál slouží k zápisu hodnot true a false a dává logickou hodnotu.

   LogicalLiteral:jeden z
    truefalse

Čí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
    0123456789

   ExponentPart:
     ExponentIndicatorZnaménkooptDesetinná čísla

   ExponentIndicator:jeden z
    eE

   Podepište:jeden z
    +-

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
     Spojující znak
     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
    =<<=>>=<>
    +-*/^
    &
    &&||
    inexactin

   BinaryOperatorRequiresWhitespace:
     And Mezera
     Or Mezera

   PrefixOperator:
    !

   PrefixOperatorRequiresWhitespace:
     Not Mezera

   PostfixOperator:
    %

Referenční operátor

   ReferenceOperator:jeden z
    .!

Odkaz na objekt

   Odkaz:
     BaseReference
     BaseReferenceReferenceOperatorReferenceList

   Základní reference:
     Identifikátor
     DisambiguatedIdentifier
     Kontextové klíčové slovo

   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