Uttrycksgrammatik
Anteckning
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 appar, 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:
Globalidentifiering :
[@ 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:
FunctionCall :
FunctionIdentifier ( FunctionArgumentsvälja )
är en förkortning av:
FunctionCall :
FunctionIdentifier ( )
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:
DecimalDigit :
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älja
ExpressionElements :
ExpressionElement
ExpressionElement ExpressionElementsvälja
ExpressionElement :
Tomt utrymme
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.
Komment :
DelimitedComment
SingleLineComment
SingleLineComment :
// SingleLineCommentCharactersvälja
SingleLineCommentCharacters :
SingleLineCommentCharacter
SingleLineCommentCharacter SingleLineCommentCharactersvälj
SingleLineCommentCharacter :
en Unicode-tecken förutom NewLineCharacter
DelimitedComment :
/* DelimitedCommentCharactersvälja */
DelimitedCommentCharacters :
DelimitedCommentCharactersNoAsterisk DelimitedCommentCharactersvälja
* DelimitedCommentAfterAsteriskCharacters
DelimitedCommentAfterAsteriskCharacters :
DelimitedCommentNoSlashAsteriskCharacter DelimitedCommentCharactersvälja
* DelimitedCommentAfterAsteriskCharacters
DelimitedCommentCharactersNoAsterisk :
en Unicode-tecken utom * (asterisk)
DelimitedCommentNoSlashAsteriskCharacter :
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.
Literal :
LogicalLiteral
NumberLiteral
TextLiteral
Logiska literaler
En l ogisk 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 :
DecimalDigits ExponentPartvälja
DecimalDigits DecimalSeparator DecimalDigitsvälja ExponentPartvälja
DecimalSeparator DecimalDigits ExponentPartvälja
DecimalDigits :
DecimalDigit
DecimalDigits DecimalDigit
DecimalDigit : en av
0 1 2 3 4 5 6 7 8 9
ExponentPart :
ExponentIndicator Teckenvälja DecimalDigits
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älja "
TextLiteralCharacters :
TextLiteralCharacter TextLiteralCharactersvälja
TextLiteralCharacter :
TextCharacterNoDoubleQuote
DoubleQuoteEscapeSequence
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 :
IdentifierName men inte Operatör eller ContextKeyword
IdentifierName :
IdentifierStartCharacter IdentifierContinueCharactersvälja
' SingleQuotedIdentifier '
IdentifierStartCharacter :
LetterCharacter
_
IdentifierContinueCharacter :
IdentifierStartCharacter
DecimalDigitCharacter
ConnectingCharacter
CombiningCharacter
FormattingCharacter
IdentifierContinueCharacters :
IdentifierContinueCharacter IdentifierContinueCharactersvälja
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) eller 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)
ConnectingCharacter :
ett Unicode-tecken i klassen Skiljetecken, sammanfogare (Pc)
FormattingCharacter :
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
SingleQuotedIdentifierCharacters :
SingleQuotedIdentifierCharacter SingleQuotedIdentifierCharactersvälja
SingleQuotedIdentifierCharacter :
TextCharactersNoSingleQuote
SingleQuoteEscapeSequence
TextCharactersNoSingleQuote :
ett Unicode-tecken utom (U+0027)
SingleQuoteEscapeSequence :
' '
Otydlig identifierare
DisambiguatedIdentifier:
TableColumnIdentifier
GlobalIdentifier
TableColumnIdentifier :
Identifierare [@ Identifierare ]
GlobalIdentifier:
[@ Identifierare ]
Kontextnyckelord
ContextKeyword:
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:
. (prick) för språk som använder en prick som avgränsare för decimaltal, till exempel 1.23
, (komma) för språk som använder ett komma som avgränsare för decimaltal, till exempel 1,23
ListSeparator:
, (komma) om DecimalSeparator är . (punkt)
; (semikolon) om decimaltecken är , (komma)
ChainingSeparator:
; (semikolon) om decimaltecken är . (punkt)
;; (dubbelt semikolon) om decimaltecken är , (komma)
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.
Operator:
BinaryOperator
BinaryOperatorRequiresWhitespace
PrefixOperator
PrefixOperatorRequiresWhitespace
PostfixOperator
BinaryOperator: en av
= < <= > >= <>
+ - * / ^
&
&& ||
in exactin
BinaryOperatorRequiresWhitespace:
And Tomt utrymme
Or Tomt utrymme
PrefixOperatorRequiresWhitespace:
Not Tomt utrymme
Referensoperator
Objektreferens
Referens:
BaseReference
BaseReference ReferenceOperator ReferenceList
BaseReference:
Identifierare
DisambiguatedIdentifier
ContextKeyword
ReferenceList:
Identifierare
Identifierare ReferenceOperator ReferenceList
Infogad post
InlineRecord:
{ InlineRecordListvälja }
InlineRecordList:
Identifierare : Uttryck
Identifierare : Uttryck ListSeparator InlineRecordList
Infogade tabeller
InlineTable:
[ InlineTableListvälja ]
InlineTableList:
Expression
Uttryck ListSeparator InlineTableList
Expression
Uttryck:
Literal
Referens
InlineRecord
InlineTable
FunctionCall
( Expression )
PrefixOperator Uttryck
Uttryck PostfixOperator
Uttryck BinaryOperator Uttryck
Kedjande uttryck
ChainedExpression:
Expression
Uttryck ChainingSeparator ChainedExpressionvälja
Funktionssamtal
FunctionCall:
FunctionIdentifier ( FunctionArgumentsvälja )
FunctionIdentifier:
Identifierare
Identifierare . FunctionIdentifier
FunctionArguments:
ChainedExpression
ChainedExpression ListSeparator FunctionArguments