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:
GlobalIdentifier:
[@
Identifier]
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:
FunctionCall:
FunctionIdentifier(
FunctionArgumentsopt)
er forkortelse for:
FunctionCall:
FunctionIdentifier(
)
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:
DecimalDigit:én av
0
1
2
3
4
5
6
7
8
9
er forkortelse for:
DecimalDigit:
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:
ExpressionElementsopt
ExpressionElements:
ExpressionElement
ExpressionElementExpressionElementsopt
ExpressionElement:
Whitespace
Comment
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.
Whitespace:
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.
Comment:
DelimitedComment
SingleLineComment
SingleLineComment:
//
SingleLineCommentCharactersopt
SingleLineCommentCharacters:
SingleLineCommentCharacter
SingleLineCommentCharacterSingleLineCommentCharactersopt
SingleLineCommentCharacter:
alle Unicode-tegn unntatt NewLineCharacter
DelimitedComment:
/*
DelimitedCommentCharactersopt*/
DelimitedCommentCharacters:
DelimitedCommentCharactersNoAsteriskDelimitedCommentCharactersopt
*
DelimitedCommentAfterAsteriskCharacters
DelimitedCommentAfterAsteriskCharacters:
DelimitedCommentNoSlashAsteriskCharacterDelimitedCommentCharactersopt
*
DelimitedCommentAfterAsteriskCharacters
DelimitedCommentCharactersNoAsterisk:
Eethvert Unicode-tegn unntatt * (asterisk)
DelimitedCommentNoSlashAsteriskCharacter:
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.
Literal:
LogicalLiteral
NumberLiteral
TextLiteral
Logiske litteraler
En logisk litteral brukes til å skrive verdiene sann og usann og produsere en logisk verdi.
LogicalLiteral:én av
true
false
Nummer-litteraler
En nummer-litteral brukes til å skrive en numerisk verdi, og gir en tallverdi.
NumberLiteral:
DecimalDigitsExponentPartopt
DecimalDigitsDecimalSeparatorDecimalDigitsoptExponentPartopt
DecimalSeparatorDecimalDigitsExponentPartopt
DecimalDigits:
DecimalDigit
DecimalDigitsDecimalDigit
DecimalDigit:én av
0
1
2
3
4
5
6
7
8
9
ExponentPart:
ExponentIndicatorSignoptDecimalDigits
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
TextLiteral:
"
TextLiteralCharactersopt"
TextLiteralCharacters:
TextLiteralCharacterTextLiteralCharactersopt
TextLiteralCharacter:
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.
Identifier:
IdentifierNamemenikkeOperatorellerContextKeyword
IdentifierName:
IdentifierStartCharacterIdentifierContinueCharactersopt
'
SingleQuotedIdentifier'
IdentifierStartCharacter:
LetterCharacter
_
IdentifierContinueCharacter:
IdentifierStartCharacter
DecimalDigitCharacter
ConnectingCharacter
CombiningCharacter
FormattingCharacter
IdentifierContinueCharacters:
IdentifierContinueCharacterIdentifierContinueCharactersopt
LetterCharacter:
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)
CombiningCharacter:
hvilket som helst Unicode-tegn i klassen Merke uten mellomrom (Mn) eller Merke som kombinerer mellomrom (Mc)
DecimalDigitCharacter:
hvilket som helst Unicode-tegn i klassen Desimaltall (Nd)
ConnectingCharacter:
hvilket som helst Unicode-tegn i klassen Tegnsetting, sammenbindende (Pc)
FormattingCharacter:
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:
SingleQuotedIdentifierCharacterSingleQuotedIdentifierCharactersopt
SingleQuotedIdentifierCharacter:
TextCharactersNoSingleQuote
SingleQuoteEscapeSequence
TextCharactersNoSingleQuote:
ethvert Unicode-tegn unntatt ' (U+0027)
SingleQuoteEscapeSequence:
'
'
Tvetydig identifikator
DisambiguatedIdentifier:
TableColumnIdentifier
GlobalIdentifier
TableColumnIdentifier:
Identifier[@
Identifier]
GlobalIdentifier:
[@
Identifier]
Kontekstnøkkelord
ContextKeyword:
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
DecimalSeparator:
.
(punktum) for språk som bruker punktum som skilletegn for desimaltall, for eksempel 1.23
,
(komma) for språk som bruker et komma som skilletegn for desimaltall, for eksempel 1,23
ListSeparator:
,
(komma) hvis DecimalSeparator er .
(prikk)
;
(semikolon) hvis DecimalSeparator er ,
(komma)
ChainingSeparator:
;
(semikolon) hvis DecimalSeparator er .
(punktum)
;;
(doble semikolon) hvis DecimalSeparator 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
.
Operator:
BinaryOperator
BinaryOperatorRequiresWhitespace
PrefixOperator
PrefixOperatorRequiresWhitespace
PostfixOperator
BinaryOperator:én av
=
<
<=
>
>=
<>
+
-
*
/
^
&
&&
||
in
exactin
BinaryOperatorRequiresWhitespace:
And
Whitespace
Or
Whitespace
PrefixOperatorRequiresWhitespace:
Not
Whitespace
Referanseoperator
Objektreferanse
Reference:
BaseReference
BaseReferenceReferenceOperatorReferenceList
BaseReference:
Identifier
DisambiguatedIdentifier
ContextKeyword
ReferenceList:
Identifier
IdentifierReferenceOperatorReferenceList
Innebygd oppføring
InlineRecord:
{
InlineRecordListopt}
InlineRecordList:
Identifier:
Expression
Identifier:
ExpressionListSeparatorInlineRecordList
Innebygd tabell
InlineTable:
[
InlineTableListopt]
InlineTableList:
Expression
ExpressionListSeparatorInlineTableList
Expression
Expression:
Literal
Reference
InlineRecord
InlineTable
FunctionCall
(
Expression)
PrefixOperatorExpression
ExpressionPostfixOperator
ExpressionBinaryOperatorExpression
Koblede uttrykk
ChainedExpression:
Expression
ExpressionChainingSeparatorChainedExpressionopt
Funksjonskall
FunctionCall:
FunctionIdentifier(
FunctionArgumentsopt)
FunctionIdentifier:
Identifier
Identifier.
FunctionIdentifier
FunctionArguments:
ChainedExpression
ChainedExpressionListSeparatorFunctionArguments