Dijeli putem


Gramatika izraza

Napomena

Microsoft Power Fx novo je ime za jezik formula za aplikacije od gotovih gradivnih elemenata. Ovi su članci nedovršeni dok izdvajamo jezik iz aplikacija od gotovih gradivnih elemenata i integriramo ga s drugim Microsoft Power Platform proizvoda i činimo ga dostupnim kao otvoreni kod. Počnite s odjeljkom Pregled jezika Microsoft Power Fx za uvod u jezik.

Microsoft Power Fx temelji se na formulama koje ime vežu uz izraz. Baš kao u proračunskim tablicama programa Excel, kako se mijenjaju ulazne ovisnosti o izrazu, izraz se preračunava i vrijednost imena mijenja, moguće je kaskadno preračunavanje u druge formule.

Ova gramatika pokriva dio formule s izrazom. Povezivanje s nazivom za stvaranje formule ovisi o načinu integracije Power Fx. U proračunskim tablicama sintaksa vezanja nije izložena, to se podrazumijeva mjestom na kojem je zapisan izraz—na primjer, unos vrijednosti =B1 u ćeliju A1. U nekim slučajevima povezivanje uopće nije potrebno, a Power Fx se koristi kao procjenitelj izraza, na primjer u podržavanju izračunatih stupaca tablice baze podataka. Za Power Apps povezivanje se podrazumijeva pri radu na usluzi Power Apps Studio s formatom serializacije zasnovan na YAML-u za upotrebu izvan usluge Power Apps Studio.

Gramatičke konvencije

Leksička i sintaktička gramatika predstavljene su upotrebom gramatičkih produkcija. Svaka gramatička produkcija definira neterminalni simbol i moguća proširenja tog neterminalnog simbola u sekvence neterminalnih ili terminalnih simbola. U gramatičkim produkcijama neterminalni simboli prikazani su kurzivom, a terminalni simboli fontom fiksne širine.

Prvi redak gramatičke produkcije naziv je neterminalnog simbola koji se definira, a iza njega slijedi dvotočka. Svaka uzastopna uvučena crta sadrži moguće proširenje neterminalnog simbola danog kao niz neterminalnih ili terminalnih simbola. Primjerice, produkcija:

  Globalni identifikator:
    [@Identifikator]

definira GlobalIdentifier da se sastoji od tokena [@, nakon čega slijedi Identifikator, nakon čega slijedi token ].

Kada postoji više od jednog mogućeg proširenja neterminalnog simbola, alternative su navedene u odvojenim redovima. Indeks "opt" koristi se za označavanje neobaveznog simbola. Primjerice, produkcija:

  FunctionCall:
    FunctionIdentifier(FunctionArgumentsopt)

skraćenica je za:

  FunctionCall:
    Identifikator funkcije()
    FunctionIdentifier(FunctionArguments)

Alternative su obično navedene u odvojenim retcima, iako u slučajevima kada postoji mnogo alternativa, izraz "jedan od" može prethoditi popisu proširenja navedenih u jednom retku. Ovo je jednostavno stenografija za popisivanje svake od alternativa u zasebnim retcima.

Primjerice, produkcija:

  DecimalDigit:jedan od
    0123456789

skraćenica je za:

  Decimalna znamenka:
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9

Leksička analiza

Proizvodnja leksičke jedinice definira leksičku gramatiku za izraz Power Fx. Svaki valjani izraz Power Fx u skladu je s ovom gramatikom.

  ExpressionUnit:
    ExpressionElementsopt

  ExpressionElements:
    Element izraza
    ExpressionElementExpressionElementsopt

  Element izraza:
    Razmak
    Komentar

Na leksičkoj razini izraz Power Fx sastoji se od toka elemenata Razmak, Komentar i Token. Svaka od ovih produkcija obrađena je u sljedećim odjeljcima. Samo su elementi Token značajni u sintaktičkoj gramatici.

Razmaknica

Razmak se koristi za odvajanje komentara i tokena unutar dokumenta Power Apps.

  Razmak:
    bilo koji Unicode razdjelnik prostora (klasa Zs)
    bilo koji Unicode razdjelnik retka (klasa ZI)
    bilo koji razdjelnik paragrafa Unicode (klasa Zp)
    Vodoravni znak kartice (U+0009)
    Znak uvlačenja retka (U+000A)
    Okomiti znak kartice (U+000B)
    Znak uvlačenja obrasca (U+000C)
    Znak prelaska u novi red (U+000D)
    Znak sljedećeg retka (U+0085)

Komentari

Podržana su dva oblika komentara:

  • Komentari u jednom redu koji započinju znakovima // i protežu se do kraja izvornog retka.
  • Razgraničeni komentari koji započinju znakovima /*, a završavaju znakovima */. Razgraničeni komentari mogu obuhvaćati više redaka.

  Napomena:
    RazgraničenoKomentar
    SingleLineComment

  SingleLineComment:
    //SingleLineCommentCharacterschoose

  SingleLineCommentCharacters:
    SingleLineCommentCharacter
    SingleLineCommentCharacterSingleLineCommentCharacterschoose

  SingleLineCommentCharacter:
    bilo koji Unicode znakovi osim NewLineCharacter

  RazdvojeniKomentar:
    /*DelimitedCommentCharacterschoose*/

  DelimitedCommentCharacters:
    RazgraničenoKomentarLikoviNeZvjezdicaRazgraničenaKomentarZnakovise odluče
    *DelimitedCommentAfterAsteriskCharacters

  DelimitedCommentAfterAsteriskCharacters:
    RazgraničenoKomentarNoKosa crtaZvjezdicaRazgraničen znakKomentarZnakovi...se odluče
    *DelimitedCommentAfterAsteriskCharacters

  RazgraničenoKomentarLikoviBez zvjezdice:
    bilo koji Unicode znak osim * (zvjezdica)

  DelimitedCommentNoSlashAsteriskCharacter:
    bilo koji Unicode znak osim / (kosa crta) ili * (zvjezdica)

Komentari nisu ugniježđeni. Slijedovi znakova /* i */ nemaju posebno značenje unutar komentara u jednom retku i slijedovi znakova // i /* nemaju posebno značenje unutar razgraničenog komentara.

Komentari se ne obrađuju unutar nizova s tekstualnim doslovnim vrijednostima.

Sljedeći primjer uključuje dva razgraničena komentara:

/* Hello, world
*/
"Hello, world"    /* This is an example of a text literal */

Sljedeći primjeri uključuju tri komentara u jednom redu:

// Hello, world
//
"Hello, world"    // This is an example of a text literal

Doslovne vrijednosti

Doslovna vrijednost je reprezentacija je izvornog koda vrijednosti.

  Doslovno:
    LogičkiDoslovni
    BrojDoslovno
    TextLiteral

Logičke doslovne vrijednosti

Logička doslovna vrijednost koristi se za zapisivanje vrijednosti true i false te stvaranje logičke vrijednosti.

  LogicalLiteral:jedan od
    truefalse

Brojčane doslovne vrijednosti

Doslovna vrijednost broja koristi se za zapisivanje numeričke vrijednosti i stvaranje brojevne vrijednosti.

  BrojDoslovno:
    DecimalDigitsExponentPartopt
    DecimalDigitsDecimalSeparatorDecimalDigitsoptExponentPartopt
    DecimalSeparatorDecimalDigitsExponentPartopt

  Decimalne znamenke:
    Decimalna znamenka
    DecimalDigitsDecimalDigit

  DecimalDigit:jedan od
    0123456789

  Eksponentni dio:
    ExponentIndicatorSignoptDecimalDigits

  ExponentIndicator: jedan od
    eE

  Znak: jedan od
    +-

Tekstne doslovne vrijednosti

Doslvna vrijednost teksta koristi se za pisanje niza Unicode znakova i stvaranje tekstualne vrijednosti. Doslovne vrijednosti teksta odvojene su dvostrukim navodnicima. Da biste u tekstualnu vrijednost uključili dvostruke navodnike, ponovite dvostruke navodnike, kao što je prikazano u sljedećem primjeru:

"The ""quoted"" text" // The "quoted" text

  TextLiteral:
    "TextLiteralCharacterschoose"

  TextLiteralCharacters:
    TextLiteralCharacterTextLiteralCharactersopt

  TextLiteralCharacter:
    TextCharacterNoDoubleQuote
    DoubleQuoteEscapeSequence

  TextCharacterNoDoubleQuote:
    bilo koja Unicode kodna točka osim dvostrukih navodnika

  DoubleQuoteEscapeSequence:
    ""

Identifikatori

Identifikator je naziv koji se koristi za upućivanje na vrijednost. Identifikatori mogu biti uobičajeni identifikatori ili identifikatori s jednostrukim navodnicima.

  Identifikator:
    IdentifierName, aline ioperatoriliContextKeyword

  IdentifierName:
    IdentifierStartCharacterIdentifierContinueCharactersopt
    'SingleQuotedIdentifier'

  IdentifierStartCharacter:
    SlovoZnak
    _

  IdentifierContinueCharacter:
    IdentifierStartCharacter
    Decimalni_znamenkasti znak
    Povezujući lik
    KombiniranjeLik
    FormattingCharacter

  IdentifierContinueCharacters:
    IdentifierContinueCharacterIdentifierContinueCharactersopt

  SlovoZnak:
    bilo koji Unicode znak klase Veliko slovo (Lu) ili Malo slovo (Ll)
    bilo koji Unicode znak klase Slovo naslova (Lt)
    bilo koji Unicode znak klase Modifikator slova (Lm) ili Drugo slovo (Lo)
    bilo koji Unicode znak klase Slovo broja (Nl)

  Kombinirani lik:
    bilo koji Unicode znak klase Oznaka bez razmaka (Mn) ili Oznaka s kombinacijom razmaka (Mc)

  DecimalDigitCharacter:
    bilo koji Unicode znak klase Decimalni brojevi (Nd)

  Povezujući lik:
    bilo koji Unicode znak klase Interpunkcija poveznika (Pc)

  FormattingCharacter:
    bilo koji Unicode znak klase Format (Cf)

Identifikatori s jednostrukim navodnicima

Identifikator s jednostrukim navodnicima može sadržavati bilo koji slijed Unicode znakova koji će se koristiti kao identifikator, uključujući ključne riječi, razmake, komentare i operatore. Znakovi s jednostrukim navodnicima podržani su s izlaznim slijedom od dva jednostruka navodnika.

  SingleQuotedIdentifier:
    SingleQuotedIdentifierCharacters

  SingleQuotedIdentifierCharacters:
    SingleQuotedIdentifierCharacterSingleQuotedIdentifierCharactersopt

  SingleQuotedIdentifierCharacter:
    TekstZnakoviNePojedinačniCitat
    SingleQuoteEscapeSequence

  TextCharactersNoSingleCitat:
    bilo koji Unicode znak osim ' (U+0027)

  SingleQuoteEscapeSequence:
    ''

Višeznačni identifikator

  Razdvojbeni identifikator:
    Identifikator stupca tablice
    Globalni identifikator

  Identifikator stupca tablice:
    Identifikator identifikatora[@...]

  Globalni identifikator:
    [@Identifikator]

Kontekstne ključne riječi

  KontekstKljučna riječ:
    Parent
    Self
    ThisItem
    ThisRecord

Razlikovanje velikih i malih slova

Identifikatori sustava Power Apps razlikuju velika i mala slova. Alat za autorizaciju automatski će ih promijeniti u ispravan oblik kada se piše formula.

Razdjelnici

  Decimalni separator:
    . (točka) za jezike koji koriste točku kao razdjelnik decimalnih brojeva, na primjer 1.23
    , (zarez) za jezike koji koriste zarez kao razdjelnik za decimalne brojeve, na primjer 1,23

  ListSeparator:
    , (zarez) ako je DecimalSeparator ( . točka)
    ; (točka sa zarezom) ako je DecimalSeparator ( , zarez)

  Lančani separator:
    ; (točka sa zarezom) ako je DecimalSeparator ( . točka)
    ;; (dvostruka točka sa zarezom) ako je DecimalSeparator ( , zarez)

Operatori

Operatori se koriste u formulama za opisivanje operacija koje uključuju jedan ili više operanada. Na primjer, izraz a + b koristi operator + za dodavanje dvaju operanada a i b.

  Operator:
    Binarni operator
    BinaryOperatorRequiresWhitespace
    PrefiksOperator
    PrefixOperatorRequiresWhitespace
    PostfixOperator

  BinaryOperator:jedan od
    =<<=>>=<>
    +-*/^
    &
    &&||
    inexactin

  BinaryOperatorRequiresWhitespace:
    AndRazmak
    OrRazmak

  PrefiksOperator:
    !

  PrefixOperatorRequiresWhitespace:
    NotRazmak

  PostfixOperator:
    %

Referentni operator

  ReferenceOperator: jedan od
    .!

Referenca objekta

  Referenca:
    Osnovna referenca
    BaseReferenceReferenceOperatorReferenceList

  Osnovna referenca:
    Identifikator
    Razdvojbeni identifikator
    KontekstKljučna riječ

  Popis referenci:
    Identifikator
    Referenca identifikatoraReferentnipopis operatora...

Zapis u retku

  InlineRecord:
    {InlineRecordListopt}

  Umetnuti popis zapisa:
    Izraz identifikatora:...
    Izraz:identifikatoraListSeparatorInlineRecordList

Tablica u retku

  Umetnuta tablica:
    [InlineTableListopt]

  Umetnuta tablica:
    Izraz
    Popis izrazaSeparator...InlineTableList

Expression

  Izraz:
    Bukvalan
    Referenca
    Umetnuti zapis
    InlineTable
    FunkcijaPoziv
    (Izraz)
    Izraz PrefixOperator...
    IzrazPostfixOperator
    IzrazBinaryOperatorIzraz

Lančani izrazi

  Lančani izraz:
    Izraz
    IzrazChainingSeparatorChainedExpressionopt

Poziv funkcije

  FunctionCall:
    FunctionIdentifier(FunctionArgumentsopt)

  Identifikator funkcije:
    Identifikator
    Identifikator.FunctionIdentifier

  Argumenti funkcije:
    Ulančani izraz
    ChainedExpressionListSeparatorFunctionArguments