共用方式為


運算式文法

Note

Microsoft Power Fx 是畫布應用程式語言的新名稱。 當我們從畫布應用程式中擷取語言,將其與其他 Microsoft Power Platform 產品整合並打造開放原始碼時,這些文章仍會持續進行。 從 Microsoft Power Fx 概覽開始以取得對該語言的介紹。

Microsoft Power Fx根據繫結運算式名稱的公式。 就像在 Excel 工作表中一樣,隨著對運算式的入站相依性變更,將重新計算運算式,且名稱的值也會變更,可能會將重新計算級聯爲其他公式。

該文法涵蓋公式的運算式部分。 繫結至名稱以建立公式取決於 Power Fx 的整合方式。 在工作表中,未揭露繫結語法,而是由運算式的編寫位置隱含,例如:在 A1 格輸入 =B1。 某些情況根本不需要繫結,Power Fx 會做為運算式評估工具使用,例如,位於支援資料庫資料表的計算結果欄中。 對於 Power Apps,在 Power Apps Studio 中透過可在 Power Apps Studio 外部使用的 YAML 序列化格式隱含繫結。

文法慣例

語彙和語法文法會使用「文法生產」來呈現。 每個文法生產都會將非終端符號及該非終端符號的可能擴充定義於非終端或終端符號序列中。 在文法生產中,非終端符號會以斜體樣式顯示,而「終端」符號會以固定寬度的字型顯示。

文法生產的第一行是所要定義非終端符號名稱,後面接著冒號。 每個後續的縮排行,都包含語法的可能擴充,並以非終端或終端符號序列的形式提供。 例如,生產:

   全域識別碼
     [@ 標識碼]

定義 GlobalIdentifier,其由代用文字[@,加上識別碼,加上代用文字] 組成。

當非終端符號有多個可能的擴充時,替代項目會列於個別的行上。 下標 "opt" 用於表示選擇性符號。 例如,生產:

   函數呼叫
     FunctionIdentifier(FunctionArgumentsopt)

是下列的簡略版:

   函數呼叫
     函數標識碼()
     FunctionIdentifier(函數參數)

替代項目通常會列在個別行上,但在有許多替代項目的情況下,片語 "one of" 可能會位於單一行上指定的擴充清單前面。 這是在個別行上列出每個替代項目的簡略版。

例如,生產:

   DecimalDigit以下值之一
    0123456789

是下列的簡略版:

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

語彙分析

lexical-unit 生產會定義 Power Fx 運算式的語彙文法。 每個有效的 Power Fx 運算式都符合這個文法。

   ExpressionUnit 的 ExpressionUnit 中:
     ExpressionElements選項

   ExpressionElements 的 ExpressionElements 中:
     表達式元素
     ExpressionElementExpressionElements選項

   ExpressionElement 的 ExpressionElement 中:
     空白
     評論

在語彙層級,Power Fx 運算式是由 WhitespaceCommentToken 項目的串流組成。 下列章節將討論這些生產。 只有 Token 項目在語法文法中是重要的。

空格

空白用來分隔 Power Apps 文件內的註解和代用文字。

   空白:
    任何 Unicode 空格分隔符號 (Zs 類別)
    任何 Unicode 行分隔符號 (Zl 類別)
    任何 Unicode 段落分隔符號 (Zp 類別)
    水平定位字元 (U+0009)
    換行字元 (U+000A)
    垂直定位字元 (U+000B)
    換頁字元 (U+000C)
    歸位字元 (U+000D)
    新行字元 (U+0085)

註解

支援兩種形式的註解:

  • 「單行註解」以 // 字元開頭,並延伸至來源行的結尾。
  • 「分隔註解」以 /* 字元開頭,並以 */ 字元結尾。 分隔註解可能會跨越多行。

   評論
     DelimitedComment 的
     SingleLineComment

   SingleLineComment 的調用
     // SingleLineCommentCharacters選項

   SingleLineCommentCharacters 中:
     SingleLineCommentCharacter(單行註釋字元)
     SingleLineCommentCharacterSingleLineCommentCharacters選項

   SingleLineCommentCharacter
    除 NewLineCharacter 之外的任何 Unicode 字元

   DelimitedComment
     /* DelimitedCommentCharacters選項*/

   DelimitedCommentCharacters 中:
     DelimitedCommentCharactersNoAsteriskDelimitedCommentCharacters選項
     * DelimitedCommentAfterAsteriskCharacters

   DelimitedCommentAfterAsteriskCharacters 中:
     DelimitedCommentNoSlashAsteriskCharacterDelimitedCommentCharacters選項
     * DelimitedCommentAfterAsteriskCharacters

   DelimitedCommentCharactersNoAsterisk 中:
    除 * (星號) 外的任何 Unicode

   DelimitedCommentNoSlashAsteriskCharacter
    除 / (正斜線) 或 * (星號) 外的任何 Unicode 字元

註解不會巢狀化。 /**/ 的字元序列在單行註解內不具特殊意義,且 ///* 的字元序列在分隔註解內不具特殊意義。

註解不會在文字字串內處理。

下面範例包含兩個分隔註解:

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

以下範例包含三個單行註解:

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

常值

「常值」是值的原始程式碼表示法。

   字面量
     邏輯文字
     數位文字
     文本文本

邏輯常值

邏輯常值用來撰寫 true 和 false 值並產生邏輯值。

   LogicalLiteral其中之一
    truefalse

數字常值

數字常值用來撰寫數值,並產生數字值。

   NumberLiteral 中:
     DecimalDigitsExponentPart選項
     DecimalDigitsDecimalSeparatorDecimalDigitsoptExponentPartopt
     DecimalSeparatorDecimalDigitsExponentPart選項

   DecimalDigits 的 DecimalDigits 中:
     十進位數位
     DecimalDigits十進位數位

   DecimalDigit以下值之一
    0123456789

   ExponentPart
     ExponentIndicatorSignoptDecimalDigits

   ExponentIndicator以下之一
    eE

   標誌其中之一
    +-

文字常值

文字常值用來撰寫 Unicode 字元序列並產生文字值。 文字常值必須以雙引號括住。 若在文字值中包含雙引號,請重複雙引號,如以下範例所示:

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

   TextLiteral
     " TextLiteralCharacters選項"

   TextLiteralCharacters 中:
     TextLiteralCharacterTextLiteralCharacters選項

   TextLiteralCharacter
     TextCharacterNoDoubleQuote 文字字元不重複引用
     DoubleQuoteEscapeSequence(雙引號轉義序列)

   TextCharacterNoDoubleQuote 中:
    除雙引號外的任何 Unicode 字碼指標

   DoubleQuoteEscapeSequence 中:
    ""

Identifiers

「識別碼」是用來參考值的名稱。 識別碼可以是標準識別碼或單引號識別碼。

   識別碼
     IdentifierName而不是not 操作員ContextKeyword

   識別碼名稱
     IdentifierStartCharacterIdentifierContinueCharacters選項
     ' SingleQuotedIdentifier(單引號標識符)'

   IdentifierStartCharacter 的 IdentifierStartCharacter 中:
     字母字元
    _

   IdentifierContinueCharacter 的 IdentifierContinueCharacter 中:
     標識符 StartCharacter
     DecimalDigitCharacter
     連接角色
     CombiningCharacter 組合角色
     格式化字元

   IdentifierContinueCharacters 中:
     IdentifierContinueCharacterIdentifierContinueCharacters選項

   LetterCharacter 中:
     大寫字母 (Lu) 或小寫字母 (Ll) 類別的任何 Unicode 字元
     字首大寫字母 (Lt) 類別的任何 Unicode 字元
    此類別的任何 Unicode 字元字母修改器 (Lm) 或其他字母 (Lo)
     數字字母 (NI) 類別的任何 Unicode 字元

   CombiningCharacter 中:
    此類別的任何 Unicode 字元非空格標示 (Mn) 或結合空格的標示 (Mc)

   DecimalDigitCharacter 的 TetraDigitCharacter 中:
     十進位數字 (Nd) 類別的任何 Unicode 字元

   ConnectingCharacter 中:
     連接器標點符號 (Pc) 類別的任何 Unicode 字元

   FormattingCharacter 中:
     格式 (Cf) 類別的任何 Unicode 字元

單引號識別碼

單引號識別碼可包含任何 Unicode 字元序列作為識別碼使用,包括關鍵字、空白、註解和運算子。 單引號字元支援兩個單引號的跳脫序列。

   SingleQuotedIdentifier 的 Identifier
     SingleQuotedIdentifierCharacters

   SingleQuotedIdentifierCharacters 中:
     SingleQuotedIdentifierCharacterSingleQuotedIdentifierCharacters選項

   SingleQuotedIdentifierCharacter
     TextCharactersNoSingleQuote 文字字元無單引號
     SingleQuoteEscapeSequence(單引號轉義序列)

   TextCharactersNoSingleQuote 中:
    除 ' (U+0027) 外的任何 Unicode 字元

   SingleQuoteEscapeSequence 中:
    ''

釐清識別碼

   DisambiguatedIdentifier:
     TableColumnIdentifier 表格列標識符
     全域標識碼

   TableColumnIdentifier
     標識碼[@Identifier]

   全域識別碼:
     [@ 標識碼]

內容關鍵字

   ContextKeyword 的 ContextKeyword 中:
    Parent
    Self
    ThisItem
    ThisRecord

區分大小寫

Power Apps 識別碼會區分大小寫。 編寫公式時,製作工具將自動將它們更改為正確的大小寫。

分隔符號

   DecimalSeparator 的 DecimalSeparator 中:
     . (點)表示使用點作為十進位數位分隔符的語言,例如 1.23
     , (逗號)表示使用逗號作為十進位數位分隔符的語言,例如 1,23

   ListSeparator 的
     , (逗號)如果 DecimalSeparator. (dot)
     ; (分號)如果 DecimalSeparator, (逗號)

   ChainingSeparator 的
     ; (分號)如果 DecimalSeparator. (dot)
     ;; (雙分號)如果 DecimalSeparator, (逗號)

Operators

運算子會在公式中用來描述涉及一或多個運算元的作業。 例如,a + b 運算式會使用 + 運算子,將 ab 兩個運算元相加。

   操作員:
     二進位運算符
     BinaryOperatorRequires 空格
     前綴運算子
     PrefixOperatorRequires 空格
     PostfixOperator 的

   BinaryOperator:其中之一
    =<<=>>=<>
    +-*/^
    &
    &&||
    inexactin

   BinaryOperatorRequiresWhitespace 中:
     And 空白
     Or 空白

   PrefixOperator 的 PrefixOperator 中:
    !

   PrefixOperatorRequiresWhitespace 中:
     Not 空白

   PostfixOperator 的
    %

參考運算子

   ReferenceOperator:以下之一
    .!

物件參考

   參考:
     BaseReference(基礎引用)
     BaseReferenceReferenceOperatorReferenceList

   BaseReference:
     標識碼
     DisambiguatedIdentifier
     ContextKeyword

   參考清單:
     標識碼
     標識符ReferenceOperatorReferenceList

內嵌記錄

   InlineRecord 中:
     { InlineRecordList選項}

   InlineRecordList 中:
     標識元:表達式
     標識符:表達式ListSeparatorInlineRecordList

內嵌資料表

   InlineTable 中:
     [ InlineTableList選項]

   InlineTableList 中:
     表達
     表達式ListSeparatorInlineTableList

Expression

   表達:
     字面
     參考
     InlineRecord 內聯記錄
     內聯表
     函數調用
     ( 表達)
     PrefixOperator表達式
     表達式PostfixOperator
     表達式BinaryOperator表達式

鏈結運算式

   ChainedExpression 的
     表達
     表達式ChainingSeparatorChainedExpressionopt

公式呼叫

   函數呼叫:
     FunctionIdentifier(FunctionArgumentsopt)

   FunctionIdentifier 中:
     標識碼
     標識符.FunctionIdentifier

   FunctionArguments 中:
     ChainedExpression 表達式
     ChainedExpressionListSeparator函數參數