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:
    AndWhitespace
    OrWhitespace

  PrefixOperator:
    !

  PrefixOperatorRequiresWhitespace:
    NotWhitespace

  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