Gramatika izraza

Belešku

Microsoft Power Fx je novo ime za jezik formula za aplikacije sa podlogom. Ovi članci su u izradi dok izdvajamo jezik iz aplikacija na platnu, integrišemo ga sa drugim Microsoft Power Platform proizvodima i činimo ga dostupnim u vidu otvorenog koda. Počnite sa Microsoft Power Fx pregledom za uvod u jezik.

Microsoft Power Fx zasniva se na formulama koje vezuju ime za izraz. Baš kao u Excel radnim listovima, kako se dolazne zavisnosti od izraza menjaju, izraz se preračunava i vrednost imena se menja, moguće preračunavanje u druge formule.

Ova gramatika pokriva deo izraza formule. Povezivanje sa nazivom radi kreiranja formule zavisi od načina integracije jezika Power Fx. U radnim listovima sintaksa povezivanja nije izložena, podrazumeva se lokacijom na kojoj je izraz napisan – na primer unos =B1 u ćeliju A1. U nekim slučajevima, uopšte nije potrebno povezivanje i Power Fx se koristi kao procenjivač izraza, na primer u podršci izračunatih kolona tabele baze podataka. Za Power Apps, povezivanje se podrazumeva pri radu u usluzi Power Apps Studio sa formatom serializacije zasnovanom na YAML za upotrebu van usluge Power Apps Studio.

Gramatičke konvencije

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

Prva linija gramatičke produkcije je ime neterminalnog simbola koji se definiše, a iza njega stoji dvotačka. Svaka uzastopna uvučena linija sadrži moguće proširenje neterminalnog simbola datog kao niz neterminalnih ili terminalnih simbola. Na primer, produkcija:

   GlobalIdentifikator:
     [@ Identifikator]

definiše da se GlobalIdentifier sastoji od tokena [@ praćenog znakom Identifier, nakon čega sledi token ].

Kada postoji više od jednog mogućeg proširenja neterminalnog simbola, alternative su navedene u zasebnim redovima. Indeks „opt“ se koristi za označavanje opcionalnog simbola. Na primer, produkcija:

   FunctionCall:
     FunctionIdentifier(FunctionArgumentsopt)

je skraćenica za:

   FunctionCall:
     FunkcijaIdentifikator()
     FunctionIdentifier(FunctionArguments)

Alternative su obično navedene u odvojenim redovima, mada u slučajevima kada postoji mnogo alternativa, fraza „jedan od“ može prethoditi listi proširenja datih u jednom redu. Ovo je jednostavno skraćenica za navođenje svake od alternativa u odvojenim redovima.

Na primer, produkcija:

   DecimalDigit: jedan od
    0123456789

je skraćenica za:

   DecimalDigit:
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9

Leksička analiza

Produkcija leksičke jedinice definiše leksičku gramatiku za Power Fx izraz. Svaki važeći Power Fx izraz je u skladu sa ovom gramatikom.

   EkpressionUnit:
     EkpressiElementsopt

   EkpressionElements:
     Ekshibicionist
     IzrazElementIzraziElementiopt

   EkpressionElement:
     Razmake
     Komentar

Na leksičkom nivou, Power Fx izraz se sastoji od toka elemenata Whitespace, Comment i Token. Svaka od ovih produkcija obrađena je u sledećim odeljcima. Samo Token elementi su značajni u sintaksičkoj gramatici.

Belina

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

   Razmak:
    bilo koji Unikod separator prostora (klasa Zs)
    bilo koji Unikod separator reda (klasa Zl)
    bilo koji Unikod separator pasusa (klasa Zp)
    Znak za horizontalnu tabulaciju (U+0009)
    Znak za kraj reda (U+000A)
    Znak za vertikalnu tabulaciju (U+000B)
    Znak za kraj pasusa (U+000C)
    Znak za prelazak u novi red (U+000D)
    Znak za sledeći red (U+0085)

Komentari

Podržana su dva oblika komentara:

  • Komentari u jednom redu koji počinju znakovima // i protežu se do kraja izvorne linije.
  • Razgraničeni komentari koji počinju sa znakovima /* a završavaju se znakovima */. Razgraničeni komentari mogu da se protežu u više redova.

   Napomena:
     RazdvojenKomentar
     SingleLineKomentar

   SingleLineComment:
     // SingleLineCommentCharactersopt

   SingleLineCommentCharacters:
     SingleLineCommentCharacter
     SingleLineCommentCharacterSingleLineCommentCharactersopt

   SingleLineCommentCharacter:
    bilo koji Unikod znak osim NewLineCharacter

   DelimitedComment:
     /* DelimitedCommentCharactersopt*/

   DelimitedCommentCharacters:
     RazdvojenKomentarLikiNeZvezdicaRazdvojenaKomentarKarakterise odlučuju
     * DelimitedCommentAfterAsteriskCharacters

   DelimitedCommentAfterAsteriskCharacters:
     DelimitedCommentNeSlashZvezdicaKarakterRazgraničenKomentarKarakterise odlučuju
     * DelimitedCommentAfterAsteriskCharacters

   DelimitedCommentCharactersNoAsterisk:
    bilo koji Unikod znak osim * (zvezdica)

   DelimitedCommentNoSlashAsteriskCharacter:
    bilo koji Unikod znak osim / (kosa crta) ili * (zvezdica)

Komentari nisu ugnežđeni. Sekvence znakova /* i */ nemaju posebno značenje unutar komentara u jednom redu, a sekvence znakova // i /* nemaju posebno značenje unutar razgraničenog komentara.

Komentari se ne obrađuju unutar niski tekst-literal.

Sledeći primer uključuje dva razgraničena komentara:

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

Sledeći primeri uključuju tri komentara u jednom redu:

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

Literali

Literal je predstavljanje izvornog koda neke vrednosti.

   Bukvalno:
     LogičkiBukvalno
     BrojBukvalan
     Srpskohrvatski / srpskohrvatski

Logički literali

Logički literal koristi se za zapisivanje vrednosti tačno i netačno i stvaranje logičke vrednosti.

   LogicalLiteral: jedan od
    truefalse

Numerički literali

Brojčani literal koristi se za pisanje numeričke vrednosti i stvaranje vrednosti broja.

   NumberLiteral:
     DecimalDigitseksponentDeoopt
     DecimalDigitsDecimalSeparatorDecimalDigitsoptExponentPartopt
     DecimalSeparatorDecimalDigitsExponentPartopt

   DecimalDigits:
     DecimalDigit
     DecimalDigitsDecimalDigit

   DecimalDigit: jedan od
    0123456789

   EksponentPart:
     EkponentIndicatorZnakoptDecimalDigits

   EksponentIndicator: jedan od
    eE

   Znak: jedan od
    +-

Tekstualni literali

Tekstualni literal koristi se za pisanje niza Unicode znakova i stvaranje tekstualne vrednosti. Tekstualni literali su zatvoreni u dvostrukim navodnicima. Da biste u tekstualnu vrednost uključili dvostruke navodnike, ponovite dvostruke navodnike, kao što je prikazano u sledećem primeru:

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

   TextLiteral:
     " TektLiteralCharactersopt"

   TextLiteralCharacters:
     TextLiteralCharacterTextLiteralCharactersopt

   TextLiteralCharacter:
     TextCharacterNoDoubleQuote
     DoubleQuoteEscapeSequence

   TextCharacterNoDoubleQuote:
    bilo koja Unikod kodna tačka, osim dvostrukih navodnika

   DoubleQuoteEscapeSequence:
    ""

Identifikatori

Identifikator je naziv koji se koristi za upućivanje na vrednost. Identifikatori mogu biti regularni identifikatori ili identifikatori sa jednostrukim navodnicima.

   Identifikator:
     IdentifierNamealine ioperatoriliContextKeyword

   IdentifierName:
     IdentifierStartCharacterIdentifierContinueCharactersopt
     ' Srpskohrvatski / srpskohrvatski'

   IdentifierStartCharacter:
     LetterCharacter
    _

   IdentifierContinueCharacter:
     IdentifierStartCharacter
     DecimalDigitCharacter
     Povezivanje karaktera
     KombinovanjeKarakter
     FormattingCharacter

   IdentifierContinueCharacters:
     IdentifierContinueCharacterIdentifierContinueCharactersopt

   LetterCharacter:
    bilo koji Unikod znak klase veliko slovo (Lu) ili malo slovo (Ll)
    bilo koji Unikod znak klase slovo za naslov (Lt)
    bilo koji Unikod znak klase Modifikator slova (Lm) ili Drugo slovo (Lo)
    bilo koji Unikod znak klase znak za broj (Nl)

   KombinovanjeKarakter:
    bilo koji Unikod znak klase Preklapajući znak (Mn) ili Oznaka kombinovanja razmaka (Mc)

   DecimalDigitCharacter:
    bilo koji Unikod znak klase Decimalna cifra (Nd)

   Povezivanjekarakter:
    bilo koji Unikod znak klase Interpunkcijski konektor (Pc)

   FormattingCharacter:
    bilo koji Unikod znak klase Format (Cf)

Identifikatori sa pojedinačnim navodnicima

Identifikator jednostrukog navodnika može sadržati bilo koji niz Unikod znakova koji će se koristiti kao identifikator, uključujući ključne reči, razmake, komentare i operatore. Znakovi sa jednostrukim navodnicima podržani su u izlaznom nizu od dva pojedinačna navodnika.

   SingleQuotedIdentifier:
     SingleQuotedIdentifierCharacters

   SingleQuotedIdentifierCharacters:
     SingleQuotedIdentifierCharacterSingleQuotedIdentifierCharactersopt

   SingleQuotedIdentifierCharacter:
     TekstLikoviNeSinglCitat
     SingleQuoteEscapeSequence

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

   SingleQuoteEscapeSequence:
    ''

Nejasan identifikator

   DisambiguatedIdentifier:
     TableColumnIdentifier
     GlobalIdentifikator

   TableColumnIdentifier:
     Identifikator Identifikator[@...]

   GlobalIdentifikator:
     [@ Identifikator]

Kontekstne ključne reči

   KontekstKljučna reč:
    Parent
    Self
    ThisItem
    ThisRecord

Razlikovanje velikih i malih slova

Power Apps identifikatori razlikuju velika i mala slova. Alat za kreiranje će ih automatski promeniti u pravilnu veličinu slova kada se piše formula.

Znakovi za razdvajanje

   DecimalSeparator:
     . (tačka) za jezike koji koriste tačku kao separator za decimalne brojeve, na primer 1.23
     , (zarez) za jezike koji koriste zarez kao separator za decimalne brojeve, na primer 1,23

   ListSeparator:
     , (zarez) ako je DecimalSeparator ( . tačka)
     ; (tačka-zarez) ako je DecimalSeparator ( , zarez)

   ChainingSeparator:
     ; (tačka-zarez) ako je DecimalSeparator ( . tačka)
     ;; (dvostruka tačka-zarez) ako je DecimalSeparator ( , zarez)

Operatori

Operatori se koriste u formulama za opisivanje operacija koje uključuju jedan ili više operanada. Na primer, izraz a + b koristi operator + da doda dva operanda a i b.

   Operator:
     Binarni operator
     BinaryOperatorRequiresWhitespace
     PrefiksOperator
     PrefikOperatorRequiresBeospace
     Srpskohrvatski / srpskohrvatski

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

   BinaryOperatorRequiresWhitespace:
     And Razmake
     Or Razmake

   PrefiksOperator:
    !

   PrefikOperatorRequiresBeospace:
     Not Razmake

   PostfikOperator:
    %

Referentni operater

   ReferenceOperator: jedan od
    .!

Referenca objekta

   Referenca:
     BaseReference
     BaseReferenceReferenceOperatorReferenceList

   BaseReference:
     Identifikator
     DisambiguatedIdentifier
     KontekstKljučna reč

   Referentna lista:
     Identifikator
     IdentifikatorReferenceOperatorReferenceList

Ugrađeni zapis

   InlineRecord:
     { InlineRecordListopt}

   InlineRecordList:
     Izraz identifikatora:...
     Identifikator:IzrazListSeparatorInlineRecordList

Ugrađena tabela

   InlineTable:
     [ InlineTableListopt]

   InlineTableList:
     Izraz
     Lista izrazaSeparator...InlineTableList

Expression

   Izraz:
     Doslovno
     Referenca
     InlineRecord
     InlineTable
     FunkcijaPoziv
     ( Izraz)
     PrefikOperatorIzraz
     IzrazPostfikOperator
     IzrazBinarniOperatorIzraz

Ulančani izrazi

   ChainedExpression:
     Izraz
     IzrazChainingSeparatorChainedEkpressionopt

Poziv funkcije

   FunctionCall:
     FunctionIdentifier(FunctionArgumentsopt)

   FunctionIdentifier:
     Identifikator
     Identifikator.FunctionIdentifier

   FunctionArguments:
     ChainedExpression
     ChainedExpressionListSeparatorFunctionArguments