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:
     And Välilyönnit
     Or Välilyönnit

   PrefixOperator:
    !

   PrefixOperatorRequiresVälilyönti:
     Not Vä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