Del via


Uttrykksgrammatikk

Merk

Microsoft Power Fx er det nye navnet på formelspråket for lerretsapper. Disse artiklene er et arbeid som pågår når vi trekker ut språket fra lerretsapper, integrerer det med andre Microsoft Power Platform-produkter og gjør det tilgjengelig som åpen kildekode. Begynn med Microsoft Power Fx-oversikt for å få en innføring i språket.

Microsoft Power Fx er basert på formler som binder et navn til et uttrykk. Akkurat som i Excel-regneark, når inngående avhengigheter i uttrykket endres, beregnes uttrykket på nytt, og verdien av navnet endres, noe som kan overlappe omberegningen til andre formler.

Denne grammatikken dekker uttrykksdelen av formelen. Binding til et navn for å opprette en formel avhenger av hvordan Power Fx integreres. I regneark er ikke bindingssyntaksen eksponert. Den er underforstått av plasseringen der uttrykket er skrevet, for eksempel angivelse av =B1 i A1-cellen. I noen tilfeller kreves det ingen binding, og Power Fx brukes som uttrykksevaluering, for eksempel ved støtte av beregnede kolonner i en databasetabell. For Power Apps er bindingen implisitt når du arbeider i Power Apps Studio med et serialiseringsformat basert på YAML for bruk utenfor Power Apps Studio.

Grammatikk-konvensjoner

Leksikalsk og syntaktisk grammatikk vises ved hjelp grammatiske produksjoner. Hver grammatikk-produksjon definerer et ikke-terminal-symbol og de mulige utvidelsene til ikke-terminal-symbolet i serier av ikke-terminal- eller terminal-symboler. I grammatikk-produksjoner blir ikke-terminal-symboler vist med kursiv, og terminal-symboler vist med en skrifttype med fast bredde.

Den første linjen i en grammatikk-produksjon er navnet på det ikke-terminal symbolet som defineres, etterfulgt av et kolon. Hver etterfølgende innrykkede linje inneholder en mulig utvidelse av det ikke-avsluttende symbolet som er gitt som en sekvens av ikke-avsluttende eller avsluttende symboler. For eksempel produksjonen:

   GlobalIdentifier:
     [@ Identifier]

definerer en GlobalIdentifier som skal bestå av tokenet [@, etterfulgt av en identifikator, etterfulgt av tokenet ].

Når det er mer enn én mulig utvidelse av et ikke-terminal symbol, vises alternativene på separate linjer. Den senkede skripten "opt" brukes til å angi et valgfritt symbol. For eksempel produksjonen:

   FunctionCall:
     FunctionIdentifier(FunctionArgumentsopt)

er forkortelse for:

   FunctionCall:
     FunctionIdentifier()
     FunctionIdentifier(FunctionArguments)

Alternativer er vanligvis oppført på separate linjer, men i tilfeller der det er mange alternativer, kan uttrykket «en av» komme foran en liste over utvidelser som gis på én enkelt linje. Dette er ganske enkelt forkortelse for å vise hvert av alternativene på separate linjer.

For eksempel produksjonen:

   DecimalDigit:én av
    0123456789

er forkortelse for:

   DecimalDigit:
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9

Leksikalsk analyse

Leksikalsk-enhet-produksjonen definerer den leksikalske grammatikken for et Power Fx-uttrykk. Alle gyldige Power Fx-uttrykk er i samsvar med denne grammatikken.

   ExpressionUnit:
     ExpressionElementsopt

   ExpressionElements:
     ExpressionElement
     ExpressionElementExpressionElementsopt

   ExpressionElement:
     Whitespace
     Comment

På leksikalsk nivå består et Power Fx-dokument av en strøm av Whitespace, Comment og Token-elementer. Hver av disse produksjonene dekkes i avsnittene nedenfor. Det er bare token-elementer som er viktige i syntaktisk grammatikk.

Mellomrom

Mellomrom brukes til å skille kommentarer og tokens i et Power Apps-dokument.

   Whitespace:
    hvilket som helst Unicode-mellomromskilletegn (klasse Zs)
    hvilket som helst Unicode-linjeskilletegn (klasse Zl)
    hvilket som helst Unicode-avsnittsskilletegn (klasse Zp)
    Horisontalt tabulatortegn (U+0009)
    Linjeskifttegn (U+000A)
    Vertikalt tabulatortegn (U+000B)
    Arkmatingstegn (U+000C)
    Vognreturtegn (U+000D)
    Neste-linje-tegn (U+0085)

Kommentarer

To typer kommentarer støttes:

  • Kommentarer på én linje som starter med tegnene // og strekker seg til slutten av kildelinjen.
  • Kommentarer som skilles som begynner med tegnene /* og slutter med tegnene */. Atskilte kommentarer kan omfatte flere linjer.

   Comment:
     DelimitedComment
     SingleLineComment

   SingleLineComment:
     // SingleLineCommentCharactersopt

   SingleLineCommentCharacters:
     SingleLineCommentCharacter
     SingleLineCommentCharacterSingleLineCommentCharactersopt

   SingleLineCommentCharacter:
    alle Unicode-tegn unntatt NewLineCharacter

   DelimitedComment:
     /* DelimitedCommentCharactersopt*/

   DelimitedCommentCharacters:
     DelimitedCommentCharactersNoAsteriskDelimitedCommentCharactersopt
     * DelimitedCommentAfterAsteriskCharacters

   DelimitedCommentAfterAsteriskCharacters:
     DelimitedCommentNoSlashAsteriskCharacterDelimitedCommentCharactersopt
     * DelimitedCommentAfterAsteriskCharacters

   DelimitedCommentCharactersNoAsterisk:
    Eethvert Unicode-tegn unntatt * (asterisk)

   DelimitedCommentNoSlashAsteriskCharacter:
    ethvert Unicode-tegn unntatt / (skråstrek) eller * (asterisk)

Kommentarer nestes ikke. Tegnsekvensene /* og */ har ingen spesiell betydning i en kommentar på én linje, og tegnsekvensene // og /* har ingen spesiell betydning i en skilletegnkommentar.

Kommentarer behandles ikke i tekstlitteralstrenger.

Følgende eksempel inneholder to kommentarer med skilletegn:

/* Hello, world
*/
"Hello, world"    /* This is an example of a text literal */

Følgende eksempler inneholder tre kommentarer med én linje:

// Hello, world
//
"Hello, world"    // This is an example of a text literal

Litteraler

En litteral er en kildekode-representasjon av en verdi.

   Literal:
     LogicalLiteral
     NumberLiteral
     TextLiteral

Logiske litteraler

En logisk litteral brukes til å skrive verdiene sann og usann og produsere en logisk verdi.

   LogicalLiteral:én av
    truefalse

Nummer-litteraler

En nummer-litteral brukes til å skrive en numerisk verdi, og gir en tallverdi.

   NumberLiteral:
     DecimalDigitsExponentPartopt
     DecimalDigitsDecimalSeparatorDecimalDigitsoptExponentPartopt
     DecimalSeparatorDecimalDigitsExponentPartopt

   DecimalDigits:
     DecimalDigit
     DecimalDigitsDecimalDigit

   DecimalDigit:én av
    0123456789

   ExponentPart:
     ExponentIndicatorSignoptDecimalDigits

   ExponentIndicator:én av
    eE

   Sign:én av
    +-

Tekst-litteraler

En tekst-litteral brukes til å skrive en sekvens med Unicode-tegn og produserer en tekstverdi. Tekstlitteraler står i doble anførselstegn. Hvis du vil inkludere doble anførselstegn i tekstverdien, gjentar du det doble anførselstegnet, som vist i følgende eksempel:

"The ""quoted"" text" // The "quoted" text

   TextLiteral:
     " TextLiteralCharactersopt"

   TextLiteralCharacters:
     TextLiteralCharacterTextLiteralCharactersopt

   TextLiteralCharacter:
     TextCharacterNoDoubleQuote
     DoubleQuoteEscapeSequence

   TextCharacterNoDoubleQuote:
    hvilket som helst Unicode-kodepunkt unntatt doble anførselstegn

   DoubleQuoteEscapeSequence:
    ""

Identifiers

En identifikator er et navn som brukes til å referere til en verdi. Identifikatorer kan være vanlige identifikatorer eller identifikatorer som er i anførselstegn.

   Identifier:
     IdentifierNamemenikkeOperatorellerContextKeyword

   IdentifierName:
     IdentifierStartCharacterIdentifierContinueCharactersopt
     ' SingleQuotedIdentifier'

   IdentifierStartCharacter:
     LetterCharacter
    _

   IdentifierContinueCharacter:
     IdentifierStartCharacter
     DecimalDigitCharacter
     ConnectingCharacter
     CombiningCharacter
     FormattingCharacter

   IdentifierContinueCharacters:
     IdentifierContinueCharacterIdentifierContinueCharactersopt

   LetterCharacter:
    et vilkårlig Unicode-tegn i klassen Stor bokstav (Lu) eller Liten bokstav (Ll)
    hvilket som helst Unicode-tegn i klassen Stor forbokstav (Lt)
    et vilkårlig Unicode-tegn i klassen Bokstavmodifikator (Lm) eller Annen bokstav (Lo)
    hvilket som helst Unicode-tegn i klassen Tallbokstav (Nl)

   CombiningCharacter:
    hvilket som helst Unicode-tegn i klassen Merke uten mellomrom (Mn) eller Merke som kombinerer mellomrom (Mc)

   DecimalDigitCharacter:
    hvilket som helst Unicode-tegn i klassen Desimaltall (Nd)

   ConnectingCharacter:
    hvilket som helst Unicode-tegn i klassen Tegnsetting, sammenbindende (Pc)

   FormattingCharacter:
    hvilket som helst Unicode-tegn i klassen Format (Cf)

Identifikatorer i anførselstegn

En identifikator med enkle anførselstegn kan inneholde en hvilken som helst sekvens med Unicode-tegn som skal brukes som en identifikator, inkludert nøkkelord, mellomrom, kommentarer, operatorer. Enkle anførselstegn støttes med en escape-sekvens med to enkle anførselstegn.

   SingleQuotedIdentifier:
     SingleQuotedIdentifierCharacters

   SingleQuotedIdentifierCharacters:
     SingleQuotedIdentifierCharacterSingleQuotedIdentifierCharactersopt

   SingleQuotedIdentifierCharacter:
     TextCharactersNoSingleQuote
     SingleQuoteEscapeSequence

   TextCharactersNoSingleQuote:
    ethvert Unicode-tegn unntatt ' (U+0027)

   SingleQuoteEscapeSequence:
    ''

Tvetydig identifikator

   DisambiguatedIdentifier:
     TableColumnIdentifier
     GlobalIdentifier

   TableColumnIdentifier:
     Identifier[@Identifier]

   GlobalIdentifier:
     [@ Identifier]

Kontekstnøkkelord

   ContextKeyword:
    Parent
    Self
    ThisItem
    ThisRecord

Skille mellom store og små bokstaver

Power Apps-identifikatorer skiller mellom små og store bokstaver. Redigeringsverktøyet endrer dem automatisk til rett bokstavstørrelse når en formel skrives.

Skilletegn

   DecimalSeparator:
     . (punktum) for språk som bruker punktum som skilletegn for desimaltall, for eksempel 1.23
     , (komma) for språk som bruker et komma som skilletegn for desimaltall, for eksempel 1,23

   ListSeparator:
     , (komma) hvis DecimalSeparator er . (prikk)
     ; (semikolon) hvis DecimalSeparator er , (komma)

   ChainingSeparator:
     ; (semikolon) hvis DecimalSeparator er . (punktum)
     ;; (doble semikolon) hvis DecimalSeparator er , (komma)

Operators

Operatorer brukes i formler for å beskrive operasjoner som involverer én eller flere operander. Uttrykket a + b bruker for eksempel +-operatoren til å legge til de to operandene a og b.

   Operator:
     BinaryOperator
     BinaryOperatorRequiresWhitespace
     PrefixOperator
     PrefixOperatorRequiresWhitespace
     PostfixOperator

   BinaryOperator:én av
    =<<=>>=<>
    +-*/^
    &
    &&||
    inexactin

   BinaryOperatorRequiresWhitespace:
     And Whitespace
     Or Whitespace

   PrefixOperator:
    !

   PrefixOperatorRequiresWhitespace:
     Not Whitespace

   PostfixOperator:
    %

Referanseoperator

   ReferenceOperator:én av
    .!

Objektreferanse

   Reference:
     BaseReference
     BaseReferenceReferenceOperatorReferenceList

   BaseReference:
     Identifier
     DisambiguatedIdentifier
     ContextKeyword

   ReferenceList:
     Identifier
     IdentifierReferenceOperatorReferenceList

Innebygd oppføring

   InlineRecord:
     { InlineRecordListopt}

   InlineRecordList:
     Identifier:Expression
     Identifier:ExpressionListSeparatorInlineRecordList

Innebygd tabell

   InlineTable:
     [ InlineTableListopt]

   InlineTableList:
     Expression
     ExpressionListSeparatorInlineTableList

Expression

   Expression:
     Literal
     Reference
     InlineRecord
     InlineTable
     FunctionCall
     ( Expression)
     PrefixOperatorExpression
     ExpressionPostfixOperator
     ExpressionBinaryOperatorExpression

Koblede uttrykk

   ChainedExpression:
     Expression
     ExpressionChainingSeparatorChainedExpressionopt

Funksjonskall

   FunctionCall:
     FunctionIdentifier(FunctionArgumentsopt)

   FunctionIdentifier:
     Identifier
     Identifier.FunctionIdentifier

   FunctionArguments:
     ChainedExpression
     ChainedExpressionListSeparatorFunctionArguments