Uttrycksgrammatik

Kommentar

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
    0123456789

ä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
    truefalse

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
    0123456789

   ExponentPart:
     ExponentIndicatorTeckenväljDecimalDigits

   ExponentIndicator: en av
    eE

   Tecken: en av
    +-

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
    =<<=>>=<>
    +-*/^
    &
    &&||
    inexactin

   BinaryOperatorRequiresWhitespace:
     And Blanksteg
     Or Blanksteg

   PrefixOperator:
    !

   PrefixOperatorRequiresWhitespace:
     Not Blanksteg

   PostfixOperator:
    %

Referensoperator

   ReferenceOperator:en av
    .!

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