表达式语法

备注

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以下值之一
    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 表达式由一系列空格注释令牌元素组成。 以下各节将介绍这些产生式。 在句法语法中,只有令牌元素是有意义的。

空白

空格用于分隔 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 中:
    ""

标识符

标识符是用于引用值的名称。 标识符可以是常规标识符,也可以是带单引号的标识符。

   标识符
     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 使用 + 运算符添加两个操作数 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函数参数