Zdieľať cez


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
    0123456789

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
    truefalse

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

  ExponentPart:
    ExponentIndicatorZnakoptDecimalDigits

  ExponentIndicator:jeden z
    eE

  Podpíšte:jeden z
    +-

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
    =<<=>>=<>
    +-*/^
    &
    &&||
    inexactin

  BinaryOperatorRequiresWhitespace:
    AndMedzery
    OrMedzery

  PrefixOperator:
    !

  PrefixOperatorRequiresWhitespace:
    NotMedzery

  PostfixOperator:
    %

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