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:

  GlobalIdentifikator:
    [@Identifikator]

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:

  FunksjonRinge:
    FunctionIdentifier(FunctionArgumentsopt)

er forkortelse for:

  FunksjonRinge:
    Funksjon-identifikator()
    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:

  desimalsiffer:ett av
    0123456789

er forkortelse for:

  Desimalsiffertall:
    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:
    ExpressionElementsvelg

  Uttrykk Elementer:
    Uttrykk Element
    ExpressionElementExpressionElementsvelg

  Uttrykk Element:
    Mellomrom
    Kommentar

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.

  Mellomrom:
    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.

  Kommentar:
    AvgrensetKommentar
    SingleLineKommentar

  SingleLineKommentar:
    //SingleLineCommentCharactersvelger

  SingleLineCommentCharacters:
    EnkeltlinjeKommentartegn
    SingleLineCommentCharacterSingleLineCommentCharactersopt

  SingleLineCommentTegn:
    alle Unicode-tegn unntatt NewLineCharacter

  AvgrensetKommentar:
    /*AvgrensetKommentarTegnvelg*/

  AvgrensetKommentarTegn:
    AvgrensetKommentarTegnIkkeStjerneAvgrensetKommentarTegnvelg
    *AvgrensetKommentarEtterStjerneTegn

  AvgrensetKommentarEtterStjerneTegn:
    AvgrensetKommentarIkkeSkråstrekStjerneTegnAvgrensetKommentarTegnvelg
    *AvgrensetKommentarEtterStjerneTegn

  AvgrensetKommentarTegnIkkeStjerne:
    Eethvert Unicode-tegn unntatt * (asterisk)

  AvgrensetKommentarIkkeSkråstrekStjerneTegn:
    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.

  Bokstavelig talt:
    Logisk bokstavelig
    TallBokstav
    TekstBokstavelig

Logiske litteraler

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

  LogiskBokstavelig:en av
    truefalse

Nummer-litteraler

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

  TallBokstav:
    DecimalDigitsExponentPartopt
    DecimalDigitsDecimalSeparatorDecimalDigitsoptExponentPartopt
    DecimalSeparatorDecimalDigitsExponentPartopt

  Desimalsifre:
    Desimalsiffer
    Desimalsifre desimalsiffer...

  desimalsiffer:ett av
    0123456789

  EksponentSeksjon:
    ExponentIndicatorSignvelgerDecimalDigits

  ExponentIndicator:en av
    eE

  Tegn:en 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

  TekstBokstavelig:
    "TextLiteralCharactersvelger"

  TextLiteralCharacters:
    TextLiteralCharacterTextLiteralCharactersvelge

  TextLiteralTegn:
    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.

  Identifikator:
    IdentifierName,menikkeOperator... ellerContextKeyword

  Identifikatornavn:
    IdentifierStartCharacterIdentifierContinueCharactersopt
    'SingleQuotedIdentifier'

  IdentifikatorTegn:
    Bokstavtegn
    _

  IdentifierContinueCharacter:
    IdentifierStartCharacter
    Desimalsiffertegn
    Kobler tilTegn
    KombinereTegn
    FormateringTegn

  IdentifierContinueCharacters:
    IdentifierContinueCharacterIdentifierContinueCharactersopt

  BokstavTegn:
    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)

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

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

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

  FormateringTegn:
    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:
    SingleQuotedIdentifierCharacterSingleQuotedIdentifierCharactersvelge

  SingleQuotedIdentifierCharacter:
    TextCharactersNoSingleQuote
    SingleQuoteEscapeSequence

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

  SingleQuoteEscapeSequence:
    ''

Tvetydig identifikator

  TvetydigIdentifikator:
    TableColumnIdentifier
    GlobalIdentifikator

  TableColumnIdentifier:
    Identifikator[@identifikator]

  GlobalIdentifikator:
    [@Identifikator]

Kontekstnøkkelord

  KontekstNøkkelord:
    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

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

  ListSeparator:
    , (komma) hvis desimalskilletegnet er . (punktum)
    ; (semikolon) hvis desimalskilletegnet er , (komma)

  Kjetting separator:
    ; (semikolon) hvis DecimalSeparator er . (punktum)
    ;; (dobbelt semikolon) hvis desimalskilletegnet 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.

  Operatør:
    Binær operatør
    BinaryOperatorRequiresMellomrom
    PrefiksOperator
    PrefixOperatorRequiresMellomrom
    PostfixOperator

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

  BinaryOperatorRequiresMellomrom:
    AndMellomrom
    OrMellomrom

  PrefiksOperator:
    !

  PrefixOperatorRequiresMellomrom:
    NotMellomrom

  PostfixOperator:
    %

Referanseoperator

  ReferenceOperator:en av
    .!

Objektreferanse

  Referanse:
    BaseReference
    BaseReferenceReferenceOperatorReferenceList

  BaseReferanse:
    Identifikator
    DisambiguatedIdentifier
    Kontekstnøkkelord

  Referanseliste:
    Identifikator
    IdentifikatorReferenceOperatorReferenceList

Innebygd oppføring

  InlineRecord:
    {InlineRecordList-valg}

  InlineRecordList:
    Uttrykk for identifikator:...
    Identifikatoruttrykk:...ListSeparatorInlineRecordList

Innebygd tabell

  Innebygd tabell:
    [InlineTableList-valg]

  InlineTableList:
    Uttrykk
    UttrykkListSeparatorInlineTableList

Expression

  Uttrykk:
    Bokstavelig
    Referanse
    InlineRecord
    Innebygd tabell
    FunksjonSamtale
    (Uttrykk)
    PrefixOperator-uttrykk...
    UttrykkPostfixOperator
    UttrykkBinaryOperator-uttrykk...

Koblede uttrykk

  Kjedet uttrykk:
    Uttrykk
    UttrykkChainingSeparatorChainedExpressionopt

Funksjonskall

  FunksjonRinge:
    FunctionIdentifier(FunctionArgumentsopt)

  Funksjon-identifikator:
    Identifikator
    Identifikator.FunctionIdentifier

  FunksjonArgumenter:
    KjedetUttrykk
    ChainedExpressionListSeparatorFunctionArguments