Tatabahasa ungkapan

Nota

Microsoft Power Fx ialah nama baharu untuk bahasa formula bagi aplikasi kanvas. Artikel ini ialah kerja yang sedang berjalan kerana kami mengekstrak bahasa daripada aplikasi kanvas, mengintegrasikan ia dengan produk Microsoft Power Platform yang lain dan menjadikan ia tersedia sebagai sumber terbuka. Mulakan dengan Gambaran keseluruhan Microsoft Power Fx untuk pengenalan kepada bahasa.

Microsoft Power Fx adalah berdasarkan formula yang mengikat nama ke ungkapan. Sama seperti dalam lembaran kerja Excel, sebagai kebergantungan masuk ke perubahan ungkapan, ungkapan akan dikira semula dan nilai nama berubah, mungkin akan melata pengiraan semula ke formula lain.

Tatabahasa ini merangkumi bahagian ungkapan formula. Pengikatan pada nama untuk mencipta formula bergantung pada cara Power Fx diintegrasikan. Dalam lembaran kerja, sintaks pengikatan tidak didedahkan, ia tersirat oleh lokasi tempat ungkapan ditulis—contohnya, memasukkan =B1 dalam sel A1. Dalam sesetengah keadaan, pengikatan tidak diperlukan sama sekali dan Power Fx digunakan sebagai penilai ungkapan, contohnya dalam menyokong lajur jadual pangkalan data yang dikira. Bagi Power Apps, pengikatan tersebut tersirat apabila bekerja dalam Power Apps Studio dengan format penyirian berdasarkan YAML untuk digunakan di luar Power Apps Studio.

Kelaziman tatabahasa

Tatabahasa leksikal dan sintaks ditampilkan dengan menggunakan pengeluaran tatabahasa. Setiap penghasilan tatabahasa mentakrifkan simbol bukan terminal dan kemungkinan pengembangan simbol bukan terminal itu ke dalam jujukan simbol bukan terminal atau terminal. Dalam penghasilan tatabahasa, simbol bukan terminal ditunjukkan dalam jenis italik, dan simbol terminal ditunjukkan dalam fon lebar tetap.

Barisan pertama penghasilan tatabahasa ialah nama simbol bukan terminal yang ditakrifkan, diikuti oleh kolon. Setiap baris yang diengsot secara berturut-turut mengandungi kemungkinan pengembangan simbol bukan terminal yang diberikan sebagai jujukan simbol bukan terminal atau terminal. Contohnya, penghasilan:

  GlobalIdentifier:
    [@Pengecam]

mentakrifkan GlobalIdentifier untuk mengandungi token [@, diikuti oleh Pengecam, diikuti oleh token ].

Apabila terdapat lebih daripada satu kemungkinan pengembangan simbol bukan terminal, alternatif disenaraikan pada baris yang berasingan. Subskrip "opt" digunakan untuk menunjukkan simbol pilihan. Contohnya, penghasilan:

  FunctionCall:
    FunctionIdentifier(FunctionArgumentsopt)

ialah trengkas untuk:

  FunctionCall:
    FunctionIdentifier()
    FunctionIdentifier(FunctionArguments)

Sebagai alternatif yang biasanya disenaraikan pada baris berasingan, walaupun dalam kes yang terdapat banyak alternatif, frasa "salah satu" mungkin akan mendahulukan senarai pengembangan yang diberikan pada baris tunggal. Ini hanya trengkas untuk penyenaraian setiap alternatif pada baris berasingan.

Contohnya, penghasilan:

  DecimalDigit:salah satu daripada
    0123456789

ialah trengkas untuk:

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

Analisis leksikal

Pengeluaran unit leksikal mentakrifkan tatabahasa leksikal untuk ungkapan Power Fx. Setiap ungkapan Power Fx yang sah mematuhi tatabahasa ini.

  ExpressionUnit:
    ExpressionElementsopt

  ExpressionElements:
    ExpressionElement
    ExpressionElementExpressionElementsopt

  ExpressionElement:
    Whitespace
    Comment

Pada peringkat leksikal, ungkapan Power Fx terdiri daripada aliran elemen Whitespace, Comment dan Token . Setiap penghasilan ini diliputi dalam bahagian berikut. Hanya elemen Token yang ketara dalam tatabahasa sintaks.

Ruang kosong

Ruang kosong digunakan untuk memisahkan komen dan token dalam dokumen Power Apps.

  Whitespace:
    mana-mana pemisah Ruang Unikod (kelas Zs)
    mana-mana pemisah Baris Unikod (kelas Zl)
    mana-mana pemisah Perenggan Unikod (kelas Zp)
    Aksara tab mendatar (U+0009)
    Aksara suap baris (U+000A)
    Aksara tab menegak (U+000B)
    Aksara suap borang (U+000C)
    Aksara pengembalian penyorong (U+000D)
    Aksara baris berikutnya (U+0085)

Komen

Dua borang komen yang disokong:

  • Komen baris tunggal yang bermula dengan aksara // dan dilanjutkan sehingga ke akhir baris sumber.
  • Komen terbatas yang bermula dengan aksara /* dan berakhir dengan aksara */. Komen terbatas boleh menjangkau berbilang baris.

  Comment:
    DelimitedComment
    SingleLineComment

  SingleLineComment:
    //SingleLineCommentCharactersopt

  SingleLineCommentCharacters:
    SingleLineCommentCharacter
    SingleLineCommentCharacterSingleLineCommentCharactersopt

  SingleLineCommentCharacter:
    mana-mana aksara Unikod kecuali NewLineCharacter

  DelimitedComment:
    /*DelimitedCommentCharactersopt*/

  DelimitedCommentCharacters:
    DelimitedCommentCharactersNoAsteriskDelimitedCommentCharactersopt
    *DelimitedCommentAfterAsteriskCharacters

  DelimitedCommentAfterAsteriskCharacters:
    DelimitedCommentNoSlashAsteriskCharacterDelimitedCommentCharactersopt
    *DelimitedCommentAfterAsteriskCharacters

  DelimitedCommentCharactersNoAsterisk:
    mana-mana aksara Unikod kecuali * (asterisk)

  DelimitedCommentNoSlashAsteriskCharacter:
    mana-mana aksara Unikod kecuali / (garis miring) atau * (asterisk)

Komen tidak disarangkan. Jujukan aksara /* dan */ tidak mempunyai makna khusus dalam komen baris tunggal dan jujukan aksara // dan /* tidak mempunyai makna khas dalam komen terbatas.

Komen tidak diproses dalam rentetan literal teks.

Contoh berikut termasuk dua komen terbatas:

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

Contoh berikut termasuk tiga komen baris tunggal:

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

Literal

Literal ialah perwakilan kod sumber nilai.

  Literal:
    LogicalLiteral
    NumberLiteral
    TextLiteral

Literal logik

Literal logik digunakan untuk menulis nilai yang benar dan palsu dan menghasilkan nilai logik.

  LogicalLiteral:salah satu daripada
    truefalse

Literal nombor

Literal nombor digunakan untuk menulis nilai angka dan menghasilkan nilai nombor.

  NumberLiteral:
    DecimalDigitsExponentPartopt
    DecimalDigitsDecimalSeparatorDecimalDigitsoptExponentPartopt
    DecimalSeparatorDecimalDigitsExponentPartopt

  DecimalDigits:
    DecimalDigit
    DecimalDigitsDecimalDigit

  DecimalDigit:salah satu daripada
    0123456789

  ExponentPart:
    ExponentIndicatorSignoptDecimalDigits

  ExponentIndicator:salah satu daripada
    eE

  Sign:salah satu daripada
    +-

Literal teks

Literal teks digunakan untuk menulis jujukan aksara Unikod dan menghasilkan nilai teks. Literal teks disertakan dalam tanda petikan berganda. Untuk memasukkan tanda petikan berganda dalam nilai teks, ulangi tanda petikan berganda, seperti yang ditunjukkan dalam contoh berikut:

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

  TextLiteral:
    "TextLiteralCharactersopt"

  TextLiteralCharacters:
    TextLiteralCharacterTextLiteralCharactersopt

  TextLiteralCharacter:
    TextCharacterNoDoubleQuote
    DoubleQuoteEscapeSequence

  TextCharacterNoDoubleQuote:
    mana-mana any Unicode titik kod Unikod kecuali petikan tindan

  DoubleQuoteEscapeSequence:
    ""

Identifiers

Pengecam ialah nama yang digunakan untuk merujuk kepada nilai. Pengecam boleh dijadikan pengecam biasa atau pengecam petikan tunggal.

  Identifier:
    IdentifierNametetapibukanOperatoratauContextKeyword

  IdentifierName:
    IdentifierStartCharacterIdentifierContinueCharactersopt
    'SingleQuotedIdentifier'

  IdentifierStartCharacter:
    LetterCharacter
    _

  IdentifierContinueCharacter:
    IdentifierStartCharacter
    DecimalDigitCharacter
    ConnectingCharacter
    CombiningCharacter
    FormattingCharacter

  IdentifierContinueCharacters:
    IdentifierContinueCharacterIdentifierContinueCharactersopt

  LetterCharacter:
    sebarang aksara Unikod kelas Huruf besar (Lu) atau Huruf kecil (Ll)
    sebarang aksara Unikod kelas Huruf tajuk (Lt)
    sebarang aksara Unicod kelas Pengubah suai huruf (Lm) atau Huruf lain (Lo)
    sebarang aksara Unicod kelas Huruf nombor (Nl)

  CombiningCharacter:
    sebarang aksara Unikod kelas Tanda tanpa jarak (Mn) atau Tanda gabungan jarak (Mc)

  DecimalDigitCharacter:
    sebarang aksara Unikod kelas Digit perpuluhan (Nd)

  ConnectingCharacter:
    sebarang aksara Unikod kelas Tanda baca penyambung (Pc)

  FormattingCharacter:
    sebarang aksara Unikod kelas Format (Cf)

Pengecam petikan tunggal

Pengecam yang dipetik tunggal boleh mengandungi sebarang jujukan aksara Unikod untuk digunakan sebagai pengecam, termasuk kata kunci, ruang putih, komen dan operator. Aksara tanda petikan tunggal disokong dengan jujukan lepasan dua tanda petikan tunggal.

  SingleQuotedIdentifier:
    SingleQuotedIdentifierCharacters

  SingleQuotedIdentifierCharacters:
    SingleQuotedIdentifierCharacterSingleQuotedIdentifierCharactersopt

  SingleQuotedIdentifierCharacter:
    TextCharactersNoSingleQuote
    SingleQuoteEscapeSequence

  TextCharactersNoSingleQuote:
    mana-mana aksara Unikod kecuali ' (U+0027)

  SingleQuoteEscapeSequence:
    ''

Pengecam dinyahtaksaan

  DisambiguatedIdentifier:
    TableColumnIdentifier
    GlobalIdentifier

  TableColumnIdentifier:
    Pengecam[@Pengecam]

  GlobalIdentifier:
    [@Pengecam]

Kata kunci konteks

  ContextKeyword:
    Parent
    Self
    ThisItem
    ThisRecord

Kesensitifan huruf

Pengecam Power Apps sensitif huruf. Alat pengarangan akan mengubah mereka ke kes yang betul secara automatik apabila formula ditulis.

Pemisah

  DecimalSeparator:
    . (titik) untuk bahasa yang menggunakan titik sebagai pemisah nombor perpuluhan, contohnya 1.23
    , (koma) untuk bahasa yang menggunakan koma sebagai pemisah bagi nombor perpuluhan, contohnya 1,23

  ListSeparator:
    , (koma) jika DecimalSeparator ialah . (titik)
    ; (koma bernoktah) jika DecimalSeparator ialah , (koma)

  ChainingSeparator:
    ; (koma bernoktah) jika DecimalSeparator ialah . (titik)
    ;; (koma bernoktah berganda) jika DecimalSeparator ialah , (koma)

Operators

Operator digunakan dalam formula untuk menerangkan operasi yang melibatkan satu atau beberapa kendalian. Contohnya, ungkapan a + b menggunakan operator + untuk menambah kendalian kedua-dua a dan b.

  Operator:
    BinaryOperator
    BinaryOperatorRequiresWhitespace
    PrefixOperator
    PrefixOperatorRequiresWhitespace
    PostfixOperator

  BinaryOperator:salah satu daripada
    =<<=>>=<>
    +-*/^
    &
    &&||
    inexactin

  BinaryOperatorRequiresWhitespace:
    AndWhitespace
    OrWhitespace

  PrefixOperator:
    !

  PrefixOperatorRequiresWhitespace:
    NotWhitespace

  PostfixOperator:
    %

Operator rujukan

  ReferenceOperator:salah satu daripada
    .!

Rujukan objek

  Rujukan:
    BaseReference
    BaseReferenceReferenceOperatorReferenceList

  BaseReference:
    Pengecam
    DisambiguatedIdentifier
    ContextKeyword

  ReferenceList:
    Pengecam
    PengecamReferenceOperatorReferenceList

Rekod sebaris

  InlineRecord:
    {InlineRecordListopt}

  InlineRecordList:
    Pengecam:Ungkapan
    Pengecam:UngkapanListSeparatorInlineRecordList

Jadual sebaris

  InlineTable:
    [InlineTableListopt]

  InlineTableList:
    Ungkapan
    UngkapanListSeparatorInlineTableList

Ungkapan

  Ungkapan:
    Literal
    Rujukan
    InlineRecord
    InlineTable
    FunctionCall
    (Ungkapan)
    PrefixOperatorUngkapan
    UngkapanPostfixOperator
    UngkapanBinaryOperatorUngkapan

Ungkapan berantai

  ChainedExpression:
    Ungkapan
    UngkapanChainingSeparatorChainedExpressionopt

Panggilan fungsi

  FunctionCall:
    FunctionIdentifier(FunctionArgumentsopt)

  FunctionIdentifier:
    Pengecam
    Pengecam.FunctionIdentifier

  FunctionArguments:
    ChainedExpression
    ChainedExpressionListSeparatorFunctionArguments