式の文法

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 外での使用のための YAML に基づいたシリアル化形式 を使用して Power Apps Studio で作業するときにバインディングが暗示されます。

文法規則

字句と構文の文法は、文法プロダクションを使用して表されます。 各文法プロダクションによって、非終端記号と、その非終端記号から非終端記号または終端記号のシーケンスへの可能な展開が定義されます。 文法プロダクションでは、非終端の記号は斜体で表示され、終端記号は固定幅フォントで表示されます。

文法プロダクションの最初の行は、定義される非終端記号の名前と、その後にコロンを付けたものです。 連続してインデントされた各行には、非終端記号または終端記号のシーケンスとして表された、非終端記号の可能な展開が含まれます。 たとえば、次のようなプロダクションの場合:

   GlobalIdentifier:
     [@ 識別子]

GlobalIdentifier をトークン [@ で構成されると定義し、識別子につづき、またトークンにつづきます]

1 つの非終端記号に可能な展開が複数ある場合は、代替の展開が別の行に示されます。 省略可能な記号を示すには、添字 "opt" が使用されます。 たとえば、次のようなプロダクションの場合:

   FunctionCall:
     FunctionIdentifier(FunctionArgumentsopt)

これは次の短縮形です。

   FunctionCall:
     FunctionIdentifier()
     FunctionIdentifier(FunctionArguments)

通常、代替の展開は別の行に示されます。ただし、多数の代替がある場合は、1 行に示された展開の一覧の前に「次のいずれか」という語句が含まれることがあります。 これは、それぞれの代替を別々の行に一覧表示することに対する簡便な方法です。

たとえば、次のようなプロダクションの場合:

   DecimalDigit:次のいずれか
    0123456789

これは次の短縮形です。

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

字句解析

字句単位の生成は、Power Fx 式の字句文法を定義します。 すべての有効な Power Fx 式は、この文法に準拠しています。

   ExpressionUnit:
     ExpressionElementsopt

   ExpressionElements:
     ExpressionElement
     ExpressionElementExpressionElementsopt

   ExpressionElement:
     Whitespace
     Comment

字句のレベルでは、Power Fx 式は WhitespaceCommentToken 要素のストリームで構成されます。 次の各セクションで、それぞれのプロダクションについて説明します。 構文の文法においては、トークン 要素のみが有効です。

空白

空白は、Power Apps ドキュメント内のコメントとトークンを区切るために使用されます。

   Whitespace:
    Unicode スペース区切り文字 (クラス Zs)
    Unicode 行区切り文字 (クラス Zl)
    Unicode 段落区切り文字 (クラス Zp)
    水平タブ文字 (U+0009)
    ライン フィード文字 (U+000A)
    垂直タブ文字 (U+000B)
    フォーム フィード文字 (U+000C)
    復帰文字 (U+000D)
    次の行の文字 (U+0085)

コメント

2 つの形式のコメントがサポートされています。

  • 単一行コメントは、// 文字で始まり、ソース行の末尾まで拡張されます。
  • 区切られたコメントは、/* 文字で始まり、*/ 文字で終わります。 区切られたコメントは、複数行にまたがることがあります。

   コメント:
     DelimitedComment
     SingleLineComment

   SingleLineComment:
     // SingleLineCommentCharactersopt

   SingleLineCommentCharacters:
     SingleLineCommentCharacter
     SingleLineCommentCharacterSingleLineCommentCharactersopt

   SingleLineCommentCharacter:
    NewLineCharacter を除くすべての Unicode 文字

   DelimitedComment:
     /* DelimitedCommentCharactersopt*/

   DelimitedCommentCharacters:
     DelimitedCommentCharactersNoAsteriskDelimitedCommentCharactersopt
     * DelimitedCommentAfterAsteriskCharacters

   DelimitedCommentAfterAsteriskCharacters:
     DelimitedCommentNoSlashAsteriskCharacterDelimitedCommentCharactersopt
     * DelimitedCommentAfterAsteriskCharacters

   DelimitedCommentCharactersNoAsterisk:
    * (アスタリスク) を除く任意の Unicode 文字

   DelimitedCommentNoSlashAsteriskCharacter:
    / (スラッシュ) または * (アスタリスク) を除く任意の Unicode 文字

コメントは入れ子にはなりません。 文字シーケンス /**/ は単一行コメント内で特別な意味を持ちません。また、///* の文字シーケンスは、区切られたコメント内で特別な意味を持ちません。

コメントは、テキスト リテラル文字列内では処理されません。

次の例には、2 つの区切られたコメントが含まれています。

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

次の例には、3 つの単一行コメントが含まれています。

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

リテラル

リテラルは、値のソース コード表現です。

   リテラル:
     LogicalLiteral
     NumberLiteral
     TextLiteral

論理リテラル

true および false の値を記述するために使用される論理リテラルでは、論理値が生成されます。

   LogicalLiteral:次のいずれか
    truefalse

数値リテラル

数値を記述するために使用される数値リテラルでは、数値が生成されます。

   NumberLiteral:
     DecimalDigitsExponentPartopt
     DecimalDigitsDecimalSeparatorDecimalDigitsoptExponentPartopt
     DecimalSeparatorDecimalDigitsExponentPartopt

   DecimalDigits:
     DecimalDigit
     DecimalDigitsDecimalDigit

   DecimalDigit:次のいずれか
    0123456789

   ExponentPart:
     ExponentIndicatorSignoptDecimalDigits

   ExponentIndicator:次のいずれか
    eE

   Sign:次のいずれか
    +-

テキスト リテラル

Unicode 文字のシーケンスを記述するために使用されるテキスト リテラルでは、テキスト値が生成されます。 テキストリテラルは二重引用符で囲まれています。 テキスト値に二重引用符を含めるには、次の例に示すように二重引用符を繰り返します。

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

   TextLiteral:
     " TextLiteralCharactersopt"

   TextLiteralCharacters:
     TextLiteralCharacterTextLiteralCharactersopt

   TextLiteralCharacter:
     TextCharacterNoDoubleQuote
     DoubleQuoteEscapeSequence

   TextCharacterNoDoubleQuote:
    二重引用符を除くすべての Unicode コード ポイント

   DoubleQuoteEscapeSequence:
    ""

識別子

識別子は、値を参照するために使用される名前です。 識別子は、標準識別子または一重引用符で囲まれた識別子とすることができます。

   識別子:
     IdentifierNameOperatorContextKeywordを除く

   IdentifierName:
     IdentifierStartCharacterIdentifierContinueCharactersopt
     ' SingleQuotedIdentifier'

   IdentifierStartCharacter:
     LetterCharacter
    _

   IdentifierContinueCharacter:
     IdentifierStartCharacter
     DecimalDigitCharacter
     ConnectingCharacter
     CombiningCharacter
     FormattingCharacter

   IdentifierContinueCharacters:
     IdentifierContinueCharacterIdentifierContinueCharactersopt

   LetterCharacter:
    大文字 (Lu) または 小文字 (Ll)のクラスの Unicode 文字
    タイトル文字 (Lt) クラスの任意の Unicode 文字
    修飾 (Lm)クラス、または その他 (Lo) クラスの任意の Unicode 文字
    数字文字 (Nl) クラスの任意の Unicode 文字

   CombiningCharacter:
    前進を伴わない記号 (Mn)クラス、または 前進を伴う結合記号 (Mc) クラスの任意の Unicode 文字

   DecimalDigitCharacter:
    10 進数字 (Nd) クラスの任意の Unicode 文字

   ConnectingCharacter:
    接続句読点 (Pc) クラスの任意の Unicode 文字

   FormattingCharacter:
    書式 (Cf) クラスの任意の Unicode 文字

一重引用符で囲まれた識別子

単一引用符で囲まれた識別子には、キーワード、空白、コメント、および演算子など、任意の Unicode 文字のシーケンスを識別子として含めることができます。 単一引用符の文字は、2 つの単一引用符のエスケープ シーケンスでサポートされます。

   SingleQuotedIdentifier:
     SingleQuotedIdentifierCharacters

   SingleQuotedIdentifierCharacters:
     SingleQuotedIdentifierCharacterSingleQuotedIdentifierCharactersopt

   SingleQuotedIdentifierCharacter:
     TextCharactersNoSingleQuote
     SingleQuoteEscapeSequence

   TextCharactersNoSingleQuote:
    ' (U+0027) を除く任意の Unicode 文字

   SingleQuoteEscapeSequence:
    ''

曖昧さ回避された識別子

   DisambiguatedIdentifier:
     TableColumnIdentifier
     GlobalIdentifier

   TableColumnIdentifier:
     識別子[@識別子]

   GlobalIdentifier:
     [@ Identifier]

コンテキスト キーワード

   ContextKeyword:
    Parent
    Self
    ThisItem
    ThisRecord

大文字と小文字の区別

Power Apps 識別子では大文字と小文字が区別されます。 作成ツールは、計算式が記述されているとき、大文字と小文字を自動的に変更します。

区切り文字

   DecimalSeparator:
     . 10 進数の値の区切り記号としてドットを使用する言語の (ドット)1.23
     ,たとえば など、10 進数の区切り文字としてカンマを使用する言語 (カンマ)1,23

   ListSeparator:
     ,DecimalSeparator. (ドット) の場合は (カンマ)
     ; DecimalSeparator, (コンマ) の場合、(セミコロン)

   ChainingSeparator:
     ;DecimalSeparator. (ドット) の場合、(セミコロン)
     ;;DecimalSeparator, (コンマ) の場合、(二重セミコロン)

演算子

演算子は、1 つ以上のオペランドに関係する操作を記述するために、数式で使用されます。 たとえば、式 a + b では、+ 演算子を使用して、a および b の 2 つのオペランドが追加されます。

   演算子:
     BinaryOperator
     BinaryOperatorRequiresWhitespace
     PrefixOperator
     PrefixOperatorRequiresWhitespace
     PostfixOperator

   BinaryOperator:次のいずれか
    =<<=>>=<>
    +-*/^
    &
    &&||
    inexactin

   BinaryOperatorRequiresWhitespace:
     And Whitespace
     Or Whitespace

   PrefixOperator:
    !

   PrefixOperatorRequiresWhitespace:
     Not Whitespace

   PostfixOperator:
    %

リファレンス演算子

   ReferenceOperator:次のいずれか
    .!

オブジェクト参照

   リファレンス:
     BaseReference
     BaseReferenceReferenceOperatorReferenceList

   BaseReference:
     識別子
     DisambiguatedIdentifier
     ContextKeyword

   ReferenceList:
     識別子
     IdentifierReferenceOperatorReferenceList

インライン レコード

   InlineRecord:
     { InlineRecordListopt}

   InlineRecordList:
     識別子:Expression
     識別子:ExpressionListSeparatorInlineRecordList

インライン テーブル

   InlineTable:
     [ InlineTableListopt]

   InlineTableList:
     Expression
     ExpressionListSeparatorInlineTableList

Expression

   Expression:
     リテラル
     リファレンス
     InlineRecord
     InlineTable
     FunctionCall
     ( Expression)
     PrefixOperatorExpression
     ExpressionPostfixOperator
     ExpressionBinaryOperatorExpression

チェーン表現

   ChainedExpression:
     Expression
     ExpressionChainingSeparatorChainedExpressionopt

関数呼び出し

   FunctionCall:
     FunctionIdentifier(FunctionArgumentsopt)

   FunctionIdentifier:
     識別子
     Identifier.FunctionIdentifier

   FunctionArguments:
     ChainedExpression
     ChainedExpressionListSeparatorFunctionArguments