Uttrykksgrammatikk
Merk
Microsoft Power Fx er det nye navnet på formelspråket for lerretsapper. Disse artiklene er et arbeid som pågår når vi trekker ut språket fra lerretsapper, integrerer det med andre Microsoft Power Platform-produkter og gjør det tilgjengelig som åpen kildekode. Begynn med Microsoft Power Fx-oversikt for å få en innføring i språket.
Microsoft Power Fx er basert på formler som binder et navn til et uttrykk. Akkurat som i Excel-regneark, når inngående avhengigheter i uttrykket endres, beregnes uttrykket på nytt, og verdien av navnet endres, noe som kan overlappe omberegningen til andre formler.
Denne grammatikken dekker uttrykksdelen av formelen. Binding til et navn for å opprette en formel avhenger av hvordan Power Fx integreres. I regneark er ikke bindingssyntaksen eksponert. Den er underforstått av plasseringen der uttrykket er skrevet, for eksempel angivelse av =B1
i A1-cellen. I noen tilfeller kreves det ingen binding, og Power Fx brukes som uttrykksevaluering, for eksempel ved støtte av beregnede kolonner i en databasetabell. For Power Apps er bindingen implisitt når du arbeider i Power Apps Studio med et serialiseringsformat basert på YAML for bruk utenfor Power Apps Studio.
Grammatikk-konvensjoner
Leksikalsk og syntaktisk grammatikk vises ved hjelp grammatiske produksjoner. Hver grammatikk-produksjon definerer et ikke-terminal-symbol og de mulige utvidelsene til ikke-terminal-symbolet i serier av ikke-terminal- eller terminal-symboler. I grammatikk-produksjoner blir ikke-terminal-symboler vist med kursiv, og terminal-symboler vist med en skrifttype med fast bredde.
Den første linjen i en grammatikk-produksjon er navnet på det ikke-terminal symbolet som defineres, etterfulgt av et kolon. Hver etterfølgende innrykkede linje inneholder en mulig utvidelse av det ikke-avsluttende symbolet som er gitt som en sekvens av ikke-avsluttende eller avsluttende symboler. For eksempel produksjonen:
GlobalIdentifikator:
[@
Identifikator]
definerer en GlobalIdentifier som skal bestå av tokenet [@
, etterfulgt av en identifikator, etterfulgt av tokenet ]
.
Når det er mer enn én mulig utvidelse av et ikke-terminal symbol, vises alternativene på separate linjer. Den senkede skripten "opt" brukes til å angi et valgfritt symbol. For eksempel produksjonen:
FunksjonRinge:
FunctionIdentifier(
FunctionArgumentsopt)
er forkortelse for:
FunksjonRinge:
Funksjon-identifikator(
)
FunctionIdentifier(
FunctionArguments)
Alternativer er vanligvis oppført på separate linjer, men i tilfeller der det er mange alternativer, kan uttrykket «en av» komme foran en liste over utvidelser som gis på én enkelt linje. Dette er ganske enkelt forkortelse for å vise hvert av alternativene på separate linjer.
For eksempel produksjonen:
desimalsiffer:ett av
0
1
2
3
4
5
6
7
8
9
er forkortelse for:
Desimalsiffertall:
0
1
2
3
4
5
6
7
8
9
Leksikalsk analyse
Leksikalsk-enhet-produksjonen definerer den leksikalske grammatikken for et Power Fx-uttrykk. Alle gyldige Power Fx-uttrykk er i samsvar med denne grammatikken.
ExpressionUnit:
ExpressionElementsvelg
Uttrykk Elementer:
Uttrykk Element
ExpressionElementExpressionElementsvelg
Uttrykk Element:
Mellomrom
Kommentar
På leksikalsk nivå består et Power Fx-dokument av en strøm av Whitespace, Comment og Token-elementer. Hver av disse produksjonene dekkes i avsnittene nedenfor. Det er bare token-elementer som er viktige i syntaktisk grammatikk.
Mellomrom
Mellomrom brukes til å skille kommentarer og tokens i et Power Apps-dokument.
Mellomrom:
hvilket som helst Unicode-mellomromskilletegn (klasse Zs)
hvilket som helst Unicode-linjeskilletegn (klasse Zl)
hvilket som helst Unicode-avsnittsskilletegn (klasse Zp)
Horisontalt tabulatortegn (U+0009)
Linjeskifttegn (U+000A)
Vertikalt tabulatortegn (U+000B)
Arkmatingstegn (U+000C)
Vognreturtegn (U+000D)
Neste-linje-tegn (U+0085)
Kommentarer
To typer kommentarer støttes:
- Kommentarer på én linje som starter med tegnene
//
og strekker seg til slutten av kildelinjen. - Kommentarer som skilles som begynner med tegnene
/*
og slutter med tegnene*/
. Atskilte kommentarer kan omfatte flere linjer.
Kommentar:
AvgrensetKommentar
SingleLineKommentar
SingleLineKommentar:
//
SingleLineCommentCharactersvelger
SingleLineCommentCharacters:
EnkeltlinjeKommentartegn
SingleLineCommentCharacterSingleLineCommentCharactersopt
SingleLineCommentTegn:
alle Unicode-tegn unntatt NewLineCharacter
AvgrensetKommentar:
/*
AvgrensetKommentarTegnvelg*/
AvgrensetKommentarTegn:
AvgrensetKommentarTegnIkkeStjerneAvgrensetKommentarTegnvelg
*
AvgrensetKommentarEtterStjerneTegn
AvgrensetKommentarEtterStjerneTegn:
AvgrensetKommentarIkkeSkråstrekStjerneTegnAvgrensetKommentarTegnvelg
*
AvgrensetKommentarEtterStjerneTegn
AvgrensetKommentarTegnIkkeStjerne:
Eethvert Unicode-tegn unntatt * (asterisk)
AvgrensetKommentarIkkeSkråstrekStjerneTegn:
ethvert Unicode-tegn unntatt / (skråstrek) eller * (asterisk)
Kommentarer nestes ikke. Tegnsekvensene /*
og */
har ingen spesiell betydning i en kommentar på én linje, og tegnsekvensene //
og /*
har ingen spesiell betydning i en skilletegnkommentar.
Kommentarer behandles ikke i tekstlitteralstrenger.
Følgende eksempel inneholder to kommentarer med skilletegn:
/* Hello, world
*/
"Hello, world" /* This is an example of a text literal */
Følgende eksempler inneholder tre kommentarer med én linje:
// Hello, world
//
"Hello, world" // This is an example of a text literal
Litteraler
En litteral er en kildekode-representasjon av en verdi.
Bokstavelig talt:
Logisk bokstavelig
TallBokstav
TekstBokstavelig
Logiske litteraler
En logisk litteral brukes til å skrive verdiene sann og usann og produsere en logisk verdi.
LogiskBokstavelig:en av
true
false
Nummer-litteraler
En nummer-litteral brukes til å skrive en numerisk verdi, og gir en tallverdi.
TallBokstav:
DecimalDigitsExponentPartopt
DecimalDigitsDecimalSeparatorDecimalDigitsoptExponentPartopt
DecimalSeparatorDecimalDigitsExponentPartopt
Desimalsifre:
Desimalsiffer
Desimalsifre desimalsiffer...
desimalsiffer:ett av
0
1
2
3
4
5
6
7
8
9
EksponentSeksjon:
ExponentIndicatorSignvelgerDecimalDigits
Tekst-litteraler
En tekst-litteral brukes til å skrive en sekvens med Unicode-tegn og produserer en tekstverdi. Tekstlitteraler står i doble anførselstegn. Hvis du vil inkludere doble anførselstegn i tekstverdien, gjentar du det doble anførselstegnet, som vist i følgende eksempel:
"The ""quoted"" text" // The "quoted" text
TekstBokstavelig:
"
TextLiteralCharactersvelger"
TextLiteralCharacters:
TextLiteralCharacterTextLiteralCharactersvelge
TextLiteralTegn:
TextCharacterNoDoubleQuote
DoubleQuoteEscapeSequence
TextCharacterNoDoubleQuote:
hvilket som helst Unicode-kodepunkt unntatt doble anførselstegn
DoubleQuoteEscapeSequence:
"
"
Identifiers
En identifikator er et navn som brukes til å referere til en verdi. Identifikatorer kan være vanlige identifikatorer eller identifikatorer som er i anførselstegn.
Identifikator:
IdentifierName,menikkeOperator... ellerContextKeyword
Identifikatornavn:
IdentifierStartCharacterIdentifierContinueCharactersopt
'
SingleQuotedIdentifier'
IdentifikatorTegn:
Bokstavtegn
_
IdentifierContinueCharacter:
IdentifierStartCharacter
Desimalsiffertegn
Kobler tilTegn
KombinereTegn
FormateringTegn
IdentifierContinueCharacters:
IdentifierContinueCharacterIdentifierContinueCharactersopt
BokstavTegn:
et vilkårlig Unicode-tegn i klassen Stor bokstav (Lu) eller Liten bokstav (Ll)
hvilket som helst Unicode-tegn i klassen Stor forbokstav (Lt)
et vilkårlig Unicode-tegn i klassen Bokstavmodifikator (Lm) eller Annen bokstav (Lo)
hvilket som helst Unicode-tegn i klassen Tallbokstav (Nl)
KombineringKarakter:
hvilket som helst Unicode-tegn i klassen Merke uten mellomrom (Mn) eller Merke som kombinerer mellomrom (Mc)
Desimalsiffertegn:
hvilket som helst Unicode-tegn i klassen Desimaltall (Nd)
Kobler tilTegn:
hvilket som helst Unicode-tegn i klassen Tegnsetting, sammenbindende (Pc)
FormateringTegn:
hvilket som helst Unicode-tegn i klassen Format (Cf)
Identifikatorer i anførselstegn
En identifikator med enkle anførselstegn kan inneholde en hvilken som helst sekvens med Unicode-tegn som skal brukes som en identifikator, inkludert nøkkelord, mellomrom, kommentarer, operatorer. Enkle anførselstegn støttes med en escape-sekvens med to enkle anførselstegn.
SingleQuotedIdentifier:
SingleQuotedIdentifierCharacters
SingleQuotedIdentifierCharacters:
SingleQuotedIdentifierCharacterSingleQuotedIdentifierCharactersvelge
SingleQuotedIdentifierCharacter:
TextCharactersNoSingleQuote
SingleQuoteEscapeSequence
TextCharactersNoSingleQuote:
ethvert Unicode-tegn unntatt ' (U+0027)
SingleQuoteEscapeSequence:
'
'
Tvetydig identifikator
TvetydigIdentifikator:
TableColumnIdentifier
GlobalIdentifikator
TableColumnIdentifier:
Identifikator[@
identifikator]
GlobalIdentifikator:
[@
Identifikator]
Kontekstnøkkelord
KontekstNøkkelord:
Parent
Self
ThisItem
ThisRecord
Skille mellom store og små bokstaver
Power Apps-identifikatorer skiller mellom små og store bokstaver. Redigeringsverktøyet endrer dem automatisk til rett bokstavstørrelse når en formel skrives.
Skilletegn
Desimalskilletegn:
.
(punktum) for språk som bruker et punktum som skilletegn for desimaltall, for eksempel 1.23
,
(komma) for språk som bruker komma som skilletegn for desimaltall, for eksempel 1,23
ListSeparator:
,
(komma) hvis desimalskilletegnet er .
(punktum)
;
(semikolon) hvis desimalskilletegnet er ,
(komma)
Kjetting separator:
;
(semikolon) hvis DecimalSeparator er .
(punktum)
;;
(dobbelt semikolon) hvis desimalskilletegnet er ,
(komma)
Operators
Operatorer brukes i formler for å beskrive operasjoner som involverer én eller flere operander. Uttrykket a + b
bruker for eksempel +
-operatoren til å legge til de to operandene a
og b
.
Operatør:
Binær operatør
BinaryOperatorRequiresMellomrom
PrefiksOperator
PrefixOperatorRequiresMellomrom
PostfixOperator
BinaryOperator:en av
=
<
<=
>
>=
<>
+
-
*
/
^
&
&&
||
in
exactin
BinaryOperatorRequiresMellomrom:
And
Mellomrom
Or
Mellomrom
PrefixOperatorRequiresMellomrom:
Not
Mellomrom
Referanseoperator
Objektreferanse
Referanse:
BaseReference
BaseReferenceReferenceOperatorReferenceList
BaseReferanse:
Identifikator
DisambiguatedIdentifier
Kontekstnøkkelord
Referanseliste:
Identifikator
IdentifikatorReferenceOperatorReferenceList
Innebygd oppføring
InlineRecord:
{
InlineRecordList-valg}
InlineRecordList:
Uttrykk for identifikator:
...
Identifikatoruttrykk:
...ListSeparatorInlineRecordList
Innebygd tabell
Innebygd tabell:
[
InlineTableList-valg]
InlineTableList:
Uttrykk
UttrykkListSeparatorInlineTableList
Expression
Uttrykk:
Bokstavelig
Referanse
InlineRecord
Innebygd tabell
FunksjonSamtale
(
Uttrykk)
PrefixOperator-uttrykk...
UttrykkPostfixOperator
UttrykkBinaryOperator-uttrykk...
Koblede uttrykk
Kjedet uttrykk:
Uttrykk
UttrykkChainingSeparatorChainedExpressionopt
Funksjonskall
FunksjonRinge:
FunctionIdentifier(
FunctionArgumentsopt)
Funksjon-identifikator:
Identifikator
Identifikator.
FunctionIdentifier
FunksjonArgumenter:
KjedetUttrykk
ChainedExpressionListSeparatorFunctionArguments