Del via


Grammatik i udtryk

Bemærk

Microsoft Power Fx er det nye navn til formelsproget for lærredapps. Vi arbejder på disse artikler, mens vi udtrækker sproget fra lærredapps, integrerer det i andre Microsoft Power Platform-produkter og gør det tilgængeligt som open source. Start med Microsoft Power Fx-oversigten for at få en introduktion til sproget.

Microsoft Power Fx er baseret på formler, der binder et navn til et udtryk. På samme måde som i Excel-regneark, efterhånden som indgående afhængigheder til udtrykket ændres, genberegnes udtrykket, og værdien af navnet ændres, hvilket muligvis overlapper genberegningen til andre formler.

Denne grammatik dækker udtryksdelen i formlen. Binding af et navn for at oprette en formel afhænger af, hvordan Power Fx er integreret. I regneark vises bindingssyntaksen ikke. Den angives kun på den placering, hvor udtrykket skrives, f.eks. når der skrives =B1 i cellen A1. I visse tilfælde kræves der slet ingen binding, og Power Fx bruges som udtryksberegner, f.eks. til understøttelse af beregnede kolonner i en databasetabel. I forbindelse med Power Apps er bindingen implicit, når du arbejder i Power Apps Studio med et serialiseringsformat baseret på YAML til brug uden for Power Apps Studio.

Grammatikregler

Den leksikalske og syntaktiske grammatik præsenteres ved hjælp af grammatiske produktioner. Hver grammatisk produktion definerer et ikke-afsluttende symbol og de mulige udvidelser af det pågældende ikke-afsluttende symbol i sekvenser af ikke-afsluttende eller afsluttende symboler. I grammatiske produktioner vises ikke-afsluttende symboler i kursiv, og afsluttende symboler vises i en skrifttype med fast bredde.

Den første linje i en grammatisk produktion er navnet på det ikke-afsluttende symbol, der defineres efterfulgt af et kolon. Hver af de efterfølgende indrykkede linjer indeholder en mulig udvidelse af det ikke-afsluttende symbol, der er angivet som en sekvens af ikke-afsluttende eller afsluttende symboler. Eksempelvis definerer produktionen:

   GlobalIdentifier:
     [@ Identifikator]

definerer en GlobalIdentifier til at bestå af tokenet [@ efterfulgt af et id efterfulgt af tokenet ].

Hvis der er mere end én mulig udvidelse af et ikke-afsluttende symbol, vises alternativerne på separate linjer. Den sænkede skrift "opt" bruges til at angive et valgfrit symbol. Eksempelvis definerer produktionen:

   FunktionOpkald:
     FunctionIdentifier(FunctionArgumentsopt)

er en forkortelse for:

   FunktionOpkald:
     Funktion-identifikator()
     FunctionIdentifier FunctionArguments()

Alternativerne vises normalt på separate linjer, men i de tilfælde, hvor der er mange alternativer, kan udtrykket "one of" stå foran en liste over udvidelser, der er angivet på en enkelt linje. Det er blot en forkortet udgave i forhold til at lave en liste med alternativer på separate linjer.

Eksempelvis definerer produktionen:

   decimalciffer:et af
    0123456789

er en forkortelse for:

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

Leksikalsk analyse

Produktionen på den leksikalske enhed definerer den leksikable grammatik for et Power Fx-udtryk. Alle gyldige Power Fx-udtryk er i overensstemmelse med denne grammatik.

   Udtryksenhed:
     ExpressionElementstilvalg

   UdtrykElementer:
     UdtrykElement
     ExpressionElementExpressionElementstilvalg

   UdtrykElement:
     Mellemrum
     Kommentar

På leksikalsk niveau består et Power Fx-udtryk af en stream af elementer af typen Blanktegn, Kommentar og Token. Hver af disse produktioner beskrives i de følgende afsnit. Det er kun token-elementer, der er vigtige i den syntaktiske grammatik.

Blanktegn

Mellemrum (whitespace) bruges til at adskille kommentarer og tokens i et Power Apps-dokument.

   Mellemrum:
    en vilkårlig Unicode-mellemrumsseparator (klasse Zs)
    en vilkårlig Unicode-linjeseparator (klasse Zl)
    en vilkårlig Unicode-afsnitsseparator (klasse Zp)
    Vandret tabulatortegn (U+0009)
    Linjeskifttegn (U+000A)
    Lodret tabulatortegn (U+000B)
    Sideskifttegn (U+000C)
    Vognreturtegn (U+000D)
    Næste linje-tegn (U+0085)

Kommentarer

To typer kommentarer understøttes:

  • Kommentarer på en enkelt linje, der starter med tegnene // og løber til slutningen af kildelinjen.
  • Separerede kommentarer, der starter med tegnene /* og slutter med tegnene */. Separerede kommentarer kan løbe over flere linjer.

   Kommentar:
     AfgrænsetKommentar
     SingleLineKommenter

   SingleLineKommentar:
     // SingleLineCommentCharacterstilvalg

   SingleLineCommentTegn:
     SingleLineCommentCharacter
     SingleLineCommentCharacterSingleLineCommentCharactersopt

   SingleLineCommentTegn:
    et vilkårligt Unicode-tegn undtagen NewLineCharacter

   AfgrænsetKommentar:
     /* AfgrænsetKommentarTilmeld tegn*/

   AfgrænsetKommentarTegn:
     BegrænsetKommentarTegnIkkeAsteriskafgrænsetKommentarTegntilvalg
     * AfgrænsetKommentarEfterStjerneTegn

   BegrænsetKommentarEfterStjerneTegn:
     BegrænsetKommentarNejSkråstolStjerneTegnAfgrænsetKommentarTegntilvalg
     * AfgrænsetKommentarEfterStjerneTegn

   BegrænsetKommentarTegnIkkeStjerne:
    et vilkårligt Unicode-tegn undtagen * (stjerne)

   BegrænsetKommentarNejSkråstråStjerneTegn:
    et vilkårligt Unicode-tegn undtagen / (skråstreg) eller * (stjerne)

Kommentarer indlejres ikke. Tegnsekvenserne /* og */ har ingen særlig betydning i en kommentar på en enkelt linje, og tegnsekvenserne // og /* har ingen særlig betydning i en separeret kommentar.

Kommentarer behandles ikke inden i strenge med tekstkonstanter.

Følgende eksempel indeholder to separerede kommentarer:

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

Følgende eksempler omfatter tre kommentarer med en enkelt linje:

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

Konstanter

En konstant (literal) er en repræsentation af en værdi i kildekoden.

   Bogstaveligt:
     Logisk bogstavelig
     TalBogstav
     Tekstbogstaver

Logiske konstanter

En logisk konstant (logical-literal) bruges til at skrive værdierne sand og falsk og resulterer i en logisk værdi.

   LogiskBogstavelig:en af
    truefalse

Talkonstanter

En talkonstant (number-literal) bruges til at skrive en numerisk værdi og resulterer i en talværdi.

   TalBogstav:
     DecimalDigitsExponentPartopt
     DecimalDigitsDecimalSeparatorDecimalDigitsoptExponentPartopt
     DecimalSeparatorDecimalDigitsExponentPartopt

   Decimalcifre:
     Decimalciffer
     DecimalDigitsDecimalDigit

   decimalciffer:et af
    0123456789

   Eksponentens del:
     ExponentIndicatorSignoptDecimalDigits

   ExponentIndicator:en af
    eE

   tegn:en af
    +-

Tekstkonstanter

En tekstkonstant (text literal) bruges til at skrive en sekvens af Unicode-tegn og resulterer i en tekstværdi. Tekstkonstanter er omsluttet af dobbelte anførselstegn. Hvis du vil medtage dobbelte anførselstegn i tekstværdien, skal du gentage de dobbelte anførselstegn som vist i følgende eksempel:

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

   TekstBogstaveligt:
     " TextLiteralCharacterstilvalg"

   TextLiteralCharacters:
     TextLiteralCharacterTextLiteralCharactersopt

   TextLiteralTegn:
     TextCharacterNoDoubleQuote
     DoubleQuoteEscapeSequence

   TextCharacterNoDoubleQuote:
    et vilkårligt Unicode-kodepunkt undtagen dobbelte anførselstegn

   DoubleQuoteEscapeSequence:
    ""

Identifiers

En identifikator (identifier) er et navn, der bruges til at referere til en værdi. Identifikatorer kan enten være almindelige identifikatorer eller identifikatorer i enkelte anførselstegn.

   Identifikator:
     IdentifierName,menikkeOperatorellerContextKeyword

   Identifikatornavn:
     IdentifierStartCharacterIdentifierContinueCharactersopt
     ' SingleQuotedIdentifier'

   IdentifierStartTegn:
     BogstavTegn
    _

   IdentifierContinueCharacter:
     IdentifierStartCharacter
     DecimalDigitTegn
     ForbinderTegn
     KombinereTegn
     FormateringTegn

   IdentifierContinueCharacters:
     IdentifierContinueCharacterIdentifierContinueCharactersopt

   BogstavTegn:
    et vilkårligt Unicode-tegn i klassen Store bogstaver (Lu) eller Små bogstaver (Ll)
    et vilkårligt Unicode-tegn i klassen Alle bogstaver med stort (Lt)
    et vilkårligt Unicode-tegn i klassen Bogstavsmodifikator (Lm) eller Andet bogstav (Lo)
    et vilkårligt Unicode-tegn i klassen Talbogstaver (Nl)

   KombinereKarakter:
    et vilkårligt Unicode-tegn i klassen Mærke uden mellemrum (Mn) eller Mærke, der kombinerer mellemrum (Mc)

   DecimalDigitTegn:
    et vilkårligt Unicode-tegn i klassen Decimaltal (Nd)

   ForbindelseTegn:
    et vilkårligt Unicode-tegn i klassen Tegnsætning for connector (Pc)

   FormateringTegn:
    et vilkårligt Unicode-tegn i klassen Format (Cf)

Id'er i enkelte anførselstegn

En identifikator med enkelte anførselstegn kan indeholde en sekvens på Unicode-tegn, der bruges som identifikator, herunder nøgleord, mellemrum, kommentarer og operatorer. Enkelte anførselstegn understøttes med en escape-sekvens på to enkelte anførselstegn.

   SingleQuotedIdentifier:
     SingleQuotedIdentifierCharacters

   SingleQuotedIdentifierCharacters:
     SingleQuotedIdentifierCharacterSingleQuotedIdentifierCharactersopt

   SingleQuotedIdentifierTegn:
     TextCharactersNoSingleQuote
     SingleQuoteEscapeSequence

   TextCharactersNoSingleQuote:
    et vilkårligt Unicode-tegn undtagen ' (U+0027)

   SingleQuoteEscapeSequence:
    ''

Ikke-flertydigt id

   Flertydig:
     TabelKolonne-identifikator
     GlobalIdentifier

   TabelKolonne-identifikator:
     Identifikator Identifikator[@...]

   GlobalIdentifier:
     [@ Identifikator]

Kontekstafhængige nøgleord

   KontekstNøgleord:
    Parent
    Self
    ThisItem
    ThisRecord

Forskel på store og små bogstaver

Power Apps-id'er skelner mellem store og små bogstaver. Oprettelsesværktøjet ændrer dem automatisk til de rette store eller små bogstaver, når der skrives en formel.

Skilletegn

   DecimalSeparator:
     . (punktum) for sprog, der bruger en prik som separator for decimaltal, f.eks. 1.23
     , (komma) for sprog, der bruger et komma som separator for decimaltal, f.eks. 1,23

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

   Kæde Separator:
     ; (semikolon), hvis DecimalSeparator er . (punktum)
     ;; (dobbelt semikolon), hvis DecimalSeparator er , (komma)

Operators

Operatorer bruges i formler til at beskrive handlinger, der omfatter én eller flere operander. Eksempelvis bruger udtrykket a + b operatoren + til at lægge de to operander a og b sammen.

   Operatør:
     Binær: Operator
     BinaryOperatorRequiresMellemrum
     PræfiksOperator
     PrefixOperatorRequiresMellemrum
     PostfixOperator

   BinaryOperator:en af
    =<<=>>=<>
    +-*/^
    &
    &&||
    inexactin

   BinaryOperatorRequiresWhitespace:
     And Mellemrum
     Or Mellemrum

   PrefixOperator:
    !

   PrefixOperatorRequiresMellemrum:
     Not Mellemrum

   PostfixOperator:
    %

Referenceoperator

   ReferenceOperator:en af
    .!

Objektreference

   Henvisning:
     BaseReference
     BaseReferenceReferenceOperatorReferenceList

   BaseReference:
     Identifikator
     Flertydig: Identifikator
     ContextKeyword

   Referenceliste:
     Identifikator
     IdentifikatorReferenceOperatorReferenceList

Indbygget post

   InlineRecord:
     { InlineRecordListtilvalg}

   InlineRecordList:
     Identifikator-udtryk:...
     Identifikatorudtryk:...ListSeparatorInlineRecordList

Indbygget tabel

   Indbygget tabel:
     [ InlineTableListvælg]

   InlineTableList:
     Udtryk
     UdtrykListSeparatorInlineTableList

Expression

   Udtryk:
     Bogstavelig
     Henvisning
     InlineRecord
     Indbygget tabel
     FunktionOpkald
     ( Udtryk)
     PrefixOperator-udtryk...
     UdtrykPostfixOperator
     UdtrykBinaryOperator-udtryk...

Sammenkædede udtryk

   Kædet udtryk:
     Udtryk
     UdtrykChainingSeparatorChainedExpressionopt

Funktionskald

   FunktionOpkald:
     FunctionIdentifier(FunctionArgumentsopt)

   Funktion-identifikator:
     Identifikator
     Identifikator.FunctionIdentifier

   FunctionArguments:
     Kædet udtryk
     ChainedExpressionListSeparatorFunctionArguments