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:

   Pengidentifikasi Global:
     [@ Pengenal]

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:

   Panggilan Fungsi:
     FunctionIdentifier(FunctionArgumentsopt)

Adalah singkatan untuk:

   Panggilan Fungsi:
     Pengidentifikasi Fungsi()
     FunctionIdentifierArgumentasi(Fungsi)

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: salah satu dari
    0123456789

Adalah singkatan untuk:

   Digit Desimal:
    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.

   EkspresiUnit :
     ExpressionElementsopt

   Elemen Ekspresi:
     Elemen Ekspresi
     ExpressionElementExpressionElementsopt

   Elemen Ekspresi:
     Spasi
     Komentar

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.

   Ruang kosong:
    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.

   Komentar:
     Komentar yang Dibatasi
     Komentar Baris Tunggal

   Komentar Garis Tunggal:
     // Pilihan SingleLineCommentCharacters

   Karakter Komentar Baris Tunggal:
     Karakter Komentar Baris Tunggal
     SingleLineCommentCharacterSingleLineCommentCharactersopt

   Karakter Komentar Tunggal:
    semua karakter Unicode kecuali NewLineCharacter

   DelimitedComment:
     /* DelimitedCommentCharactersopt*/

   Karakter Komentar yang Dibatasi:
     DelimitedCommentCharactersNoAsteriskDelimitedCommentCharactersopt
     * DelimitedCommentAfterAsteriskCharacters

   DelimitedCommentAfterAsteriskCharacters:
     DelimitedCommentNoSlashAsteriskCharacterDelimitedCommentCharactersopt
     * DelimitedCommentAfterAsteriskCharacters

   DelimitedCommentCharactersNoAsterisk:
    semua karakter Unicode kecuali * (tanda bintang)

   DelimitedCommentNoSlashAsteriskKarakter:
    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:
     Literal Logis
     Angka Literal
     TextLiteral

Literal logis

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

   LogicalLiteral:salah satu dari
    truefalse

Literal angka

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

   Nomorliteral:
     DecimalDigitsExponentPartopt
     DecimalDigits DecimalSeparator DecimalDigitsopt ExponentPart...opt...
     DecimalSeparatorDecimalDigitsExponentPartopt

   Digit Desimal:
     Digit Desimal
     DigitsDigitDesimalDigit

   DecimalDigit: salah satu dari
    0123456789

   ExponentPart:
     Tanda ExponentIndicator...optDecimalDigits

   ExponentIndicator: salah satu dari
    eE

   Tanda: salah satu dari
    +-

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:
     " TextLiteralCharactersmemilih"

   Karakter TextLiteral:
     TextLiteralCharacterTextLiteralCharactersmemilih

   Karakter Literal Teks:
     TextCharacterNoDoubleQuote
     Urutan EscapeKutipan Ganda

   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.

   Pengidentifikasi:
     IdentifierNametetapibukanOperatoratauContextKeyword

   Nama Pengidentifikasi:
     IdentifierStartCharacterIdentifierContinueCharactersopt
     ' Pengidentifikasi Kutipan Tunggal'

   IdentifierStartCharacter:
     Karakter Huruf
    _

   IdentifierContinueCharacter:
     IdentifierStartCharacter
     Karakter DigitDesimal
     MenghubungkanKarakter
     MenggabungkanKarakter
     Pemformatan Karakter

   IdentifierContinueCharacters:
     IdentifierContinueCharacterIdentifierContinueCharactersopt

   Karakter Surat:
    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)

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

   Karakter DigitDesimal:
    karakter Unicode dari kelas digit Desimal (Nd)

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

   Karakter Pemformatan:
    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.

   Pengidentifikasi Tunggal:
     Karakter Pengidentifikasi Tunggal

   Karakter SingleQuotedIdentifier:
     SingleQuotedIdentifierCharacterSingleQuotedIdentifierCharactersopt

   Karakter SingleQuotedIdentifier:
     Karakter TeksTanpa Kutipan Tunggal
     Urutan EscapeKutipan Tunggal

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

   Urutan EscapeKutipan Tunggal:
    ''

Pengidentifikasi penjelas

   DisambiguatedIdentifier:
     Pengidentifikasi Tabel Kolom
     Pengidentifikasi Global

   TableColumnIdentifier:
     Pengidentifikasi Pengidentifikasi[@...]

   Pengidentifikasi Global:
     [@ Pengenal]

Kata kunci konteks

   Kata Kunci Konteks:
    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

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

   Pemisah Daftar:
     , (koma) jika DecimalSeparator adalah . (titik)
     ; (titik koma) jika DecimalSeparator adalah , (koma)

   ChainingSeparator:
     ; (titik koma) jika DecimalSeparator adalah . (titik)
     ;; (titik koma ganda) jika DecimalSeparator adalah , (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:
     Operator Biner
     BinaryOperatorRequiresWhitespace
     AwalanOperator
     PrefixOperatorRequiresWhitespace
     Operator Pascafix

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

   BinaryOperatorRequiresWhitespace:
     And Spasi
     Or Spasi

   PrefixOperator:
    !

   PrefixOperatorRequiresWhitespace:
     Not Spasi

   PostfixOperator:
    %

Operator referensi

   ReferenceOperator:salah satu dari
    .!

Referensi objek

   Referensi:
     Referensi Dasar
     Daftar Referensi BaseReferenceOperator...

   Referensi Dasar:
     Pengenal
     Pengidentifikasi Disambiguasi
     Kata Kunci Konteksi

   Daftar Referensi:
     Pengenal
     Daftar Referensi PengidentifikasiOperator...

Rekaman inline

   Catatan Sebaris:
     { Pilihan InlineRecordList}

   DaftarRekamanInline:
     Pengidentifikasi:Ekspresi
     Pengenal:EkspresiListSeparatorInlineRecordList

Tabel inline

   Tabel Sebaris:
     [ DaftarTabelSebarispilih]

   DaftarTabelSebaris:
     Ekspresi
     EkspresiPemisahDaftarDaftarTabelSebaris

Expression

   Ekspresi:
     Harfiah
     Referensi
     Rekaman Sebaris
     Tabel Sebaris
     Panggilan Fungsi
     ( Ekspresi)
     PrefixOperatorEkspresi
     EkspresiOperator Postfix
     EkspresiBinaryOperatorEkspresi

Ekspresi berantai

   Ekspresi Berantai:
     Ekspresi
     EkspresiPemisah RantaiEkspresi Berantaiopt

Panggilan fungsi

   Panggilan Fungsi:
     Pengidentifikasi Fungsi(Argumen Fungsiopt)

   Pengidentifikasi Fungsi:
     Pengidentifikasi
     Pengidentifikasi.FungsiPengidentifikasi

   Argumen Fungsi:
     Ekspresi Berantai
     EkspresiBerantaiPemisahDaftarArgumenFungsi