Jaa


Lausekekielioppi

Muistiinpano

Microsoft Power Fx on pohjaan perustuvien sovellusten kaavakielen uusi nimi. Näitä liittyviä artikkeleita päivitetään, koska kieli on poimittu pohjaan perustuvasta sovelluksesta, integroitu toisten Microsoft Power Platform -tuotteiden kanssa ja määritetty käytettäväksi avoimena lähdekoodina. Aloita kielen esittelyn Microsoft Power Fx:n yleiskatsaus.

Microsoft Power Fx perustuu kaavoihin, jotka sitovat nimen lausekkeeseen. Kuten Excel-laskentataulukoissakin, lausekkeen muuttuessa saapuvina riippuvuuksina lauseke lasketaan uudelleen ja nimen arvo muuttuu, mahdollisesti uudelleenlasketun kaavan johdannaisena.

Tämä lauseke koskee kaavan lausekeosaa. Kaavan luominen nimeen sitomalla määräytyy sen mukaan, miten Power Fx on integroitu. Laskentataulukoissa sidontasyntaksi ei ole näkyvissä. Se ilmaistaan sen sijainnin mukaan, jossa lauseke kirjoitetaan, esimerkiksi syöttämällä A1-soluun =B1. Joissakin tapauksissa sidontaa ei tarvita lainkaan ja Power Fx:ää käytetään lausekkeen laskemistoimintoa. Näin tapahtuu esimerkiksi tuettaessa tietokantataulukon laskennallisia sarakkeita. Power Appsin sidonta ilmaistaan, kun käytetään Power Apps Studiota YAML:aan perustuvan sarjoitusmuodon kanssa Power Apps Studion ulkopuolista käyttöä varten.

Kielioppikäytänteet

Sanastolliset ja syntaktiset kieliopit on esitelty kielioppituotantojen avulla. Kukin kielioppituotanto määrittää muun kuin päätesymbolin ja kyseisen muun kuin päätesymbolin mahdolliset laajennukset pääte- tai muihin kuin päätesymboleihin. Kielioppituotantojen muut kuin päätesymbolit näkyvät kursivoituina, ja päätesymbolit näytetään kiinteällä fontin leveydellä.

Kielioppituotannon ensimmäinen rivi on määritettävän muun kuin päätesymbolin nimi, jonka perässä on kaksoispiste. Jokainen peräkkäinen sisennetty rivi sisältää mahdollisen muun kuin päätesymbolin laajennuksen, joka on annettu muun kuin päätesymbolien tai päätesymbolien sarjana. Esimerkiksi tuotanto

  GlobalIdentifier:
    [@Tunniste]

määrittää GlobalIdentifier-tunnuksen, joka sisältää tunnuksen [@, tunnisteen ja tunnuksen ].

Jos muun kuin päätesymbolin laajennukseen on useita vaihtoehtoja, vaihtoehdot luetellaan erillisillä riveillä. Alaindeksiä "opt" käytetään ilmaisemaan valinnainen symboli. Esimerkiksi tuotanto

  FunctionCall:
    FunctionIdentifier(FunctionArgumentsopt)

ilmaisee lyhyesti seuraavan:

  FunctionCall:
    FunctionIdentifier()
    FunctionIdentifier FunctionArguments()

Vaihtoehdot luetellaan yleensä erillisillä riveillä, vaikka tapauksissa, joissa vaihtoehtoja on paljon, ilmaisu "one of" voi edeltää yhdellä rivillä annettua laajennusluetteloa. Tämä on vain lyhenne kunkin vaihtoehdon luetteloinnista erillisille riveille.

Esimerkiksi tuotanto

  Desimaaliluku:yksi seuraavista:
    0123456789

ilmaisee lyhyesti seuraavan:

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

Sanastollinen analyysi

lexical-unit-tuotanto määrittää Power Fx -lausekkeen sanastollisen kieliopin. Kaikki kelvolliset Power Fx -lausekkeet noudattavat tätä kielioppia.

  ExpressionUnit:
    ExpressionElementsopt

  ExpressionElements:
    ExpressionElement
    ExpressionElementExpressionElementsopt

  ExpressionElement:
    Välilyönnit
    Kommentti

Sanastotasolla Power Fx -lauseke sisältää Whitespace-, Comment- ja Token-elementtien virran. Kutakin näistä tuotannoista käsitellään seuraavissa osioissa. Vain tunnus-elementit ovat merkityksellisiä syntaktisessa kieliopissa.

Tyhjä tila

Välilyönnin avulla erotetaan kommentit ja tunnukset Power Apps -asiakirjan sisällä.

  Välilyönnit:
    mikä tahansa Unicode-välilyöntierotin (luokka Zs)
    mikä tahansa Unicode-rivierotin (luokka Zl)
    mikä tahansa Unicode-kappale-erotin (luokka Zp)
    Vaakasuuntainen sarkainmerkki (U+0009)
    Rivinsyöttömerkki (U+000A)
    Pystysuuntainen sarkainmerkki (U+000B)
    Lomakesyöttömerkki (U+000C)
    Rivinvaihtomerkki (U+000D)
    Seuraavan rivin merkki (U+0085)

Kommentit

Tuettuja kommenttimuotoja on kaksi:

  • Yksiriviset kommentit, jotka alkavat merkeillä // ja jatkuvat lähderivin loppuun.
  • Erotellut kommentit, jotka alkavat merkeillä /* ja päättyvät merkkeihin */. Erotellut kommentit voivat ulottua useille riveille.

  Kommentti:
    DelimitedComment
    SingleLineComment

  SingleLineKommentti:
    //SingleLineCommentCharactersvalitse

  SingleLineCommentCharacters:
    SingleLineCommentCharacter
    SingleLineCommentCharacterSingleLineCommentCharactersvalitse

  SingleLineCommentCharacter:
    mikä tahansa Unicode-merkki paitsi NewLineCharacter

  ErotettuKommentti:
    /*DelimitedCommentCharacters-valinta*/

  DelimitedCommentCharacters:
    DelimitedCommentCharactersNoAsteriskDelimitedCommentCharactersvalitse
    *DelimitedCommentAfterAsteriskCharacters

  DelimitedCommentAfterAsteriskCharacters:
    DelimitedCommentNoSlashAsteriskCharacterDelimitedCommentCharactersvalitse
    *DelimitedCommentAfterAsteriskCharacters

  DelimitedCommentCharactersNoAsterisk:
    mikä tahansa Unicode-merkki paitsi * (tähti)

  DelimitedCommentNoSlashAsteriskCharacter:
    mikä tahansa Unicode-merkki paitsi / (vinoviiva) tai * (tähti)

Kommentit eivät ole sisäkkäisiä. Peräkkäisillä merkeillä /* ja */ ei ole mitään erityistä merkitystä single-line-comment-arvon sisällä eikä peräkkäisillä merkeillä // ja /* ole mitään erityistä merkitystä erotinmerkeillä erotellun kommentin sisällä.

Tekstiliteraalimerkkijonot eivät käsittele kommentteja.

Seuraavassa esimerkissä on kaksi eroteltua kommenttia:

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

Seuraavissa esimerkeissä on kolme yksirivistä kommenttia:

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

Literaalit

Literaali on arvon lähdekoodi-ilmaisu.

  Kirjaimellinen:
    LooginenKirjaimellinen
    Lukuliteraali
    TextLiteral

Loogiset literaalit

Loogisen literaalin avulla kirjoitetaan arvot tosi ja epätosi ja tuotetaan looginen arvo.

  LooginenLiteral:yksi
    truefalse

Lukuliteraalit

Lukuliteraalia käytetään kirjoittamaan numeroarvo ja tuottamaan lukuarvo.

  Lukuliteraali:
    DecimalDigitsExponentPartopt
    DecimalDigitsDecimalSeparatorDecimalDigitsvalitseExponentPartopt
    DesimaalierotinDecimalDigitsExponentPartopt

  Desimaaliluvut:
    Desimaaliluku
    DesimaaliluvutDecimalDigit

  Desimaaliluku:yksi seuraavista:
    0123456789

  Eksponenttiosa:
    ExponentIndicatorSignopt DecimalDigits...

  EksponenttiIndikaattori:yksi seuraavista:
    eE

  Merkki:yksi
    +-

Tekstiliteraalit

Tekstiliteraalia käytetään kirjoittamaan sarja Unicode-merkkejä ja tuottamaan tekstiarvo. Tekstiliteraalit ovat lainausmerkkien sisällä. Jos haluat lisätä lainausmerkkejä tekstiarvoon, toista lainausmerkit seuraavassa esimerkissä esitetyllä tavalla:

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

  TextLiteral:
    "TextLiteralCharactersvalitse"

  TextLiteralCharacters:
    TextLiteralCharacterTextLiteralCharactersvalitse

  TextLiteralCharacter:
    TextCharacterNoDoubleQuote
    DoubleQuoteEscapeSequence

  TextCharacterNoDoubleQuote:
    mikä tahansa muu Unicode-koodipiste kuin lainausmerkki

  DoubleQuoteEscapeSequence:
    ""

Tunnisteet

Tunniste on nimi, jolla viitataan arvoon. Tunnisteet voivat olla joko säännönmukaisia tunnisteita tai heittomerkeihin sijoitettuja tunnisteita.

  Tunniste:
    IdentifierNamemuttaeiOperatortaiContextKeyword

  Tunnisteen nimi:
    IdentifierStartCharacterIdentifierContinueCharactersopt
    'SingleQuotedIdentifier'

  IdentifierStartCharacter:
    LetterCharacter
    _

  IdentifierContinueCharacter:
    IdentifierStartCharacter
    DecimalDigitCharacter
    Yhdistävä merkki
    YhdistäminenMerkki
    FormattingCharacter

  IdentifierContinueCharacters:
    IdentifierContinueCharacterIdentifierContinueCharactersvalitse

  LetterCharacter:
    mikä tahansa Unicode-merkki, jonka luokka on Isot kirjaimet (Lu) tai Pienet kirjaimet (Ll)
    mikä tahansa Unicode-merkki, jonka luokka on Otsikon kirjaimet ( Lt)
    mikä tahansa Unicode-merkki, jonka luokka on Kirjaimen määrite (Lm) tai Muu kirjain (Lo)
    mikä tahansa Unicode-merkki, jonka luokka on Numero (Nl)

  CombiningCharacter:
    mikä tahansa Unicode-merkki, jonka luokka on Muu kuin välistyksen merkki (Mn) tai Välistyksen yhdistävä merkki (Mc)

  DecimalDigitCharacter:
    mikä tahansa Unicode-merkki, jonka luokka on Desimaaliluku (Nd)

  Yhdistävä merkki:
    mikä tahansa Unicode-merkki, jonka luokka on Yhdistinvälimerkki (Pc)

  FormattingCharacter:
    mikä tahansa Unicode-merkki, jonka luokka on Muoto (Cf)

Heittomerkeissä olevat tunnisteet

Yksinkertaisissa lainausmerkeissä oleva tunniste voi sisältää minkä tahansa Unicode-merkin, jota käytetään tunnisteena, mukaan lukien avainsanat, välilyönti, kommentit ja operaattorit. Yksinkertaisen lainausmerkin merkkejä tuetaan kahden yhden lainausmerkin ohjausmerkkisarjalla.

  SingleQuotedIdentifier:
    SingleQuotedIdentifierCharacters

  SingleQuotedIdentifierCharacters:
    SingleQuotedIdentifierCharacterSingleQuotedIdentifierCharactersvalitse

  SingleQuotedIdentifierCharacter:
    TextCharactersNoSingleQuote
    SingleQuoteEscapeSequence

  TextCharactersNoSingleQuote:
    Mikä tahansa Unicode-merkki paitsi ' (U+0027)

  SingleQuoteEscapeSequence:
    ''

Yksiselitteinen tunniste

  DisambiguatedIdentifier:
    TableColumnIdentifier
    GlobalIdentifier

  TableColumnIdentifier:
    Tunnisteen[@tunniste]

  GlobalIdentifier:
    [@Tunniste]

Kontekstin avainsanat

  KontekstiAvainsana:
    Parent
    Self
    ThisItem
    ThisRecord

Kirjainkoon merkitsevyys

Power Apps-tunneissa kirjainkoko on merkitsevä. Luontityökalu muuttaa ne automaattisesti oikeaan kirjainkokoon kaavan kirjoittamisen jälkeen.

Erottimet

  Desimaalierotin:
    . (piste) kielille, jotka käyttävät pistettä desimaalilukujen erottimena, esimerkiksi: 1.23
    , (pilkku) kielet, joissa käytetään pilkkua desimaalilukujen erottimena, esimerkiksi: 1,23

  ListSeparator:
    , (pilkku), jos desimaalierotin on . (piste)
    ; (puolipiste), jos desimaalierotin on , (pilkku)

  KetjutusErotin:
    ; (puolipiste), jos desimaalierotin on . (piste)
    ;; (kaksinkertainen puolipiste), jos desimaalierotin on , (pilkku)

Operaattorit

Operaattoreita käytetään kaavoissa kuvaamaan toimintoja, joissa on vähintään yksi operandi. Esimerkiksi lauseke a + b käyttää +-operaattoria kahden operandin a ja blisäämiseen.

  Operaattori:
    BinaryOperator
    BinaryOperatorRequiresVälilyönti
    PrefixOperator
    PrefixOperatorRequiresVälilyönti
    PostfixOperator

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

  BinaryOperatorRequiresVälilyönti:
    AndVälilyönnit
    OrVälilyönnit

  PrefixOperator:
    !

  PrefixOperatorRequiresVälilyönti:
    NotVälilyönnit

  PostfixOperator:
    %

Viittausoperaattori

  ReferenceOperator:yksi seuraavista:
    .!

Objektiviittaus

  Viittaus:
    BaseReference
    BaseReferenceReferenceOperator ReferenceList...

  BaseReference:
    Tunniste
    DisambiguatedIdentifier
    KontekstiAvainsana

  Viiteluettelo:
    Tunniste
    IdentifierReferenceOperator ReferenceList...

Tekstiin sidottu tietue

  InlineRecord:
    {InlineRecordListopt}

  InlineRecordList:
    Tunnisteen:lauseke
    TunnistelausekeluetteloSeparaattori:......InlineRecordList

Tekstiin sidottu taulukko

  InlineTable:
    [InlineTableListopt]

  InlineTableList:
    Lauseke
    Lausekeluetteloerotin...InlineTableList

Expression

  Lauseke:
    Kirjaimellinen
    Viittaus
    InlineRecord
    Tekstiin sidottu taulukko
    FunctionCall
    (Lauseke)
    PrefixOperator-lauseke...
    LausekePostfixOperator
    LausekeBinaryOperator-lauseke...

Ketjutetut lausekkeet

  ChainedExpression:
    Lauseke
    LausekkeenketjutusErotinChainedExpressionopt

Funktiokutsu

  FunctionCall:
    FunctionIdentifier(FunctionArgumentsopt)

  FunctionIdentifier:
    Tunniste
    Identifier.FunctionIdentifier

  Funktion argumentit:
    ChainedExpression
    ChainedExpressionListSeparatorFunctionArguments