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:
    [@Identifier]

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

  DecimalDigit:one of
    0123456789

ilmaisee lyhyesti seuraavan:

  DecimalDigit:
    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:
    Whitespace
    Comment

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ä.

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

  Comment:
    DelimitedComment
    SingleLineComment

  SingleLineComment:
    //SingleLineCommentCharactersopt

  SingleLineCommentCharacters:
    SingleLineCommentCharacter
    SingleLineCommentCharacterSingleLineCommentCharactersopt

  SingleLineCommentCharacter:
    mikä tahansa Unicode-merkki paitsi NewLineCharacter

  DelimitedComment:
    /*DelimitedCommentCharactersopt*/

  DelimitedCommentCharacters:
    DelimitedCommentCharactersNoAsteriskDelimitedCommentCharactersopt
    *DelimitedCommentAfterAsteriskCharacters

  DelimitedCommentAfterAsteriskCharacters:
    DelimitedCommentNoSlashAsteriskCharacterDelimitedCommentCharactersopt
    *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.

  Literal:
    LogicalLiteral
    NumberLiteral
    TextLiteral

Loogiset literaalit

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

  LogicalLiteral:one of
    truefalse

Lukuliteraalit

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

  NumberLiteral:
    DecimalDigitsExponentPartopt
    DecimalDigitsDecimalSeparatorDecimalDigitsoptExponentPartopt
    DecimalSeparatorDecimalDigitsExponentPartopt

  DecimalDigits:
    DecimalDigit
    DecimalDigitsDecimalDigit

  DecimalDigit:one of
    0123456789

  ExponentPart:
    ExponentIndicatorSignoptDecimalDigits

  ExponentIndicator:one of
    eE

  Sign:one of
    +-

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

  TextLiteralCharacters:
    TextLiteralCharacterTextLiteralCharactersopt

  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.

  Identifier:
    IdentifierNamebutnotOperatororContextKeyword

  IdentifierName:
    IdentifierStartCharacterIdentifierContinueCharactersopt
    'SingleQuotedIdentifier'

  IdentifierStartCharacter:
    LetterCharacter
    _

  IdentifierContinueCharacter:
    IdentifierStartCharacter
    DecimalDigitCharacter
    ConnectingCharacter
    CombiningCharacter
    FormattingCharacter

  IdentifierContinueCharacters:
    IdentifierContinueCharacterIdentifierContinueCharactersopt

  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)

  ConnectingCharacter:
    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:
    SingleQuotedIdentifierCharacterSingleQuotedIdentifierCharactersopt

  SingleQuotedIdentifierCharacter:
    TextCharactersNoSingleQuote
    SingleQuoteEscapeSequence

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

  SingleQuoteEscapeSequence:
    ''

Yksiselitteinen tunniste

  DisambiguatedIdentifier:
    TableColumnIdentifier
    GlobalIdentifier

  TableColumnIdentifier:
    Identifier[@Identifier]

  GlobalIdentifier:
    [@Identifier]

Kontekstin avainsanat

  ContextKeyword:
    Parent
    Self
    ThisItem
    ThisRecord

Kirjainkoon merkitsevyys

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

Erottimet

  DecimalSeparator:
    . (piste) kielille, joissa piste on desimaalilukujen erotin, esimerkiksi 1.23
    , (pilkku) kielissä, joissa pilkkua käytetään esimerkiksi desimaalilukujen erottimena 1,23

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

  ChainingSeparator:
    ; (puolipiste), jos DecimalSeparator on . (piste)
    ;; (kaksoispuolipiste), jos DecimalSeparator 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.

  Operator:
    BinaryOperator
    BinaryOperatorRequiresWhitespace
    PrefixOperator
    PrefixOperatorRequiresWhitespace
    PostfixOperator

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

  BinaryOperatorRequiresWhitespace:
    AndWhitespace
    OrWhitespace

  PrefixOperator:
    !

  PrefixOperatorRequiresWhitespace:
    NotWhitespace

  PostfixOperator:
    %

Viittausoperaattori

  ReferenceOperator:one of
    .!

Objektiviittaus

  Reference:
    BaseReference
    BaseReferenceReferenceOperatorReferenceList

  BaseReference:
    Identifier
    DisambiguatedIdentifier
    ContextKeyword

  ReferenceList:
    Identifier
    IdentifierReferenceOperatorReferenceList

Tekstiin sidottu tietue

  InlineRecord:
    {InlineRecordListopt}

  InlineRecordList:
    Identifier:Expression
    Identifier:ExpressionListSeparatorInlineRecordList

Tekstiin sidottu taulukko

  InlineTable:
    [InlineTableListopt]

  InlineTableList:
    Expression
    ExpressionListSeparatorInlineTableList

Expression

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

Ketjutetut lausekkeet

  ChainedExpression:
    Expression
    ExpressionChainingSeparatorChainedExpressionopt

Funktiokutsu

  FunctionCall:
    FunctionIdentifier(FunctionArgumentsopt)

  FunctionIdentifier:
    Identifier
    Identifier.FunctionIdentifier

  FunctionArguments:
    ChainedExpression
    ChainedExpressionListSeparatorFunctionArguments