Comparteix a través de


Gramàtica d'expressió

Nota

Microsoft Power Fx és el nom nou del llenguatge de formules de les aplicacions de llenç. Aquests articles són un treball en curs a mesura que extraiem el llenguatge de les aplicacions de llenç, l'integrem amb altres productes del Microsoft Power Platform i fem que estigui disponible com a codi obert. Comenceu amb la Informació general del Microsoft Power Fxper veure una introducció al llenguatge.

Microsoft Power Fx es basa en fórmules que uneixen un nom a una expressió. Igual que als fulls de càlcul de l'Excel, com que les dependències d'entrada a l'expressió canvien, l'expressió es torna a calcular i el valor del nom canvia, probablement desplegant el nou càlcul en altres fórmules.

Aquesta gramàtica cobreix la part de l'expressió de la fórmula. La funció de vincular amb un nom per crear una fórmula depèn de la manera com s'integra el Power Fx. En els fulls de càlcul, la sintaxi d'enllaç no està exposada, està implícita en la ubicació on s'escriu l'expressió; per exemple, introduint =B1 a la cel·la A1. En alguns casos, no es necessita cap tipus de vinculació i el Power Fx s'utilitza com a avaluador d'expressions, per exemple, a l'hora de donar suport a les columnes calculades d'una taula de base de dades. Per al Power Apps, la vinculació és implícita quan es treballa al Power Apps Studio amb un format de serialització basat en YAML per utilitzar-lo fora del Power Apps Studio.

Convencions gramaticals

Les gramàtiques lèxiques i sintàctiques es presenten utilitzant produccions de gramàtica. Cada producció de gramàtica defineix un símbol no terminal i les possibles ampliacions d'aquest símbol no terminal en seqüències de símbols no terminals o terminals. En les produccions de gramàtiques, els símbols no terminals es mostren en cursiva, i els símbols terminals es mostren en un tipus de lletra d'amplada fixa.

La primera línia d'una producció de gramàtica és el nom del símbol no defineix que es defineix, seguit de dos punts. Cada línia successiva sagnada conté una possible ampliació del símbol no terminal proporcionat com a seqüència de símbols no terminals o terminals. Per exemple, la producció:

  Identificador global:
    [@Identificador]

defineix un GlobalIdentifier que consisteix en el testimoni [@, seguit d'un Identificador, seguit del testimoni].

Quan hi ha més d'una possible ampliació d'un símbol no terminal, les alternatives es mostren en línies separades. El subíndex "opt" s'utilitza per indicar un símbol opcional. Per exemple, la producció:

  Crida a la funció:
    FunctionIdentifier(FunctionArgumentsopt)

és una forma breu de:

  Crida a la funció:
    Identificador de funció()
    FunctionIdentifier(FunctionArguments)

Les alternatives es mostren normalment en línies separades, encara que en els casos en què hi ha moltes alternatives, la frase "one of" podria precedir una llista d'ampliacions proporcionades en una sola línia. Això és simplement una manera abreujada de llistar cadascuna de les alternatives en línies separades.

Per exemple, la producció:

  DecimalDigit:un dels
    0123456789

és una forma breu de:

  Dígit decimal:
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9

Anàlisi lèxica

La producció d'unitats lèxiques defineix la gramàtica lèxica per a una expressió del Power Fx. Cada expressió vàlida del Power Fx compleix aquesta gramàtica.

  ExpressionUnit:
    ExpressionElementsopt

  ExpressionElements:
    ExpressióElement
    ExpressionElementExpressionElementsopt

  ExpressionElement:
    Espai en blanc
    Comentari

En el nivell lèxic, una expressió del Power Fx consisteix en un flux d'elements WhiteSpace, Comment i Token. Cadascuna d'aquestes produccions es cobreix a les seccions següents. Només els elements Testimoni són importants a la gramàtica sintàctica.

Espai en blanc

Els espais en blanc s'utilitzen per separar els comentaris i els testimonis d'un document del Power Apps.

  Espai en blanc:
    qualsevol separador d'espai Unicode (classe Zs)
    qualsevol separador de línia Unicode (classe Zl)
    qualsevol separador de paràgraf Unicode (classe Zp)
    Caràcter de pestanya horitzontal (U+0009)
    Caràcter de retorn de carro de línia (U+000A)
    Caràcter de pestanya vertical (U+000B)
    Caràcter de retorn de carro de formulari (U+000C)
    Caràcter de retorn de carro (U+000D)
    Caràcter de línia següent (U+0085)

Comentaris

S'admeten dues formes de comentaris:

  • Comentaris d'una sola línia que comencen amb els caràcters // i s'estenen fins al final de la línia d'origen.
  • Comentaris delimitats que comencen amb els caràcters /* i acaben amb els caràcters */. Els comentaris delimitats poden abastar diverses línies.

  Comentari:
    Comentari delimitat
    Comentari de línia única

  Comentari de línia única:
    //SingleLineCommentCharactersopt

  Caràcters SingleLineComment:
    Caràcter SingleLineCommentCharacter
    SingleLineCommentCharacterSingleLineCommentCharactersopt

  Caràcter SingleLineComment:
    qualsevol caràcter Unicode, tret d'un NewLineCharacter

  Comentari delimitat:
    /*DelimitedCommentCharactersopt*/

  Caràcters delimitats:
    DelimitedCommentCharactersNoAsteriskDelimitedCommentCharactersopt
    *DelimitedCommentAfterAsteriskCharacters

  DelimitedCommentAfterAsteriskCharacters:
    DelimitedCommentNoSlashAsteriskCharacterDelimitedCommentCharactersopt
    *DelimitedCommentAfterAsteriskCharacters

  DelimitedCommentCharactersNoAsterisk:
    qualsevol caràcter Unicode excepte * (asterisc)

  DelimitedCommentNoSlashAsteriskCharacter:
    qualsevol caràcter Unicode excepte / (barra inclinada) o * (asterisc)

Els comentaris no s'han imbricats. Les seqüències de caràcters /* i */ no tenen cap significat especial dins d'un comentari en una sola línia i les seqüències de caràcters // i /* no tenen cap significat especial dins d'un comentari delimitat.

Els comentaris no es processen dins de les cadenes de text literal.

L'exemple següent inclou dos comentaris delimitats:

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

Els exemples següents inclouen tres comentaris d'una sola línia:

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

Literals

Un literal és una representació en codi font d'un valor.

  Literal:
    LògicLiteral
    NúmeroLiteral
    TextLiteral

Literals lògics

S'utilitza un literal lògic per escriure els valors certs i falsos, i produir un valor lògic.

  LogicalLiteral:un dels
    truefalse

Literals de número

Un literal de numero s'utilitza per escriure un valor numèric i produir un valor numèric.

  NumberLiteral:
    DecimalDigitsExponentPartopt
    DecimalDigitsDecimalSeparatorDecimalDigitsoptExponentPartopt
    DecimalSeparatorDecimalDigitsExponentPartopt

  Dígits decimals:
    Dígit decimal
    DecimalDigitsDecimalDigit

  DecimalDigit:un dels
    0123456789

  Part de l'exponent:
    Signeindicador exponentoptDecimalDigits

  ExponentIndicator:un dels
    eE

  Signe:un dels
    +-

Literals de text

Un literal de text s'utilitza per escriure una seqüència de caràcters Unicode i produir un valor de text. Els literals de text estan tancats amb cometes dobles. Per incloure cometes dobles al valor de text, repetiu les cometes dobles, tal com es mostra a l'exemple següent:

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

  TextLiteral:
    "TextLiteralCharactersopta"

  TextLiteralCharacters:
    TextLiteralCharacterTextLiteralCharactersopt

  TextLiteralCharacter:
    TextCharacterNoDoubleQuote
    Seqüència d'escapament de cometes dobles

  TextCharacterNoDoubleQuote:
    qualsevol punt de codi Unicode excepte cometes dobles

  Seqüència d'escapament de cites dobles:
    ""

Identificadors

Un identificador és un nom que s'utilitza per fer referència a un valor. Els identificadors poden ser identificadors normals o identificadors entre cometes simples.

  Identificador:
    IdentifierNameperònoOperatorniContextKeyword

  Nom de l'identificador:
    IdentifierStartCharacterIdentifierContinueCharactersopt
    'Identificador entre cometes'

  IdentifierStartCharacter:
    Caràcter de la lletra
    _

  IdentifierContinueCharacter:
    IdentifierStartCharacter
    Caràcter decimal
    ConnectingCharacter
    CombinacióCaràcter
    FormattingCharacter

  IdentifierContinueCharacters:
    IdentifierContinueCharacterIdentifierContinueCharactersopt

  Caràcter de lletra:
    qualsevol caràcter Unicode de la classe En majúscules (Lu) o Lletra en minúscules (Ll)
    qualsevol caràcter Unicode de la classe Lletra de títol (Lt)
    qualsevol caràcter Unicode de la classe Modificador de lletra (Lm) o Lletra altres (Lo)
    qualsevol caràcter Unicode de la classe Lletra de número (Nl)

  Caràcter combinat:
    qualsevol caràcter Unicode de la classe Marca sense espaiat (Mn) o Marca de combinació d'espaiat (Mc)

  DecimalDigitCharacter:
    qualsevol caràcter Unicode de la classe Dígit decimal (Nd)

  Personatge de connexió:
    qualsevol caràcter Unicode de la classe Puntuació de connector (Pc)

  FormattingCharacter:
    qualsevol caràcter Unicode de la classe Format (Cf)

Identificadors de cometes simples

Un identificador entre cometes simples pot contenir qualsevol seqüència de caràcters Unicode que s'utilitzin com a identificador, incloent-hi paraules clau, espais blancs, comentaris i operadors. Els caràcters de cometes simples estan admesos amb una seqüència d'escapada de dues marques de cometes simples.

  Identificador entre cometes:
    SingleQuotedIdentifierCharacters

  Caràcters identificators:
    SingleQuotedIdentifierCharacterSingleQuotedIdentifierCharactersopt

  SingleQuotedIdentifierCharacter:
    TextCharactersNoSingleQuote
    Seqüència d'escapament de cometes simples

  TextCharactersNoSingleQuote:
    qualsevol caràcter Unicode excepte ' (U+0027)

  Seqüència SingleQuoteEscape:
    ''

Identificador desambiguat

  Identificador desambiguat:
    Identificador de columna de taula
    Identificador global

  Identificador de columna de taula:
    Identificador[@identificador]

  Identificador global:
    [@Identificador]

Paraules clau de context

  ContextParaula clau:
    Parent
    Self
    ThisItem
    ThisRecord

Distinció entre majúscules i minúscules

Els identificadors del Power Apps distingeixen entre majúscules i minúscules. L'eina de creació els canviarà automàticament al cas correcte quan s'escrigui una fórmula.

Separadors

  Separador decimal:
    . (punt) per a les llengües que utilitzen un punt com a separador per als nombres decimals, per exemple 1.23
    , (coma) per a llengües que utilitzen una coma com a separador per a nombres decimals, per exemple 1,23

  Separador de llistes:
    , (coma) si DecimalSeparator és . (punt)
    ; (punt i coma) si DecimalSeparator és , (coma)

  Separator d'encadenament:
    ; (punt i coma) si DecimalSeparator és . (punt)
    ;; (punt i coma doble) si DecimalSeparator és , (coma)

Operadors

Els operadors s'utilitzen a les fórmules per descriure operacions que impliquen un o diversos operands. Per exemple, l'expressió a + b utilitza l'operador + per afegir els dos operands a i b.

  Operador:
    Operador binari
    BinaryOperatorRequiresWhitespace
    Operador de prefix
    PrefixOperatorRequiresWhitespace
    PostfixOperator

  BinaryOperator:un dels
    =<<=>>=<>
    +-*/^
    &
    &&||
    inexactin

  BinaryOperatorRequiresWhitespace:
    AndEspai en blanc
    OrEspai en blanc

  Operador de prefix:
    !

  PrefixOperatorRequiresWhitespace:
    NotEspai en blanc

  PostfixOperator:
    %

Operador de referència

  ReferenceOperator:un dels
    .!

Referència d'objectes

  Referència:
    BaseReference
    BaseReferenceReferenceOperatorReferenceList

  BaseReferència:
    Identificador
    Identificador desambiguat
    Paraula clau context

  Llista de referències:
    Identificador
    IdentificadorReferenceOperatorReferenceList

Registre en línia

  Registre en línia:
    {InlineRecordListopt}

  Llista de registres en línia:
    Expressió identificadora:...
    Identificador:d'expressionsListSeparatorInlineRecordList

Taula en línia

  Taula en línia:
    [InlineTableListopt]

  InlineTableList:
    Expressió
    Separatorde llista d'expressionsInlineTableList

Expression

  Expressió:
    Literal
    Referència
    Registre en línia
    Taula en línia
    Crida a la funció
    (Expressió)
    Expressió PrefixOperator...
    ExpressióPostfixOperator
    ExpressióBinaryOperator...

Expressions encadenades

  Expressió encadenada:
    Expressió
    Encadenament d'expressióSeparatorChainedExpressionopt

Crida de funció

  Crida a la funció:
    FunctionIdentifier(FunctionArgumentsopt)

  Identificador de funció:
    Identificador
    Identificador.FunctionIdentifier

  FunctionArguments:
    Expressió encadenada
    ChainedExpressionListSeparatorFunctionArguments