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
0
1
2
3
4
5
6
7
8
9
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
true
false
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
0
1
2
3
4
5
6
7
8
9
EksponentPart:
EkponentIndicatorZnakoptDecimalDigits
EksponentIndicator: jedan od
e
E
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
=
<
<=
>
>=
<>
+
-
*
/
^
&
&&
||
in
exactin
BinaryOperatorRequiresWhitespace:
And
Razmake
Or
Razmake
PrefikOperatorRequiresBeospace:
Not
Razmake
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