Uttrycksgrammatik
Obs
Microsoft Power Fx är det nya namnet på formelspråket för arbetsyteappar. Dessa artiklar är ett arbete som pågår när vi extraherar språket från program, integrerar det med andra Microsoft Power Platform produkter och gör det tillgängligt som öppen källkod. Börja med Microsoft Power Fx översikten för en introduktion till språket.
Microsoft Power Fx baseras på formeln som bind ett namn till ett uttryck. Precis som i Excel-kalkylblad, när inkonsekvenser till uttrycksändringen, beräknas uttrycket om och namnets värde ändras, vilket kan minska omberäkningen till andra formeln.
Den innehåller också uttryck som en del av formeln. Bindningen till ett namn för att skapa en formel beror på hur Power Fx integreras. I kalkylblad exponeras inte bindningssyntaxen, utan antyds av platsen där uttrycket skrivs till exempel in =B1
i A1 cell. I vissa fall krävs ingen bindning alls och Power Fx används som uttrycksutvärderare, till exempel för att stödja beräknade kolumner i en databastabell. För Power Apps är bindningen underförstådd när du arbetar i Power Apps Studio med serialiseringsformat baserat på YAML för användning utanför Power Apps Studio.
Grammatiska konventioner
Lexikal och syntaktisk grammatik presenteras med hjälp av grammatisk produktion. Varje grammatisk produktion definierar en icke-terminalsymbol och de möjliga expansionerna av denna icke-terminalsymbol i sekvenser av icke-terminal- eller terminalsymboler. I grammatisk produktion visas icke-terminal symbolerna som kursiv typ, och terminalsymboler visas i ett teckensnitt med fast bredd.
Den första raden i en grammatisk produktion är namnet på den icke-terminalsymbol som definieras, följt av ett kolon. Varje efterföljande indragen rad innehåller en möjlig expansion av den icke-terminalsymbol som anges som en sekvens av icke-terminal- eller terminalsymboler. Till exempel produktionen:
GlobalIdentifier:
[@
Identifierare]
definierar Globalidentifiering som består av token [@
, följt av en Identifierare, följt av token ]
.
Om det finns mer än en möjlig expansion av en icke-terminalsymbol visas alternativen på separata rader. Ett nedsänkt ”opt” används för att ange en valfri symbol. Till exempel produktionen:
FungeraRing:
FunctionIdentifier(
FunctionArgumentsväljer)
är en förkortning av:
FungeraRing:
FunctionIdentifier (på engelska)(
)
FunctionIdentifier(
FunctionArguments)
Alternativ visas vanligtvis på separata rader, men i de fall där det finns många alternativ kan frasen ”en av” komma före en lista över expansioner som visas på en enda rad. Detta är bara ett kortare sätt istället för att visa varje alternativ på en separat rader.
Till exempel produktionen:
DecimalDigit: en av
0
1
2
3
4
5
6
7
8
9
är en förkortning av:
Decimalsiffra:
0
1
2
3
4
5
6
7
8
9
Lexikal analys
Den lexikala enhetstillverkningen definierar det lexikala uttrycket för ett Power Fx-uttryck. För alla giltiga uttryck för Power Fx.
ExpressionUnit:
ExpressionElementsväljer
Uttryckselement:
Uttryckselement
ExpressionElementExpressionElementsväljer
Uttryckselement:
Blanksteg
Kommentar
På den lexikala nivån består ett Power Fx-uttryck av en ström av elementen blanksteg, kommentar och token. Var och en av dessa produktioner beskrivs i följande avsnitt. Endast token-elementen är viktiga i syntaktisk grammatik.
Tomt utrymme
Blanksteg används för att avgränsa kommentarer och tokens i ett Power Apps-dokument.
Blanksteg:
en Unicode-blankstegsavgränsare (klass Zs)
en Unicode-radavgränsare (klass ZI)
en Unicode-styckeavgränsare (klass Zp)
Vågrätt tabbtecken (U+0009)
Radmatningstecken (U+000A)
Lodrätt tabbtecken (U+000B)
Tecken för formulärflöde (U+000C)
Vagnreturtecken (U+000D)
Tecken för nästa rad (U+0085)
Kommentarer
Två typer av kommentarer stöds:
- Enkelradskommentarer börjar med tecknen
//
och sträcker sig till slutet av källraden. - Avgränsade kommentarer börjar med tecknen
/*
och slutar med tecknen*/
. Avgränsade kommentarer kan sträcka sig över flera rader.
Kommentar:
AvgränsadKommentar
SingleLineComment (på engelska)
SingleLineKommentar:
//
SingleLineCommentCharactersväljer
SingleLineCommentCharacters:
SingleLineCommentCharacter (på engelska)
SingleLineCommentCharacterSingleLineCommentCharactersväljer
SingleLineCommentCharacter:
en Unicode-tecken förutom NewLineCharacter
AvgränsadKommentar:
/*
DelimitedCommentCharactersvälj*/
AvgränsadeKommentarTecken:
AvgränsadKommentarTeckenNoAsteriskAvgränsadKommentarTeckenväljer
*
AvgränsadKommentarEfterAsteriskTecken
DelimitedCommentAfterAsteriskCharacters:
AvgränsadKommentarNejSnedstreckAsteriskKaraktärAvgränsadKommentarTeckenvälja
*
AvgränsadKommentarEfterAsteriskTecken
AvgränsadKommentarTeckenNoAsterisk:
en Unicode-tecken utom * (asterisk)
AvgränsadKommentarNejSlashAsteriskKaraktär:
en Unicode-tecken utom a/(snedstreck) eller * (asterisk)
Kommentarer är inte kapslade. Teckensekvenserna /*
och */
har ingen särskild betydelse inom en enkelradskommentar och teckensekvenserna //
och /*
har ingen särskild betydelse inom en avgränsad kommentar.
Kommentarer bearbetas inte inom textliterala strängar.
Följande exempel innehåller två avgränsade kommentarer:
/* Hello, world
*/
"Hello, world" /* This is an example of a text literal */
Följande exempel innehåller tre kommentarer med en rad:
// Hello, world
//
"Hello, world" // This is an example of a text literal
Literaler
En literal är en källkodsrepresentation av ett värde.
Bokstavligen:
LogiskLiteral
NumberLiteral
TextLiteral (på engelska)
Logiska literaler
En logisk literal används för att skriva värdena true och false och genererar ett logiskt värde.
LogicalLiteral:en av
true
false
Numeriska literaler
En numerisk literal används för att skriva ett numeriskt värde och ger ett talvärde.
NumberLiteral:
DecimalDigitsExponentPartväljer
DecimalDigitsDecimalSeparatorDecimalDigitsoptExponentPartopt
DecimalSeparatorDecimalDigitsExponentPartväljer
Decimalsiffror:
Decimalsiffra
DecimalsiffrorDecimalsiffra
DecimalDigit: en av
0
1
2
3
4
5
6
7
8
9
ExponentPart:
ExponentIndicatorTeckenväljDecimalDigits
Textliteraler
En textliteral används för att skriva en sekvens med Unicode-tecken och genererar ett textvärde. Textlitaler omges av dubbla citattecken. Om du vill ta med dubbla citattecken i textvärdet upprepar du de dubbla citattecken, som i exemplet nedan:
"The ""quoted"" text" // The "quoted" text
TextLiteral:
"
TextLiteralCharactersväljer"
TextLiteralCharacters:
TextLiteralCharacterTextLiteralCharactersvälj
TextLiteralCharacter:
TextCharacterNoDoubleQuote
DoubleQuoteEscapeSequence (DubbelcitatEscapeSekvens)
TextCharacterNoDoubleQuote:
en Unicode-kodpoäng förutom dubbla citattecken
DoubleQuoteEscapeSequence:
"
"
Identifierare
En identifierare är ett namn som används för att referera till ett värde. Identifierare kan antingen vara reguljära identifierare eller en citerad identifierare.
Identifierare:
IdentifierNamemeninte operatör ellerContextKeyword
IdentifierName:
IdentifierareStartKaraktärIdentifierareFortsättaTeckenvälja
'
SingleQuotedIdentifier (på engelska)'
IdentifierStartCharacter:
LetterCharacter (på engelska)
_
IdentifierContinueCharacter:
IdentifierareStartKaraktär
DecimalDigitCharacter (DecimalDigitTecken)
Anslutande karaktär
CombiningCharacter (Kombinera)
Formatera karaktär
IdentifierareFortsättaTecken:
IdentifierContinueCharacterIdentifierContinueCharactersvälj
LetterCharacter:
ett Unicode-tecken i klassen Versaler (Lu) eller Gemener (Ll)
ett Unicode-tecken i klassen Inledande versal (Lt)
ett Unicode-tecken i klassen Bokstavsmodifierare (Lm) or Bokstav annan (Lo)
ett Unicode-tecken i klassen nummerbokstav (Nl)
CombiningCharacter:
ett Unicode-tecken i klassen icke-avståndsmärke (Mn) eller avståndskombinerande märke (Mc)
DecimalDigitCharacter:
ett Unicode-tecken i klassen Decimaltal (Nd)
Anslutande karaktär:
ett Unicode-tecken i klassen Skiljetecken, sammanfogare (Pc)
Formateringskaraktär:
ett Unicode-tecken i klassen Format (Cf)
Enskilda citerade identifierare
En enkel citattecken kan innehålla en sekvens med Unicode-tecken används som en identifierare, inklusive nyckelord, blanksteg, kommentarer och operatorer. Enkelt citattecken kan användas med en sekvens av två enkla citattecken.
SingleQuotedIdentifier:
SingleQuotedIdentifierCharacters (på engelska)
SingleQuotedIdentifierCharacters:
SingleQuotedIdentifierCharacterSingleQuotedIdentifierCharactersväljer
SingleQuotedIdentifierCharacter:
TextCharactersNoSingleQuote
SingleQuoteEscapeSequence (EnkelcitatEscapeSekvens)
TextCharactersNoSingleQuote:
ett Unicode-tecken utom (U+0027)
SingleQuoteEscapeSequence:
'
'
Otydlig identifierare
DisambiguatedIdentifier:
TableColumnIdentifier (på engelska)
GlobalIdentifier (på engelska)
TableColumnIdentifier:
Identifierare[@
Identifierare]
GlobalIdentifier:
[@
Identifierare]
Kontextnyckelord
Kontext Nyckelord:
Parent
Self
ThisItem
ThisRecord
Skiftlägeskänslig
Power Apps identifierare är skiftlägeskänsliga. Redigeringsverktyget ändrar dem automatiskt till rätt ärende när en formel skrivs.
Avgränsare
DecimalSeparator:
.
(punkt) för språk som använder en punkt som avgränsare för decimaltal, till exempel 1.23
,
(kommatecken) för språk som använder kommatecken som avgränsare för decimaltal, till exempel 1,23
ListSeparator:
,
(kommatecken) om DecimalSeparator är .
(punkt)
;
(semikolon) om DecimalSeparator är ,
(komma)
ChainingSeparator:
;
(semikolon) om DecimalSeparator är .
(punkt)
;;
(dubbelt semikolon) om DecimalSeparator är ,
(kommatecken)
Operators
Operatorer används i formler för att beskriva åtgärder som involverar en eller flera operander. Uttrycket a + b
använder till exempel operatorn +
för att lägga till de två operanderna a
och b
.
Operatör:
BinaryOperator (på engelska)
BinaryOperatorRequiresWhitespace
PrefixOperator (prefix)
PrefixOperatorRequiresWhitespace
PostfixOperator
BinaryOperator:en av
=
<
<=
>
>=
<>
+
-
*
/
^
&
&&
||
in
exactin
BinaryOperatorRequiresWhitespace:
And
Blanksteg
Or
Blanksteg
PrefixOperatorRequiresWhitespace:
Not
Blanksteg
Referensoperator
Objektreferens
Hänvisning:
Basreferens
BaseReferenceReferenceOperatorReferenceList
BaseReference:
Identifierare
DisambiguatedIdentifier (på engelska)
KontextNyckelord
Referenslista:
Identifierare
IdentifierareReferenceOperatorReferenceList
Infogad post
InlineRecord:
{
Välj InlineRecordList}
InlineRecordList:
Identifierare:
uttryck
Identifieraruttryck:
...: ListSeparator, InlineRecordList
Infogade tabeller
Infogad tabell:
[
Välj InlineTableList]
InlineTableList:
Uttryck
UttryckListSeparatorInlineTableList
Expression
Uttryck:
Ordagrann
Hänvisning
Infogad inspelning
Infogad tabell
FungeraRing
(
Uttryck)
PrefixOperator-uttryck...
UttryckPostfixOperator
UttryckBinaryOperator-uttryck...
Kedjande uttryck
ChainedExpression:
Uttryck
UttryckChainingSeparatorChainedExpressionväljer
Funktionssamtal
FungeraRing:
FunctionIdentifier(
FunctionArgumentsväljer)
FunctionIdentifier:
Identifierare
Identifierare.
FunctionIdentifier
Fungera-argument:
Kedjat uttryck
ChainedExpressionListSeparatorFunctionArguments