表达式语法
备注
Microsoft Power Fx 是画布应用公式语言的新名称。 当我们从画布应用中提取语言,将其与其他 Microsoft Power Platform 产品集成并使其作为开放源代码提供时,这些文章还在撰写。 从 Microsoft Power Fx 概述开始,了解对此语言的介绍。
Microsoft Power Fx 基于将名称绑定到表达式的公式。 就像在 Excel 工作表中一样,随着表达式的入站依赖项的更改,表达式将重新计算,名称的值也会更改,可能会将重新计算级联到其他公式。
此语法涵盖公式的表达式部分。 绑定到要创建公式的名称依赖于 Power Fx 的集成方式。 在工作表中,绑定语法不公开,它由写入表达式的位置隐含—例如,在 A1 单元格中输入 =B1
。 在某些情况下,不需要绑定,Power Fx 将用作表达式计算器,例如在支持数据库表的计算列时。 对于 Power Apps,绑定在具有基于 YAML 的序列化格式以在 Power Apps Studio 外部使用的 Power Apps Studio 中工作时隐含。
语法约定
词法和句法使用文法产生式来表示。 每个文法产生式定义一个非终端符号,以及该非终端符号可能扩展成一系列非终端或终端符号。 在文法产生式中,非终端符号以斜体显示,终端符号以固定宽度字体显示。
文法产生式的第一行是定义的非终端符号的名称,后跟冒号。 每一个后续缩进行都包含一个非终端符号的可能扩展,该非终端符号由一系列非终端或终端符号组成。 例如,产生式:
全局标识符:
[@
标识符]
将 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 表达式由一系列空格、注释和令牌元素组成。 以下各节将介绍这些产生式。 在句法语法中,只有令牌元素是有意义的。
空白
空格用于分隔 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 中:
"
"
标识符
标识符是用于引用值的名称。 标识符可以是常规标识符,也可以是带单引号的标识符。
标识符:
IdentifierName而不是 操作员 或ContextKeyword
标识符名称:
IdentifierStartCharacterIdentifierContinueCharacters选项
'
SingleQuotedIdentifier(单引号标识符)'
IdentifierStartCharacter 的 IdentifierStartCharacter 中:
字母字符
_
IdentifierContinueCharacter 的 IdentifierContinueCharacter 中:
标识符 StartCharacter
DecimalDigitCharacter
连接角色
CombiningCharacter 组合角色
格式化字符
IdentifierContinueCharacters 中:
IdentifierContinueCharacterIdentifierContinueCharacters选项
LetterCharacter 中:
类大写字母 (Lu) 或小写字母 (Ll) 的任何 Unicode 字符
类标题大写字母 (Lt) 的任何 Unicode 字符
类字母修饰符 (Lm) 或字母其他 (Lo) 的任何 Unicode 字符
类数字字母 (Nl) 的任何 Unicode 字符
CombiningCharacter 中:
类非空格标记 (Mn) 或空格组合标记 (Mc) 的任何 Unicode 字符
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 为 ,
(逗号)
运算符
在公式中使用运算符来描述涉及一个或多个操作数的操作。 例如,表达式 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函数参数