Bagikan melalui


Tata bahasa Ekspresi

Catatan

Microsoft Power Fx adalah nama baru untuk bahasa rumus untuk aplikasi kanvas. Artikel-artikel ini sedang berlangsung saat kami mengekstrak bahasa dari aplikasi kanvas, mengintegrasikannya dengan produk Microsoft Power Platform lain, dan membuatnya tersedia sebagai sumber terbuka. Mulai dengan Gambaran Umum Microsoft Power Fx untuk pengenalan bahasa.

Microsoft Power Fx didasarkan pada rumus yang mengikat nama ke ekspresi. Sama seperti pada lembar kerja Excel, karena dependensi masuk terhadap perubahan ekspresi, ekspresi akan dihitung ulang dan nilai nama berubah, yang mungkin melakukan kaskading hitung ulang menjadi rumus lain.

Tata bahasa ini mencakup bagian ekspresi rumus. Mengikat nama untuk membuat rumus tergantung pada bagaimana Power Fx terintegrasi. Di lembar kerja, sintaks pengikat tidak diekspos, ia tersirat berdasarkan lokasi ditulisnya ekspresi—misalnya, memasukkan =B1 ke sel A1. Dalam kasus tertentu, tidak ada pernyataan yang diperlukan sama sekali dan Power Fx digunakan sebagai evaluator ekspresi, misalnya dalam mendukung kolom hitung tabel database. Untuk Power Apps, ikatan tersirat bila bekerja di Power Apps Studio dengan format serialisasi berdasarkan YAML untuk digunakan di luar Power Apps Studio.

Aturan tata bahasa

Tata bahasa sintaktis dan leksikal disajikan dengan menggunakan produksi tata bahasa. Setiap produksi tata bahasa mendefinisikan simbol non-terminal dan kemungkinan perluasan simbol non-terminal tersebut ke dalam urutan simbol non-terminal atau terminal. Pada produksi tatabahasa, simbol non-terminal ditampilkan dalam huruf miring, dan simbol terminal ditampilkan dalam font lebar tetap.

Baris pertama produksi tata bahasa adalah nama simbol non-terminal yang didefinisikan, diikuti titik dua. Setiap baris yang terindentasi berturut-rata berisi kemungkinan perluasan simbol non-terminal yang diberikan sebagai urutan simbol non-terminal atau terminal. Misalnya, produksi:

   GlobalIdentifier:
     [@ pengidentifikasi]

Mendefinisikan GlobalIdentifier untuk terdiri dari token [@, diikuti oleh Pengidentifikasi, diikuti token ].

Bila terdapat lebih dari satu kemungkinan perluasan simbol non-terminal, alternatif akan tercantum pada baris terpisah. Subskrip "opt" digunakan untuk menunjukkan simbol opsional. Misalnya, produksi:

   FunctionCall:
     FunctionIdentifier(FunctionArgumentsopt)

Adalah singkatan untuk:

   FunctionCall:
     FunctionIdentifier()
     FunctionIdentifier(FunctionArguments)

Alternatif biasanya tercantum pada baris terpisah, meskipun dalam kasus dengan banyak alternatif, frasa "one of" dapat mendahului daftar perluasan yang diberikan pada satu baris. Ini hanya singkatan untuk daftar setiap alternatif pada baris terpisah.

Misalnya, produksi:

   DecimalDigit:one of
    0123456789

Adalah singkatan untuk:

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

Analisis leksikal

Produksi unit leksikal mendefinisikan tata bahasa inggris untuk ekspresi Power Fx. Setiap ekspresi Power Fx yang valid sesuai dengan tata bahasa ini.

   ExpressionUnit:
     ExpressionElementsopt

   ExpressionElements:
     ExpressionElement
     ExpressionElementExpressionElementsopt

   ExpressionElement:
     Whitespace
     Comment

Pada tingkat leksikal, ekspresi Power Fx terdiri dari aliran Whitespace, Komentar, dan elemen Token. Setiap produksi ini tercakup dalam bagian berikut. Hanya elemen Token yang signifikan dalam tata letak sintaktis.

Spasi

Whitespace digunakan untuk memisahkan komentar dan token dalam dokumen Power Apps.

   Whitespace:
    segala pemisah Spasi Unicode (kelas Zs)
    segala pemisah baris Unicode (kelas Zl)
    segala pemisah paragraf Unicode (kelas Zp)
    Karakter tab horizontal (U+0009)
    Karakter umpan baris (U+000A)
    Karakter tab vertikal (U+000B)
    Karakter umpan formulir (U+000C)
    Karakter Carriage return (U+000D)
    Karakter baris berikutnya (U+0085)

Komentar

Dua formulir komentar didukung:

  • Komentar satu baris yang dimulai dengan karakter // dan diperluas ke akhir baris sumber.
  • Komentar berpemisah yang diawali dengan karakter /* dan diakhiri dengan karakter */. Komentar yang dibatasi dapat menjangkau beberapa baris.

   Comment:
     DelimitedComment
     SingleLineComment

   SingleLineComment:
     // SingleLineCommentCharactersopt

   SingleLineCommentCharacters:
     SingleLineCommentCharacter
     SingleLineCommentCharacterSingleLineCommentCharactersopt

   SingleLineCommentCharacter:
    semua karakter Unicode kecuali NewLineCharacter

   DelimitedComment:
     /* DelimitedCommentCharactersopt*/

   DelimitedCommentCharacters:
     DelimitedCommentCharactersNoAsteriskDelimitedCommentCharactersopt
     * DelimitedCommentAfterAsteriskCharacters

   DelimitedCommentAfterAsteriskCharacters:
     DelimitedCommentNoSlashAsteriskCharacterDelimitedCommentCharactersopt
     * DelimitedCommentAfterAsteriskCharacters

   DelimitedCommentCharactersNoAsterisk:
    semua karakter Unicode kecuali * (tanda bintang)

   DelimitedCommentNoSlashAsteriskCharacter:
    semua karakter Unicode kecuali / (garis miring) atau * (tanda bintang)

Komentar tidak dikurung. Urutan karakter /* dan */ tidak memiliki arti khusus dalam komentar satu baris dan urutan karakter // serta /* tidak memiliki arti khusus dalam komentar berpemisah.

Komentar tidak diproses dalam string literal teks.

Contoh berikut mencakup dua komentar yang berpemisah:

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

Contoh berikut mencakup tiga komentar satu baris:

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

Literal

literal adalah representasi kode sumber suatu nilai.

   Literal:
     LogicalLiteral
     NumberLiteral
     TextLiteral

Literal logis

literal logis digunakan untuk menulis nilai yang benar dan salah, dan menghasilkan nilai logika.

   LogicalLiteral:one of
    truefalse

Literal angka

literal angka digunakan untuk menulis nilai numerik dan menghasilkan nilai angka.

   NumberLiteral:
     DecimalDigitsExponentPartopt
     DecimalDigitsDecimalSeparatorDecimalDigitsoptExponentPartopt
     DecimalSeparatorDecimalDigitsExponentPartopt

   DecimalDigits:
     DecimalDigit
     DecimalDigitsDecimalDigit

   DecimalDigit:one of
    0123456789

   ExponentPart:
     ExponentIndicatorSignoptDecimalDigits

   ExponentIndicator:one of
    eE

   Sign:one of
    +-

Literal teks

Teks literal digunakan untuk menulis urutan karakter Unicode dan menghasilkan nilai teks. Literal teks dikurangkan dalam tanda kutip ganda. Untuk mencakup tanda kutip ganda dalam nilai teks, ulangi tanda kutip ganda, seperti ditunjukkan dalam contoh berikut:

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

   TextLiteral:
     " TextLiteralCharactersopt"

   TextLiteralCharacters:
     TextLiteralCharacterTextLiteralCharactersopt

   TextLiteralCharacter:
     TextCharacterNoDoubleQuote
     DoubleQuoteEscapeSequence

   TextCharacterNoDoubleQuote:
    setiap titik kode Unicode kecuali tanda kutip ganda

   DoubleQuoteEscapeSequence:
    ""

Identifiers

Pengidentifikasi adalah nama yang digunakan untuk merujuk ke nilai. Pengidentifikasi dapat berupa pengidentifikasi biasa atau satu pengidentifikasi bertanda kutip tunggal.

   Identifier:
     IdentifierNametetapibukanOperatoratauContextKeyword

   IdentifierName:
     IdentifierStartCharacterIdentifierContinueCharactersopt
     ' SingleQuotedIdentifier'

   IdentifierStartCharacter:
     LetterCharacter
    _

   IdentifierContinueCharacter:
     IdentifierStartCharacter
     DecimalDigitCharacter
     ConnectingCharacter
     CombiningCharacter
     FormattingCharacter

   IdentifierContinueCharacters:
     IdentifierContinueCharacterIdentifierContinueCharactersopt

   LetterCharacter:
    karakter Unicode apa pun dari huruf besar (Lu) atau huruf kecil (Ll)
    segala karakter Unicode dari kelas huruf Judul (Lt)
    Karakter Unicode apa pun dari pemodifikasi huruf (Lm) atau Huruf lainnya (Lo)
    segala karakter Unicode dari kelas huruf angka (Nl)

   CombiningCharacter:
    Setiap karakter Unicode dari tanda Non-spasi (Mn) atau tanda penggabungan Spasi (Mc)

   DecimalDigitCharacter:
    karakter Unicode dari kelas digit Desimal (Nd)

   ConnectingCharacter:
    setiap karakter Unicode dari kelas tanda baca Konektor (Pc)

   FormattingCharacter:
    semua karakter Unicode dari kelas Format (Cf)

Pengidentifikasi tanda kutip tunggal

Pengidentifikasi kuotasi tunggal dapat berisi urutan karakter Boolean yang akan digunakan sebagai pengidentifikasi, termasuk kata kunci, spasi, komentar, dan operator. Karakter tanda kutip tunggal didukung dengan urutan escape dari dua tanda kutip tunggal.

   SingleQuotedIdentifier:
     SingleQuotedIdentifierCharacters

   SingleQuotedIdentifierCharacters:
     SingleQuotedIdentifierCharacterSingleQuotedIdentifierCharactersopt

   SingleQuotedIdentifierCharacter:
     TextCharactersNoSingleQuote
     SingleQuoteEscapeSequence

   TextCharactersNoSingleQuote:
    semua karakter Unicode kecuali ' (U+0027)

   SingleQuoteEscapeSequence:
    ''

Pengidentifikasi penjelas

   DisambiguatedIdentifier:
     TableColumnIdentifier
     GlobalIdentifier

   TableColumnIdentifier:
     Identifier[@Identifier]

   GlobalIdentifier:
     [@ Identifier]

Kata kunci konteks

   ContextKeyword:
    Parent
    Self
    ThisItem
    ThisRecord

Kepekaan besar huruf

Pengidentifikasi Power Apps bersifat peka besar huruf. Alat penulisan akan secara otomatis mengubahnya ke besar huruf yang benar saat rumus sedang ditulis.

Pemisah

   DecimalSeparator:
     . (titik) untuk bahasa yang menggunakan titik sebagai pemisah untuk angka desimal, misalnya 1.23
     , (koma) untuk bahasa yang menggunakan koma sebagai pemisah untuk angka desimal, misalnya 1,23

   ListSeparator:
     , (koma) if DecimalSeparator is . (titik)
     ; (titik koma) if DecimalSeparator is , (koma)

   ChainingSeparator:
     ; (titik koma) if DecimalSeparator is . (titik)
     ;; (titik koma ganda) if DecimalSeparator is , (koma)

Operators

Operator digunakan dalam rumus untuk mendeskripsikan operasi yang melibatkan satu atau beberapa operan. Contohnya, ekspresi a + b menggunakan operator + untuk menambahkan dua operan a dan b.

   Operator:
     BinaryOperator
     BinaryOperatorRequiresWhitespace
     PrefixOperator
     PrefixOperatorRequiresWhitespace
     PostfixOperator

   BinaryOperator:one of
    =<<=>>=<>
    +-*/^
    &
    &&||
    inexactin

   BinaryOperatorRequiresWhitespace:
     And Whitespace
     Or Whitespace

   PrefixOperator:
    !

   PrefixOperatorRequiresWhitespace:
     Not Whitespace

   PostfixOperator:
    %

Operator referensi

   ReferenceOperator:one of
    .!

Referensi objek

   Reference:
     BaseReference
     BaseReferenceReferenceOperatorReferenceList

   BaseReference:
     pengidentifikasi
     DisambiguatedIdentifier
     ContextKeyword

   ReferenceList:
     pengidentifikasi
     IdentifierReferenceOperatorReferenceList

Rekaman inline

   InlineRecord:
     { InlineRecordListopt}

   InlineRecordList:
     Identifier:Expression
     Identifier:ExpressionListSeparatorInlineRecordList

Tabel inline

   InlineTable:
     [ InlineTableListopt]

   InlineTableList:
     Expression
     ExpressionListSeparatorInlineTableList

Expression

   Expression:
     Literal
     Reference
     InlineRecord
     InlineTable
     FunctionCall
     ( Expression)
     PrefixOperatorExpression
     ExpressionPostfixOperator
     ExpressionBinaryOperatorExpression

Ekspresi berantai

   ChainedExpression:
     Expression
     ExpressionChainingSeparatorChainedExpressionopt

Panggilan fungsi

   FunctionCall:
     FunctionIdentifier(FunctionArgumentsopt)

   FunctionIdentifier:
     pengidentifikasi
     Identifier.FunctionIdentifier

   FunctionArguments:
     ChainedExpression
     ChainedExpressionListSeparatorFunctionArguments