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
0
1
2
3
4
5
6
7
8
9
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
true
false
Lukuliteraalit
Lukuliteraalia käytetään kirjoittamaan numeroarvo ja tuottamaan lukuarvo.
NumberLiteral:
DecimalDigitsExponentPartopt
DecimalDigitsDecimalSeparatorDecimalDigitsoptExponentPartopt
DecimalSeparatorDecimalDigitsExponentPartopt
DecimalDigits:
DecimalDigit
DecimalDigitsDecimalDigit
DecimalDigit:one of
0
1
2
3
4
5
6
7
8
9
ExponentPart:
ExponentIndicatorSignoptDecimalDigits
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 b
lisäämiseen.
Operator:
BinaryOperator
BinaryOperatorRequiresWhitespace
PrefixOperator
PrefixOperatorRequiresWhitespace
PostfixOperator
BinaryOperator:one of
=
<
<=
>
>=
<>
+
-
*
/
^
&
&&
||
in
exactin
BinaryOperatorRequiresWhitespace:
And
Whitespace
Or
Whitespace
PrefixOperatorRequiresWhitespace:
Not
Whitespace
Viittausoperaattori
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