Ngữ pháp biểu thức
Lưu ý
Microsoft Power Fx là tên mới của ngôn ngữ công thức cho ứng dụng canvas. Những bài viết này được thực hiện khi chúng tôi trích xuất ngôn ngữ từ các ứng dụng canvas, tích hợp ngôn ngữ đó với các sản phẩm khác của Microsoft Power Platform và hiển thị dưới dạng nguồn mở. Bắt đầu từ phần Microsoft Power Fx Tổng quan để xem thông tin giới thiệu cho ngôn ngữ này.
Microsoft Power Fx dựa trên các công thức liên kết tên với một biểu thức. Cũng giống như trong trang tính Excel, khi các phần phụ thuộc trả về theo sự thay đổi của biểu thức, thì biểu thức sẽ được tính toán lại và giá trị của tên sẽ thay đổi, có thể xếp tầng phép tính toán lại thành các công thức khác.
Ngữ pháp này bao gồm phần biểu thức của công thức. Việc ràng buộc với một tên để tạo công thức sẽ phụ thuộc vào cách Power Fx được tích hợp. Trên các trang tính, cú pháp ràng buộc không hiển thị mà được ngụ ý theo vị trí viết biểu thức, chẳng hạn như nhập =B1
vào ô A1. Trong một số trường hợp, hoàn toàn không cần ràng buộc và Power Fx được dùng làm trình đánh giá biểu thức, chẳng hạn như trong việc hỗ trợ các cột được tính toán của một bảng cơ sở dữ liệu. Đối với Power Apps, phần ràng buộc được ngụ ý khi làm việc trong Power Apps Studio với một định dạng tuần tự hóa dựa trên YAML để sử dụng bên ngoài Power Apps Studio.
Quy ước ngữ pháp
Ngữ pháp về từ vựng và cú pháp được thể hiện qua cách dùng sản phẩm ngữ pháp. Mỗi sản phẩm ngữ pháp xác định một ký hiệu không phải đầu cuối và khả năng mở rộng của ký hiệu không phải đầu cuối đó thành chuỗi các ký hiệu không phải đầu cuối hoặc đầu cuối. Trong các sản phẩm ngữ pháp, các ký hiệu không phải đầu cuối được hiển thị bằng kiểu in nghiêng và các ký hiệu đầu cuối được hiển thị bằng phông chữ có độ rộng cố định.
Dòng đầu tiên của một sản phẩm ngữ pháp là tên của ký hiệu không phải đầu cuối đang được xác định, theo sau là dấu hai chấm. Mỗi dòng thụt lề liên tiếp chứa phần mở rộng có thể có của ký hiệu không phải đầu cuối được đưa ra dưới dạng một chuỗi các ký hiệu không đầu cuối hoặc đầu cuối. Ví dụ: sản phẩm:
GlobalIdentifier:
[@
Identifier]
xác định một GlobalIdentifier bao gồm mã thông báo [@
, theo sau là một Identifier, tiếp theo là mã thông báo ]
.
Khi có nhiều khả năng mở rộng một ký hiệu không phải đầu cuối, các lựa chọn thay thế được liệt kê trên các dòng riêng biệt. Ký hiệu "opt" dùng để thể hiện biểu tượng tùy chọn. Ví dụ: sản phẩm:
FunctionCall:
FunctionIdentifier(
FunctionArgumentsopt)
là viết tắt của:
FunctionCall:
FunctionIdentifier(
)
FunctionIdentifier(
FunctionArguments)
Các lựa chọn thay thế thường được liệt kê trên các dòng riêng biệt, mặc dù trong trường hợp có nhiều lựa chọn thay thế, cụm từ "một trong số" có thể đứng trước danh sách các mở rộng được đưa ra trên một dòng. Đây chỉ đơn giản là cách viết tắt để liệt kê từng lựa chọn thay thế trên các dòng riêng biệt.
Ví dụ: sản phẩm:
DecimalDigit:một trong số
0
1
2
3
4
5
6
7
8
9
là viết tắt của:
DecimalDigit:
0
1
2
3
4
5
6
7
8
9
Phân tích từ vựng
Quá trình tạo đơn vị từ vựng sẽ xác định ngữ pháp từ vựng cho một biểu thức Power Fx. Mọi biểu thức Power Fx hợp lệ đều tuân theo ngữ pháp này.
ExpressionUnit:
ExpressionElementsopt
ExpressionElements:
ExpressionElement
ExpressionElementExpressionElementsopt
ExpressionElement:
Whitespace
Comment
Ở cấp độ từ vựng, biểu thức Power Fx bao gồm một luồng gồm các phần từ Whitespace, Comment và Token. Mỗi sản phẩm này được đề cập trong các phần sau. Chỉ các thành phần Mã thông báo có ý nghĩa trong ngữ pháp cú pháp.
Khoảng trắng
Khoảng trắng được sử dụng để phân tách các nhận xét và mã thông báo trong tài liệu Power Apps.
Whitespace:
bất kỳ dấu phân cách Unicode Space nào (lớp Z)
bất kỳ dấu phân cách Unicode Line nào (lớp Zl)
bất kỳ dấu phân tách Unicode Paragraph nào (lớp Zp)
Ký tự tab ngang (U+0009)
Ký tự nguồn cấp dữ liệu dòng (U+000A)
Ký tự tab dọc (U+000B)
Ký tự nguồn cấp dữ liệu biểu mẫu (U+000C)
Ký tự trả về vận chuyển (U+000D)
Ký tự dòng tiếp theo (U+0085)
Nhận xét
Hai hình thức nhận xét được hỗ trợ:
- Nhận xét một dòng bắt đầu bằng các ký tự
//
và kéo dài đến cuối dòng nguồn. - Nhận xét được phân tách bắt đầu bằng các ký tự
/*
và kết thúc bằng các ký tự*/
. Nhận xét được phân tách có thể kéo dài nhiều dòng.
Comment:
DelimitedComment
SingleLineComment
SingleLineComment:
//
SingleLineCommentCharactersopt
SingleLineCommentCharacters:
SingleLineCommentCharacter
SingleLineCommentCharacterSingleLineCommentCharactersopt
SingleLineCommentCharacter:
bất kỳ ký tự Unicode nào ngoại trừ ký tự NewLineCharacter
DelimitedComment:
/*
DelimitedCommentCharactersopt*/
DelimitedCommentCharacters:
DelimitedCommentCharactersNoAsteriskDelimitedCommentCharactersopt
*
DelimitedCommentAfterAsteriskCharacters
DelimitedCommentAfterAsteriskCharacters:
DelimitedCommentNoSlashAsteriskCharacterDelimitedCommentCharactersopt
*
DelimitedCommentAfterAsteriskCharacters
DelimitedCommentCharactersNoAsterisk:
bất kỳ ký tự Unicode nào ngoại trừ * (dấu hoa thị)
DelimitedCommentNoSlashAsteriskCharacter:
bất kỳ ký tự Unicode nào ngoại trừ / (dấu gạch chéo) hoặc * (dấu hoa thị)
Nhận xét không được lồng vào nhau. Các chuỗi ký tự /*
và */
không có ý nghĩa đặc biệt trong bình luận một dòng và các chuỗi ký tự //
và /*
không có ý nghĩa đặc biệt trong nhận xét được phân tách.
Nhận xét không được xử lý trong chuỗi văn bản-ký tự.
Ví dụ sau bao gồm hai nhận xét được phân cách:
/* Hello, world
*/
"Hello, world" /* This is an example of a text literal */
Các ví dụ sau đây bao gồm ba nhận xét một dòng:
// Hello, world
//
"Hello, world" // This is an example of a text literal
Ký tự
Ký tự là một mã nguồn đại diện cho một giá trị.
Literal:
LogicalLiteral
NumberLiteral
TextLiteral
Ký tự lôgic
Ký tự logic được sử dụng để viết các giá trị đúng và sai, đồng thời tạo ra một giá trị logic.
LogicalLiteral:một trong số
true
false
Ký tự số
Ký tự số được sử dụng để viết một giá trị số và tạo ra một giá trị số.
NumberLiteral:
DecimalDigitsExponentPartopt
DecimalDigitsDecimalSeparatorDecimalDigitsoptExponentPartopt
DecimalSeparatorDecimalDigitsExponentPartopt
DecimalDigits:
DecimalDigit
DecimalDigitsDecimalDigit
DecimalDigit:một trong số
0
1
2
3
4
5
6
7
8
9
ExponentPart:
ExponentIndicatorSignoptDecimalDigits
ExponentIndicator:một trong số
e
E
Ký tự văn bản
Ký tự văn bản được sử dụng để viết một chuỗi các ký tự Unicode và tạo ra một giá trị văn bản. Các ký tự văn bản được đặt trong dấu ngoặc kép. Để bao gồm dấu ngoặc kép trong giá trị văn bản, hãy lặp lại dấu ngoặc kép, như thể hiện trong ví dụ sau:
"The ""quoted"" text" // The "quoted" text
TextLiteral:
"
TextLiteralCharactersopt"
TextLiteralCharacters:
TextLiteralCharacterTextLiteralCharactersopt
TextLiteralCharacter:
TextCharacterNoDoubleQuote
DoubleQuoteEscapeSequence
TextCharacterNoDoubleQuote:
bất kỳ điểm mã Unicode nào ngoại trừ dấu ngoặc kép
DoubleQuoteEscapeSequence:
"
"
Identifiers
Mã định danh là tên được sử dụng để tham chiếu đến một giá trị. Số nhận dạng có thể là số nhận dạng thông thường hoặc số nhận dạng được trích dẫn đơn lẻ.
Identifier:
IdentifierNamechứkhông phảiOperatorhoặcContextKeyword
IdentifierName:
IdentifierStartCharacterIdentifierContinueCharactersopt
'
SingleQuotedIdentifier'
IdentifierStartCharacter:
LetterCharacter
_
IdentifierContinueCharacter:
IdentifierStartCharacter
DecimalDigitCharacter
ConnectingCharacter
CombiningCharacter
FormattingCharacter
IdentifierContinueCharacters:
IdentifierContinueCharacterIdentifierContinueCharactersopt
LetterCharacter:
bất kỳ ký tự Unicode nào thuộc lớp Chữ hoa (Lu) hoặc Chữ thường (Ll)
bất kỳ ký tự Unicode nào thuộc lớp Chữ hoa đầu mỗi từ (Lt)
bất kỳ ký tự Unicode nào thuộc lớp Bổ nghĩa chữ cái (Lm) hoặc Chữ cái khác (Lo)
bất kỳ ký tự Unicode nào thuộc lớp Chữ cái số (Nl)
CombiningCharacter:
bất kỳ ký tự Unicode nào thuộc lớp Dấu không có khoảng cách (Mn) hoặc Dấu kết hợp khoảng cách (Mc)
DecimalDigitCharacter:
bất kỳ ký tự Unicode nào thuộc lớp Số thập phân (Nd)
ConnectingCharacter:
bất kỳ ký tự Unicode nào thuộc lớp Dấu nối câu (Pc)
FormattingCharacter:
bất kỳ ký tự Unicode nào thuộc lớp Định dạng (Cf)
Số nhận dạng được trích dẫn đơn lẻ
Mã định danh được trích dẫn duy nhất có thể chứa bất kỳ chuỗi ký tự Unicode nào được sử dụng làm mã định danh, bao gồm từ khóa, khoảng trắng, chú thích và toán tử. Các ký tự trong dấu ngoặc đơn được hỗ trợ với một chuỗi thoát gồm hai dấu ngoặc đơn.
SingleQuotedIdentifier:
SingleQuotedIdentifierCharacters
SingleQuotedIdentifierCharacters:
SingleQuotedIdentifierCharacterSingleQuotedIdentifierCharactersopt
SingleQuotedIdentifierCharacter:
TextCharactersNoSingleQuote
SingleQuoteEscapeSequence
TextCharactersNoSingleQuote:
bất kỳ ký tự Unicode nào ngoại trừ ' (U+0027)
SingleQuoteEscapeSequence:
'
'
Mã nhận dạng được phân loại
DisambiguatedIdentifier:
TableColumnIdentifier
GlobalIdentifier
TableColumnIdentifier:
Identifier[@
Identifier]
GlobalIdentifier:
[@
Identifier]
Từ khóa theo ngữ cảnh
ContextKeyword:
Parent
Self
ThisItem
ThisRecord
Phân biệt chữ hoa/chữ thường
Số nhận dạng Power Apps có phân biệt chữ hoa chữ thường. Công cụ quy tắc sẽ tự động thay đổi chúng thành trường hợp chính xác khi một công thức đang được viết.
Dấu phân tách
DecimalSeparator:
.
(dấu chấm) đối với những ngôn ngữ sử dụng dấu chấm để phân cách số thập phân, chẳng hạn như 1.23
,
(dấu phẩy) đối với những ngôn ngữ sử dụng dấu phẩy để phân cách số thập phân, chẳng hạn như 1,23
ListSeparator:
,
(dấu phẩy) nếu DecimalSeparator là .
(dấu chấm)
;
(dấu chấm phẩy) nếu DecimalSeparator là ,
(dấu phẩy)
ChainingSeparator:
;
(dấu chấm phẩy) nếu DecimalSeparator là .
(dấu chấm)
;;
(2 dấu chấm phẩy) nếu DecimalSeparator là ,
(dấu phẩy)
Toán tử
Các toán tử được sử dụng trong công thức để mô tả các phép toán liên quan đến một hoặc nhiều toán hạng. Ví dụ: biểu thức a + b
sử dụng toán tử +
để thêm hai toán hạng a
và b
.
Operator:
BinaryOperator
BinaryOperatorRequiresWhitespace
PrefixOperator
PrefixOperatorRequiresWhitespace
PostfixOperator
BinaryOperator:một trong số
=
<
<=
>
>=
<>
+
-
*
/
^
&
&&
||
in
exactin
BinaryOperatorRequiresWhitespace:
And
Whitespace
Or
Whitespace
PrefixOperatorRequiresWhitespace:
Not
Whitespace
Toán tử tham chiếu
ReferenceOperator:một trong số
.
!
Đối tượng tham chiếu
Reference:
BaseReference
BaseReferenceReferenceOperatorReferenceList
BaseReference:
Identifier
DisambiguatedIdentifier
ContextKeyword
ReferenceList:
Identifier
IdentifierReferenceOperatorReferenceList
Bản ghi nội tuyến
InlineRecord:
{
InlineRecordListopt}
InlineRecordList:
Identifier:
Expression
Identifier:
ExpressionListSeparatorInlineRecordList
Bảng nội tuyến
InlineTable:
[
InlineTableListopt]
InlineTableList:
Expression
ExpressionListSeparatorInlineTableList
Expression
Expression:
Literal
Reference
InlineRecord
InlineTable
FunctionCall
(
Expression)
PrefixOperatorExpression
ExpressionPostfixOperator
ExpressionBinaryOperatorExpression
Biểu thức chuỗi
ChainedExpression:
Expression
ExpressionChainingSeparatorChainedExpressionopt
Lệnh gọi hàm
FunctionCall:
FunctionIdentifier(
FunctionArgumentsopt)
FunctionIdentifier:
Identifier
Identifier.
FunctionIdentifier
FunctionArguments:
ChainedExpression
ChainedExpressionListSeparatorFunctionArguments
Phản hồi
https://aka.ms/ContentUserFeedback.
Sắp ra mắt: Trong năm 2024, chúng tôi sẽ dần gỡ bỏ Sự cố với GitHub dưới dạng cơ chế phản hồi cho nội dung và thay thế bằng hệ thống phản hồi mới. Để biết thêm thông tin, hãy xem:Gửi và xem ý kiến phản hồi dành cho