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:

  GlobalIdentifier:
    [@Identifier]

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:
    FunctionIdentifier()
    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:

  DecimalDigit:
    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:
    ExpressionElement
    ExpressionElementExpressionElementsopt

  ExpressionElement:
    Whitespace
    Comment

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.

  Whitespace:
    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.

  Comment:
    DelimitedComment
    SingleLineComment

  SingleLineComment:
    //SingleLineCommentCharactersopt

  SingleLineCommentCharacters:
    SingleLineCommentCharacter
    SingleLineCommentCharacterSingleLineCommentCharactersopt

  SingleLineCommentCharacter:
    bilo koji Unicode znakovi osim NewLineCharacter

  DelimitedComment:
    /*DelimitedCommentCharactersopt*/

  DelimitedCommentCharacters:
    DelimitedCommentCharactersNoAsteriskDelimitedCommentCharactersopt
    *DelimitedCommentAfterAsteriskCharacters

  DelimitedCommentAfterAsteriskCharacters:
    DelimitedCommentNoSlashAsteriskCharacterDelimitedCommentCharactersopt
    *DelimitedCommentAfterAsteriskCharacters

  DelimitedCommentCharactersNoAsterisk:
    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.

  Literal:
    LogicalLiteral
    NumberLiteral
    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.

  NumberLiteral:
    DecimalDigitsExponentPartopt
    DecimalDigitsDecimalSeparatorDecimalDigitsoptExponentPartopt
    DecimalSeparatorDecimalDigitsExponentPartopt

  DecimalDigits:
    DecimalDigit
    DecimalDigitsDecimalDigit

  DecimalDigit:jedan od
    0123456789

  ExponentPart:
    ExponentIndicatorSignoptDecimalDigits

  ExponentIndicator:jedan od
    eE

  Sign: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:
    "TextLiteralCharactersopt"

  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.

  Identifier:
    IdentifierNamebutnotOperatororContextKeyword

  IdentifierName:
    IdentifierStartCharacterIdentifierContinueCharactersopt
    'SingleQuotedIdentifier'

  IdentifierStartCharacter:
    LetterCharacter
    _

  IdentifierContinueCharacter:
    IdentifierStartCharacter
    DecimalDigitCharacter
    ConnectingCharacter
    CombiningCharacter
    FormattingCharacter

  IdentifierContinueCharacters:
    IdentifierContinueCharacterIdentifierContinueCharactersopt

  LetterCharacter:
    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)

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

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

  ConnectingCharacter:
    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:
    TextCharactersNoSingleQuote
    SingleQuoteEscapeSequence

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

  SingleQuoteEscapeSequence:
    ''

Višeznačni identifikator

  DisambiguatedIdentifier:
    TableColumnIdentifier
    GlobalIdentifier

  TableColumnIdentifier:
    Identifier[@Identifier]

  GlobalIdentifier:
    [@Identifier]

Kontekstne ključne riječi

  ContextKeyword:
    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

  DecimalSeparator:
    . (točka) za jezike koji koriste točku kao odvajač za decimalne brojeve, 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)

  ChainingSeparator:
    ; (točka sa zarezom) ako je DecimalSeparator. (točka)
    ;; (dvostruka točka sa zarezom) ako je DecimalSeparator is , (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:
    BinaryOperator
    BinaryOperatorRequiresWhitespace
    PrefixOperator
    PrefixOperatorRequiresWhitespace
    PostfixOperator

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

  BinaryOperatorRequiresWhitespace:
    AndWhitespace
    OrWhitespace

  PrefixOperator:
    !

  PrefixOperatorRequiresWhitespace:
    NotWhitespace

  PostfixOperator:
    %

Referentni operator

  ReferenceOperator:jedan od
    .!

Referenca objekta

  Reference:
    BaseReference
    BaseReferenceReferenceOperatorReferenceList

  BaseReference:
    Identifier
    DisambiguatedIdentifier
    ContextKeyword

  ReferenceList:
    Identifier
    IdentifierReferenceOperatorReferenceList

Zapis u retku

  InlineRecord:
    {InlineRecordListopt}

  InlineRecordList:
    Identifier:Expression
    Identifier:ExpressionListSeparatorInlineRecordList

Tablica u retku

  InlineTable:
    [InlineTableListopt]

  InlineTableList:
    Expression
    ExpressionListSeparatorInlineTableList

Expression

  Expression:
    Literal
    Reference
    InlineRecord
    InlineTable
    FunctionCall
    (Expression)
    PrefixOperatorExpression
    ExpressionPostfixOperator
    ExpressionBinaryOperatorExpression

Lančani izrazi

  ChainedExpression:
    Expression
    ExpressionChainingSeparatorChainedExpressionopt

Poziv funkcije

  FunctionCall:
    FunctionIdentifier(FunctionArgumentsopt)

  FunctionIdentifier:
    Identifier
    Identifier.FunctionIdentifier

  FunctionArguments:
    ChainedExpression
    ChainedExpressionListSeparatorFunctionArguments