式の文法
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 をトークン [@
で構成されると定義し、識別子につづき、またトークンにつづきます]
。
1 つの非終端記号に可能な展開が複数ある場合は、代替の展開が別の行に示されます。 省略可能な記号を示すには、添字 "opt" が使用されます。 たとえば、次のようなプロダクションの場合:
関数呼び出し:
関数識別子(
関数引数opt)
これは次の短縮形です。
関数呼び出し:
関数識別子(
)
関数識別子(
関数引数)
通常、代替の展開は別の行に示されます。ただし、多数の代替がある場合は、1 行に示された展開の一覧の前に「次のいずれか」という語句が含まれることがあります。 これは、それぞれの代替を別々の行に一覧表示することに対する簡便な方法です。
たとえば、次のようなプロダクションの場合:
DecimalDigit:のいずれか
0
1
2
3
4
5
6
7
8
9
これは次の短縮形です。
小数点:
0
1
2
3
4
5
6
7
8
9
字句解析
字句単位の生成は、Power Fx 式の字句文法を定義します。 すべての有効な Power Fx 式は、この文法に準拠しています。
表現単位:
式要素opt
字句のレベルでは、Power Fx 式は Whitespace、Comment、Token 要素のストリームで構成されます。 次の各セクションで、それぞれのプロダクションについて説明します。 構文の文法においては、トークン 要素のみが有効です。
空白
空白は、Power Apps ドキュメント内のコメントとトークンを区切るために使用されます。
空白:
Unicode スペース区切り文字 (クラス Zs)
Unicode 行区切り文字 (クラス Zl)
Unicode 段落区切り文字 (クラス Zp)
水平タブ文字 (U+0009)
ライン フィード文字 (U+000A)
垂直タブ文字 (U+000B)
フォーム フィード文字 (U+000C)
復帰文字 (U+000D)
次の行の文字 (U+0085)
コメント
2 つの形式のコメントがサポートされています。
- 単一行コメントは、
//
文字で始まり、ソース行の末尾まで拡張されます。 - 区切られたコメントは、
/*
文字で始まり、*/
文字で終わります。 区切られたコメントは、複数行にまたがることがあります。
コメント:
区切りコメント
シングルラインコメント
シングルラインコメント:
//
シングルラインコメント文字opt
単一行コメント文字:
単一行コメント文字
シングルラインコメント文字シングルラインコメント文字opt
単一行コメント文字:
NewLineCharacter を除くすべての Unicode 文字
区切られたコメント:
/*
区切られたコメント文字opt*/
区切られたコメント文字:
区切りコメント文字アスタリスクなし区切りコメント文字opt
*
アスタリスク文字の後の区切りコメント
アスタリスク文字の後の区切りコメント:
区切りコメントなしスラッシュアスタリスク文字区切りコメント文字opt
*
アスタリスク文字の後の区切りコメント
区切られたコメント文字アスタリスクなし:
* (アスタリスク) を除く任意の Unicode 文字
区切られたコメントなしスラッシュアスタリスク文字:
/ (スラッシュ) または * (アスタリスク) を除く任意の 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
リテラル
リテラルは、値のソース コード表現です。
論理リテラル
true および false の値を記述するために使用される論理リテラルでは、論理値が生成されます。
LogicalLiteral:のいずれか
true
false
数値リテラル
数値を記述するために使用される数値リテラルでは、数値が生成されます。
数値リテラル:
小数点指数部opt
小数点小数点区切り小数点opt指数部opt
小数点区切り文字小数点桁数指数部opt
DecimalDigit:のいずれか
0
1
2
3
4
5
6
7
8
9
テキスト リテラル
Unicode 文字のシーケンスを記述するために使用されるテキスト リテラルでは、テキスト値が生成されます。 テキストリテラルは二重引用符で囲まれています。 テキスト値に二重引用符を含めるには、次の例に示すように二重引用符を繰り返します。
"The ""quoted"" text" // The "quoted" text
テキストリテラル:
"
テキストリテラル文字opt"
テキストリテラル文字:
テキストリテラル文字テキストリテラル文字opt
テキストリテラル文字:
テキスト文字二重引用符なし
二重引用符エスケープシーケンス
テキスト文字二重引用符なし:
二重引用符を除くすべての Unicode コード ポイント
識別子
識別子は、値を参照するために使用される名前です。 識別子は、標準識別子または一重引用符で囲まれた識別子とすることができます。
識別子:
識別子名ただしオペレーターまたはコンテキストキーワードではない...
識別子名:
識別子開始文字識別子継続文字opt
'
シングルクォート識別子'
識別子開始文字:
文字
_
識別子継続文字:
識別子開始文字
小数点文字
接続文字
組み合わせ文字
書式設定文字
文字:
大文字 (Lu) または 小文字 (Ll)のクラスの Unicode 文字
タイトル文字 (Lt) クラスの任意の Unicode 文字
修飾 (Lm)クラス、または その他 (Lo) クラスの任意の Unicode 文字
数字文字 (Nl) クラスの任意の Unicode 文字
結合文字:
前進を伴わない記号 (Mn)クラス、または 前進を伴う結合記号 (Mc) クラスの任意の Unicode 文字
小数点文字:
10 進数字 (Nd) クラスの任意の Unicode 文字
接続文字:
接続句読点 (Pc) クラスの任意の Unicode 文字
書式設定文字:
書式 (Cf) クラスの任意の Unicode 文字
一重引用符で囲まれた識別子
単一引用符で囲まれた識別子には、キーワード、空白、コメント、および演算子など、任意の Unicode 文字のシーケンスを識別子として含めることができます。 単一引用符の文字は、2 つの単一引用符のエスケープ シーケンスでサポートされます。
シングルクォート識別子:
シングルクォート識別子文字
単一引用符で囲まれた識別子文字:
シングルクォート識別子文字シングルクォート識別子文字opt
単一引用符で囲まれた識別子文字:
テキスト文字数: 単一引用符なし
シングルクォートエスケープシーケンス
テキスト文字数: 引用符なし:
' (U+0027) を除く任意の Unicode 文字
曖昧さ回避された識別子
グローバル識別子:
[@
識別子]
コンテキスト キーワード
コンテキストキーワード:
Parent
Self
ThisItem
ThisRecord
大文字と小文字の区別
Power Apps 識別子では大文字と小文字が区別されます。 作成ツールは、計算式が記述されているとき、大文字と小文字を自動的に変更します。
区切り文字
小数点区切り文字:
.
(ドット)小数点の区切りとしてドットを使用する言語の場合、例: 1.23
,
(カンマ)小数の区切りとしてカンマを使用する言語の場合、例: 1,23
リストセパレータ:
,
(カンマ) if DecimalSeparator is .
(ドット)
;
(セミコロン) if DecimalSeparator is ,
(カンマ)
チェーンセパレーター:
;
(セミコロン) if DecimalSeparator is .
(ドット)
;;
(二重セミコロン) if DecimalSeparator is ,
(カンマ)
演算子
演算子は、1 つ以上のオペランドに関係する操作を記述するために、数式で使用されます。 たとえば、式 a + b
では、+
演算子を使用して、a
および b
の 2 つのオペランドが追加されます。
オペレーター:
バイナリ演算子
バイナリ演算子には空白が必要です
プレフィックス演算子
プレフィックス演算子には空白が必要です
後置演算子
バイナリ演算子:
=
<
<=
>
>=
<>
+
-
*
/
^
&
&&
||
in
exactin
バイナリ演算子には空白が必要です:
And
空白
Or
空白
プレフィックス演算子には空白が必要です:
Not
空白
リファレンス演算子
オブジェクト参照
参照:
ベースリファレンス
BaseReferenceReferenceOperatorReferenceList
ベース参照:
識別子
曖昧さのない識別子
コンテキストキーワード
インライン レコード
インラインレコード:
{
インラインレコードリストopt}
インラインレコードリスト:
識別子:
式
識別子:
式リストセパレータInlineRecordList
インライン テーブル
インラインテーブル:
[
インラインテーブルリストopt]
インラインテーブルリスト:
表現
式リストセパレータインラインテーブルリスト
Expression
表現:
リテラル
参照
インラインレコード
インラインテーブル
関数呼び出し
(
表現)
プレフィックス演算子式
式接尾演算子
式BinaryOperator式