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
    0123456789

ä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
    ExpressionElementExpressionElementsvä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
    SingleLineCommentCharacterSingleLineCommentCharactersvälj

  SingleLineCommentCharacter :
    en Unicode-tecken förutom NewLineCharacter

  DelimitedComment :
    /*DelimitedCommentCharactersvälja*/

  DelimitedCommentCharacters :
    DelimitedCommentCharactersNoAsteriskDelimitedCommentCharactersvälja
    *DelimitedCommentAfterAsteriskCharacters

  DelimitedCommentAfterAsteriskCharacters :
    DelimitedCommentNoSlashAsteriskCharacterDelimitedCommentCharactersvä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
    truefalse

Numeriska literaler

En numerisk literal används för att skriva ett numeriskt värde och ger ett talvärde.

  NumberLiteral :
    DecimalDigitsExponentPartvälja
    DecimalDigitsDecimalSeparatorDecimalDigitsväljaExponentPartvälja
    DecimalSeparatorDecimalDigitsExponentPartvälja

  DecimalDigits :
    DecimalDigit
    DecimalDigitsDecimalDigit

  DecimalDigit : en av
    0123456789

  ExponentPart :
    ExponentIndicatorTeckenväljaDecimalDigits

  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älja"

  TextLiteralCharacters :
    TextLiteralCharacterTextLiteralCharactersvä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 :
    IdentifierStartCharacterIdentifierContinueCharactersvälja
    'SingleQuotedIdentifier'

  IdentifierStartCharacter :
    LetterCharacter
    _

  IdentifierContinueCharacter :
    IdentifierStartCharacter
    DecimalDigitCharacter
    ConnectingCharacter
    CombiningCharacter
    FormattingCharacter

  IdentifierContinueCharacters :
    IdentifierContinueCharacterIdentifierContinueCharactersvä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 :
    SingleQuotedIdentifierCharacterSingleQuotedIdentifierCharactersvä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
    =<<=>>=<>
    +-*/^
    &
    &&||
    inexactin

  BinaryOperatorRequiresWhitespace:
    AndTomt utrymme
    OrTomt utrymme

  PrefixOperator:
    !

  PrefixOperatorRequiresWhitespace:
    NotTomt utrymme

  PostfixOperator:
    %

Referensoperator

  ReferenceOperator: en av
    .!

Objektreferens

  Referens:
    BaseReference
    BaseReferenceReferenceOperatorReferenceList

  BaseReference:
    Identifierare
    DisambiguatedIdentifier
    ContextKeyword

  ReferenceList:
    Identifierare
    IdentifierareReferenceOperatorReferenceList

Infogad post

  InlineRecord:
    {InlineRecordListvälja}

  InlineRecordList:
    Identifierare:Uttryck
    Identifierare:UttryckListSeparatorInlineRecordList

Infogade tabeller

  InlineTable:
    [InlineTableListvälja]

  InlineTableList:
    Expression
    UttryckListSeparatorInlineTableList

Expression

  Uttryck:
    Literal
    Referens
    InlineRecord
    InlineTable
    FunctionCall
    (Expression)
    PrefixOperatorUttryck
    UttryckPostfixOperator
    UttryckBinaryOperatorUttryck

Kedjande uttryck

  ChainedExpression:
    Expression
    UttryckChainingSeparatorChainedExpressionvälja

Funktionssamtal

  FunctionCall:
    FunctionIdentifier(FunctionArgumentsvälja)

  FunctionIdentifier:
    Identifierare
    Identifierare.FunctionIdentifier

  FunctionArguments:
    ChainedExpression
    ChainedExpressionListSeparatorFunctionArguments