運算式文法
注意
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:以下值之一
0
1
2
3
4
5
6
7
8
9
是下列的簡略版:
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 運算式是由 Whitespace、Comment 和 Token 項目的串流組成。 下列章節將討論這些生產。 只有 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:其中之一
true
false
數字常值
數字常值用來撰寫數值,並產生數字值。
NumberLiteral 中:
DecimalDigitsExponentPart選項
DecimalDigitsDecimalSeparatorDecimalDigitsoptExponentPartopt
DecimalSeparatorDecimalDigitsExponentPart選項
DecimalDigits 的 DecimalDigits 中:
十進位數位
DecimalDigits十進位數位
DecimalDigit:以下值之一
0
1
2
3
4
5
6
7
8
9
ExponentPart 的
ExponentIndicatorSignoptDecimalDigits
文字常值
文字常值用來撰寫 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
運算式會使用 +
運算子,將 a
和 b
兩個運算元相加。
操作員:
二進位運算符
BinaryOperatorRequires 空格
前綴運算子
PrefixOperatorRequires 空格
PostfixOperator 的
BinaryOperator:其中之一
=
<
<=
>
>=
<>
+
-
*
/
^
&
&&
||
in
exactin
BinaryOperatorRequiresWhitespace 中:
And
空白
Or
空白
PrefixOperator 的 PrefixOperator 中:
!
PrefixOperatorRequiresWhitespace 中:
Not
空白
參考運算子
物件參考
參考:
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函數參數