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:
0
1
2
3
4
5
6
7
8
9
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
true
false
Lukuliteraalit
Lukuliteraalia käytetään kirjoittamaan numeroarvo ja tuottamaan lukuarvo.
Lukuliteraali:
DecimalDigitsExponentPartopt
DecimalDigitsDecimalSeparatorDecimalDigitsvalitseExponentPartopt
DesimaalierotinDecimalDigitsExponentPartopt
Desimaaliluvut:
Desimaaliluku
DesimaaliluvutDecimalDigit
Desimaaliluku:yksi seuraavista:
0
1
2
3
4
5
6
7
8
9
Eksponenttiosa:
ExponentIndicatorSignopt DecimalDigits...
EksponenttiIndikaattori:yksi seuraavista:
e
E
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 b
lisäämiseen.
Operaattori:
BinaryOperator
BinaryOperatorRequiresVälilyönti
PrefixOperator
PrefixOperatorRequiresVälilyönti
PostfixOperator
BinaryOperator:yksi
=
<
<=
>
>=
<>
+
-
*
/
^
&
&&
||
in
exactin
BinaryOperatorRequiresVälilyönti:
And
Välilyönnit
Or
Välilyönnit
PrefixOperatorRequiresVälilyönti:
Not
Välilyönnit
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