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
    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:
    AndBlanksteg
    OrBlanksteg

  PrefixOperator:
    !

  PrefixOperatorRequiresWhitespace:
    NotBlanksteg

  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