Avaldise grammatika

Märkus

Microsoft Power Fx on lõuendirakenduste valemikeele uus nimi. Need artiklid on pooleli töö, kuna ekstraktime keele lõuendirakendustest, integreerime selle teiste Microsoft Power Platform toodetega ja teeme selle kättesaadavaks avatud allikana. Alustage Microsoft Power Fx ülevaatega sissejuhatuseks keelde.

Microsoft Power Fx põhineb valemitel, mis lisavad avaldisele nime. Nagu Ka Exceli töölehed, muutub ka avaldise sissetulev sõltuvus, nii et väljend arvutatakse ümber ja nime väärtus muutub, võib-olla kaskadeeritakse ümberarvutamine teistesse valemitesse.

See grammatika hõlmab valemi avaldise osa. Nime sidumine valemi loomiseks sõltub sellest, kuidas Power Fx on integreeritud. Töölehel ei näitata süntaksit, vaid asukohast, kus avaldis on kirjutatud—näiteks sisestada =B1 A1-lahtrisse. Mõnel juhul pole sidumist üldse vaja ja Power Fx-i kasutatakse avaldise hindajana, näiteks andmebaasitabeli arvutatud veergude toetamisel. Rakenduse Power Appsi puhul eeldatakse vaikimisi sidumist, et töötatakse Power Apps Studio koos serialiseerimisvormingus YAMLi kasutamiseks väljapool Power Apps Studio.

Grammatikareeglid

Leksikaalsed ja süntaktilised grammatikad esitatakse grammatikaprogrammide abil. Iga grammatikareegel määratleb mitteterminaalse sümboli ja selle mitteterminaalse sümboli võimalikud laiendused mitteterminaalsete või terminaalsete sümbolite järjestustesse. Grammatikareeglites kuvatakse mitteterminaalsed sümbolid kursiivkirjas ja terminaalsed sümbolid fikseeritud laiusega fondis.

Grammatikareegli esimene rida on määratletava mitteterminaalse sümboli nimi, millele järgneb koolon. Iga järjestikune taandatud rida sisaldab mitteterminaalse sümboli võimalikku laiendamist, mis on antud mitteterminaalsete või terminaliliste sümbolite jadana. Näiteks reegel:

  GlobalIdentifier :
    [@identifikaator]

määratleb Globaalidentifikaatorit, mis koosneb sõnest [@, millele järgneb identifikaator, millele omakorda järgneb sõne ].

Kui mitteterminaalse sümboli laiendamiseks on rohkem kui üks võimalus, on alternatiivid loetletud eraldi ridadel. Valikuliste sümbolite tähistamiseks kasutatakse alamskripti "opt". Näiteks reegel:

  FunctionCall :
    FunctionIdentifier(FunctionArgumentsopt)

on lühendatud versioon järgmisest:

  FunctionCall :
    FunctionIdentifier()
    Funktsionaalindifikaator(funktsiooniargumendid)

Alternatiivid lisatakse tavaliselt eraldi ridadele, ehkki juhtudel, kui on palju alternatiive, võib fraas "üks" eelistada ühel real toodud laienduste loendit. See on lihtsalt lühidalt, kui soovite iga alternatiivi eraldi ridadeks loetleda.

Näiteks reegel:

  DecimalDigit : one of
    0123456789

on lühendatud versioon järgmisest:

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

Leksikaalne analüüs

Leksikaalse ühiku reegel määratleb Power Fx-i avaldise leksika. Kõik kehtivad Power Fx-i avaldised vastavad sellele.

  ExpressionUnit :
    ExpressionElementsopt

  ExpressionElements :
    ExpressionElement
    ExpressionElementExpressionElementsopt

  ExpressionElement :
    Tühi ruum
    Kommenteeri

Leksikaalsel tasandil koosneb Power Fx-i avaldis elementidest tühik, kommentaar ja sõne. Kõik need reeglid kehtivad järgmiste jaotiste korral. Süntaksi korral on olulised ainult sõne elemendid.

Tühi ruum

Tühikut kasutatakse kommentaaride ja märkide eraldamiseks Power Appsi dokumendis.

  Tühik :
    mis tahes Unicode'i tühikeraldaja (klass Zs)
    mis tahes Unicode'i jooneraldaja (klass ZI)
    mis tahes Unicode'i lõigueraldaja (klass Zp)
    Horisontaalne tabeldusmärk (U+0009)
    Reavahetusmärk (U+000A)
    Vertikaalne tabeldusmärk (U+000B)
    Lehevahetusmärk (U+000C)
    Tagasijooksumärk (U+000D)
    Järgmine reavahetusmärk (U+0085)

Kommentaarid

Toetatakse kahte kommentaarivormi.

  • Üherealised kommentaarid, mis algavad märkidega // ja pole pikemad kui allikarida.
  • Eraldatud kommentaarid, mis algavad märkidega /* ja lõpevad märkidega */. Eraldajatega kommentaarid võivad hõlmata mitut rida.

  Kommentaar :
    DelimitedComment
    SingleLineComment

  SingleLineComment :
    //SingleLineCommentCharactersopt

  SingleLineCommentCharacters :
    SingleLineCommentCharacter
    SingleLineCommentCharacterSingleLineCommentCharactersopt

  SingleLineCommentCharacter :
    mis tahes Unicode'i märgid, v.a NewLineCharacter

  DelimitedComment :
    /*DelimitedCommentCharactersopt*/

  DelimitedCommentCharacters :
    DelimitedCommentCharactersNoAsteriskDelimitedCommentCharactersopt
    *DelimitedCommentAfterAsteriskCharacters

  DelimitedCommentAfterAsteriskCharacters :
    DelimitedCommentNoSlashAsteriskCharacterDelimitedCommentCharactersopt
    *DelimitedCommentAfterAsteriskCharacters

  DelimitedCommentCharactersNoAsterisk :
    mis tahes Unicode'i märk, v.a * (tärn)

  DelimitedCommentNoSlashAsteriskCharacter :
    mis tahes Unicode'i märk, v.a / (kaldkriips) või * (tärn)

Kommentaare ei pesastata. Märgijadadel /* ja */ pole üherealises kommentaaris erilist tähendust ning märgijadadel // ja /* ei ole eraldatud kommentaaris erilist tähendust.

Kommentaare ei töödelda tekstiliteraalide stringides.

Järgmine näide sisaldab kahte eraldatud kommentaari.

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

Järgmised näited sisaldavad kolme üherealist kommentaari.

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

Literaalid

Literaal on väärtuse esitus lähtekoodina.

  Literaal :
    LogicalLiteral
    NumberLiteral
    TextLiteral

Loogilised literaalid

Loogikaliteraali abil kirjutatakse väärtused tõesed ja väärad ning need annavad loogikaväärtuse.

  LogicalLiteral : one of
    truefalse

Arvliteraal

Numbriliteraali kirjutamiseks ja numbriväärtuse kirjutamiseks ja arvuväärtuse toomiseks.

  NumberLiteral :
    DecimalDigitsExponentPartopt
    DecimalDigitsDecimalSeparatorDecimalDigitsoptExponentPartopt
    DecimalSeparatorDecimalDigitsExponentPartopt

  DecimalDigits :
    DecimalDigit
    DecimalDigitsDecimalDigit

  DecimalDigit : one of
    0123456789

  ExponentPart :
    ExponentIndicatorSignoptDecimalDigits

  ExponentIndicator : one of
    eE

  Märk : one of
    +-

Tekstliteraalid

Tekstiliteraalid kasutatakse Unicode'i märkide jada kirjutamiseks ning tekstiväärtuse andmiseks. Tekstiliteraalid on lisasõnad kahekordsetes jutumärkides. Kahekordsete jutumärkide kaasamiseks tekstiväärtusse korrake kahekordseid jutumärke, nagu on näidatud järgmises näites:

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

  TextLiteral :
    "TextLiteralCharactersopt"

  TextLiteralCharacters :
    TextLiteralCharacterTextLiteralCharactersopt

  TextLiteralCharacter :
    TextCharacterNoDoubleQuote
    DoubleQuoteEscapeSequence

  TextCharacterNoDoubleQuote :
    mis tahes Unicode'i koodipunkt, v.a kahekordsed jutumärgid

  DoubleQuoteEscapeSequence :
    ""

Identifikaatorid

Identifikaator on nimi, mida kasutatakse väärtusele viitamiseks. Identifikaatorid võivad olla kas tavalised identifikaatorid või üksikjutumärkidega ümbritsetud identifikaatorid.

  Identifikaator :
    IdentifierName kuid mitte Tehtemärk või ContextKeyword

  IdentifierName :
    IdentifierStartCharacterIdentifierContinueCharactersopt
    'SingleQuotedIdentifier'

  IdentifierStartCharacter :
    LetterCharacter
    _

  IdentifierContinueCharacter :
    IdentifierStartCharacter
    DecimalDigitCharacter
    ConnectingCharacter
    CombiningCharacter
    FormattingCharacter

  IdentifierContinueCharacters :
    IdentifierContinueCharacterIdentifierContinueCharactersopt

  LetterCharacter :
    mis tahes Unicode'i märk klassist Suurtäht (Lu) või Väiketäht (LI)
    klassi Unicode märgid Suurtähe (Lt)
    mis tahes klassi märk Tähe muutja (Lm) või Teine täht (Lo)
    mis thes klassi number Numbri märk (NI)

  CombiningCharacter :
    mis tahes klassi märgi Vaheta märk (Mn) või vahede kombineerimismärk (Mc)

  DecimalDigitCharacter :
    mis tahes klassi karakteri Kümnendkoht (Nd)

  ConnectingCharacter :
    mis tahes klassi karakteri Ühendav kirjavahemärk (Pc)

  FormattingCharacter :
    mis tahes klassi karakteri Vorming (Cf)

Üksikjutumärkidega ümbritsetud identifikaatorid

Üks tsiteeritud identifikaator võib sisaldada identifikaatorina mis tahes märksõnu sealgulgas tühikuid, kommentaare ja tehtemärke. Ühekordseid jutumärke toetatakse kahest ühekordsest jutumärgist koosneva järjestusega.

  SingleQuotedIdentifier :
    SingleQuotedIdentifierCharacters

  SingleQuotedIdentifierCharacters :
    SingleQuotedIdentifierCharacterSingleQuotedIdentifierCharactersopt

  SingleQuotedIdentifierCharacter :
    TextCharactersNoSingleQuote
    SingleQuoteEscapeSequence

  TextCharactersNoSingleQuote :
    mis tahes Unicode'i märk, v.a ' (U+0027)

  SingleQuoteEscapeSequence :
    ''

Ühestamise identifikaator

  DisambiguatedIdentifier:
    TableColumnIdentifier
    GlobalIdentifier

  TableColumnIdentifier :
    Identifikaator[@Identifikaator]

  GlobalIdentifier:
    [@Identifikaator]

Kontekstimärksõnad

  ContextKeyword:
    Parent
    Self
    ThisItem
    ThisRecord

Tõstutundlikkus

Power Appsi identifikaatorid on tõstutundlikud. Autorite loomise tööriist muudab need valemi kirjutatud ajal automaatselt õigeks.

Eraldajad

  DecimalSeparator:
    . (dot) keelte puhul, mille puhul kasutatakse kümnendkohtade eraldajana punkti, näiteks 1.23
    , (koma) keele korral, mis kasutab koma komakohtade eraldajana, näiteks 1,23

  ListSeparator:
    , (koma) kui DecimalSeparator on . (punkt)
    ; (semikoolon) kui DecimalSeparator on , (koma)

  ChainingSeparator:
    ; (semikoolon) kui DecimalSeparator on . (dot)
    ;; (topelt semikoolon) kui DecimalSeparator on , (koma)

Tehtemärgid

Tehtemärke kasutatakse valemites ühe või mitme operandiga seotud toimingute kirjeldamiseks. Näiteks kasutab avaldis a + b tehtemärki + kahe operandi a ja b lisamiseks.

  Tehtemärk:
    BinaryOperator
    BinaryOperatorRequiresWhitespace
    PrefixOperator
    PrefixOperatorRequiresWhitespace
    PostfixOperator

  BinaryOperator: one of
    =<<=>>=<>
    +-*/^
    &
    &&||
    inexactin

  BinaryOperatorRequiresWhitespace:
    AndTühi ruum
    OrTühi ruum

  PrefixOperator:
    !

  PrefixOperatorRequiresWhitespace:
    NotTühi ruum

  PostfixOperator:
    %

Viite tehtemärk

  ReferenceOperator: one of
    .!

Objekti viide

  Viide:
    BaseReference
    BaseReferenceReferenceOperatorReferenceList

  BaseReference:
    Identifikaator
    DisambiguatedIdentifier
    ContextKeyword

  ReferenceList:
    Identifikaator
    IdentifikaatorReferenceOperatorReferenceList

Tekstisisene kirje

  InlineRecord:
    {InlineRecordListopt}

  InlineRecordList:
    Identifikaator:Avaldis
    Identifikaator:AvaldisListSeparatorInlineRecordList

Tekstisisene tabel

  InlineTable:
    [InlineTableListopt]

  InlineTableList:
    Avaldis
    AvaldisListSeparatorInlineTableList

Avaldis

  Avaldis:
    Literaal
    Viide
    InlineRecord
    InlineTable
    FunctionCall
    (Avaldis)
    PrefixOperatorAvaldis
    AvaldisPostfixOperator
    AvaldisBinaryOperatorAvaldis

Ahelavaldised

  ChainedExpression:
    Avaldis
    AvaldisChainingSeparatorChainedExpressionopt

Funktsioonikutse

  FunctionCall:
    FunctionIdentifier(FunctionArgumentsopt)

  FunctionIdentifier:
    Identifikaator
    Identifikaator.FunctionIdentifier

  FunctionArguments:
    ChainedExpression
    ChainedExpressionListSeparatorFunctionArguments