式の文法
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:次のいずれか
0
1
2
3
4
5
6
7
8
9
これは次の短縮形です。
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 式は Whitespace、Comment、Token 要素のストリームで構成されます。 次の各セクションで、それぞれのプロダクションについて説明します。 構文の文法においては、トークン 要素のみが有効です。
空白
空白は、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:次のいずれか
true
false
数値リテラル
数値を記述するために使用される数値リテラルでは、数値が生成されます。
NumberLiteral:
DecimalDigitsExponentPartopt
DecimalDigitsDecimalSeparatorDecimalDigitsoptExponentPartopt
DecimalSeparatorDecimalDigitsExponentPartopt
DecimalDigits:
DecimalDigit
DecimalDigitsDecimalDigit
DecimalDigit:次のいずれか
0
1
2
3
4
5
6
7
8
9
ExponentPart:
ExponentIndicatorSignoptDecimalDigits
テキスト リテラル
Unicode 文字のシーケンスを記述するために使用されるテキスト リテラルでは、テキスト値が生成されます。 テキストリテラルは二重引用符で囲まれています。 テキスト値に二重引用符を含めるには、次の例に示すように二重引用符を繰り返します。
"The ""quoted"" text" // The "quoted" text
TextLiteral:
"
TextLiteralCharactersopt"
TextLiteralCharacters:
TextLiteralCharacterTextLiteralCharactersopt
TextLiteralCharacter:
TextCharacterNoDoubleQuote
DoubleQuoteEscapeSequence
TextCharacterNoDoubleQuote:
二重引用符を除くすべての Unicode コード ポイント
DoubleQuoteEscapeSequence:
"
"
識別子
識別子は、値を参照するために使用される名前です。 識別子は、標準識別子または一重引用符で囲まれた識別子とすることができます。
識別子:
IdentifierName、OperatorやContextKeywordを除く
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:次のいずれか
=
<
<=
>
>=
<>
+
-
*
/
^
&
&&
||
in
exactin
BinaryOperatorRequiresWhitespace:
And
Whitespace
Or
Whitespace
PrefixOperatorRequiresWhitespace:
Not
Whitespace
リファレンス演算子
オブジェクト参照
リファレンス:
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