การแสดงไวยากรณ์
หมายเหตุ
Microsoft Power Fx เป็นชื่อใหม่สำหรับภาษาสูตรสำหรับแอปพื้นที่ทำงาน บทความเหล่านี้คืองานที่อยู่ระหว่างดำเนินการ ในขณะที่เราแยกภาษาจากแอปพื้นที่ทำงาน รวมเข้ากับผลิตภัณฑ์ Microsoft Power Platform อื่นๆ และทำให้พร้อมใช้งานในรูปแบบโอเพนซอร์ส เริ่มต้นด้วย ภาพรวม Microsoft Power Fx สำหรับการแนะนำภาษา
Microsoft Power Fx ขึ้นอยู่กับสูตรที่ผูกชื่อกับนิพจน์ เช่นเดียวกับในเวิร์กชีต Excel เนื่องจากการอ้างอิงขาเข้าของการเปลี่ยนแปลงนิพจน์ นิพจน์จะถูกคำนวณใหม่และค่าของชื่อจะเปลี่ยนไป ซึ่งอาจเรียงซ้อนการคำนวณใหม่ลงในสูตรอื่นๆ
ไวยากรณ์นี้ครอบคลุมส่วนนิพจน์ของสูตร การเชื่อมโยงกับชื่อเพื่อสร้างสูตร ขึ้นอยู่กับวิธีการรวม Power Fx ในเวิร์กชีต จะไม่มีการเปิดเผยไวยากรณ์การผูกข้อมูล โดยนัยโดยตำแหน่งที่เขียนนิพจน์ตัวอย่างเช่น การป้อน =B1
ในเซลล์ A1 ในบางกรณี ไม่จำเป็นต้องมีการผูกข้อมูลเลย และใช้ Power Fx เป็นตัวประเมินนิพจน์ ตัวอย่างเช่น ในการสนับสนุนคอลัมน์ที่มีการคำนวณของตารางฐานข้อมูล สำหรับ Power Apps การผูกข้อมูลโดยนัยเมื่อทำงานใน Power Apps Studio ด้วย รูปแบบการทำให้เป็นอนุกรมตาม YAML สำหรับใช้ภายนอก Power Apps Studio
แบบแผนไวยากรณ์
ไวยากรณ์เลกซิคัลและประโยคจะปรากฏ โดยการใช้การผลิตไวยากรณ์ การผลิตไวยากรณ์แต่ละรายการจะกำหนดสัญลักษณ์ที่ไม่ใช่เทอร์มินัลและส่วนขยายที่เป็นไปได้ของสัญลักษณ์ที่ไม่ใช่เทอร์มินัล เป็นลำดับของสัญลักษณ์ที่เป็นเทอร์มินัลและไม่ใช่เทอร์มินัล ในการผลิตไวยากรณ์ สัญลักษณ์ที่ไม่ใช่เทอร์มินัลจะปรากฏในรูปแบบตัวเอียง และสัญลักษณ์ที่เป็นเทอร์มินัลจะปรากฏในแบบอักษรที่กว้างแบบคงที่
บรรทัดแรกของการผลิตไวยากรณ์ คือชื่อของสัญลักษณ์ที่ไม่ใช่เทอร์มินัลซึ่งถูกกำหนดไว้ ตามด้วยเครื่องหมายทวิภาค บรรทัดที่มีการเยื่องต่อมาแต่ละบรรทัด จะประกอบด้วยการขยายที่เป็นไปได้ของสัญลักษณ์ที่ไม่ใช่เทอร์มินัล ซึ่งกำหนดไว้เป็นลำดับของสัญลักษณ์ที่ไม่ใช่เทอร์มินัล และเป็นเทอร์มินัล ตัวอย่างเช่น การผลิต:
GlobalIdentifier:
[@
ตัวระบุ]
กำหนด GlobalIdentifier ให้ประกอบด้วยโทเค็น [@
ซึ่งตามด้วย ตัวระบุ ซึ่งตามด้วยโทเค็น ]
เมื่อมีส่วนขยายที่เป็นไปได้ของสัญลักษณ์ที่ไม่ใช่เทอร์มินัลมากกว่าหนึ่งรายการ ตัวเลือกจะแสดงบนบรรทัดที่แยกจากกัน ตัวห้อย "opt" จะถูกใช้เพื่อระบุสัญลักษณ์ที่ไม่บังคับ ตัวอย่างเช่น การผลิต:
FunctionCall:
FunctionIdentifier(
FunctionArgumentsopt)
เป็นแบบย่อสำหรับ:
FunctionCall:
FunctionIdentifier(
)
FunctionIdentifier(
FunctionArguments)
โดยปกติ รายการตัวเลือกอื่นจะแสดงอยู่บนบรรทัดแบบแยกจากกัน แม้ในกรณีที่มีหลายทางเลือก วลี “หนึ่งใน” อาจนำหน้ารายการส่วนขยายที่ระบุไว้บนบรรทัดเดียว นี่เป็นเพียงแบบย่อสำหรับแสดงรายการทางเลือกแต่ละรายการบนบรรทัดที่แยกต่างหาก
ตัวอย่างเช่น การผลิต:
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:
ช่องว่าง
ข้อคิดเห็น
ในระดับเลกซิคัล นิพจน์ Power Fx จะประกอบด้วยสตรีมขององค์ประกอบ ช่องว่าง, ข้อคิดเห็น และ โทเค็น การผลิตเหล่านี้แต่ละรายการจะครอบคลุมอยู่ในส่วนต่อไปนี้ เฉพาะองค์ประกอบ โทเค็น เท่านั้นที่มีนัยสำคัญในไวยากรณ์ประโยค
ช่องว่าง
ช่องว่างถูกใช้สำหรับคั่นข้อคิดเห็นและโทเค็นต่างๆ ภายในเอกสาร Power Apps
ช่องว่าง:
ตัวคั่น Unicode Space ใดๆ (คลาส Zs)
ตัวคั่น Unicode Line ใดๆ (คลาส Zl)
ตัวคั่น Unicode Paragraph ใดๆ (คลาส Zp)
อักขระ Horizontal tab (U+0009)
อักขระ Line feed (U+000A)
อักขระ Vertical tab (U+000B)
อักขระ Form feed (U+000C)
อักขระ Carriage return (U+000D)
อักขระ Next line (U+0085)
ความคิดเห็น
รองรับความคิดเห็นสองรูปแบบ:
- ข้อคิดเห็นบรรทัดเดียวที่เริ่มต้นด้วยอักขระ
//
และขยายไปยังจุดสิ้นสุดของบรรทัดต้นทาง - ข้อคิดเห็นแบบมีตัวคั่นที่เริ่มต้นด้วยอักขระ
/*
และสิ้นสุดด้วยอักขระ*/
ข้อคิดเห็นแบบมีตัวคั่นสามารถขยายไปอีกหลายบรรทัด
ข้อคิดเห็น:
DelimitedComment
SingleLineComment
SingleLineComment:
//
SingleLineCommentCharactersopt
SingleLineCommentCharacters:
SingleLineCommentCharacter
SingleLineCommentCharacterSingleLineCommentCharactersopt
SingleLineCommentCharacter:
อักขระ Unicode ใดๆ ยกเว้น NewLineCharacter
DelimitedComment:
/*
DelimitedCommentCharactersopt*/
DelimitedCommentCharacters:
DelimitedCommentCharactersNoAsteriskDelimitedCommentCharactersopt
*
DelimitedCommentAfterAsteriskCharacters
DelimitedCommentAfterAsteriskCharacters:
DelimitedCommentNoSlashAsteriskCharacterDelimitedCommentCharactersopt
*
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
สัญพจน์
สัญพจน์ คือการแสดงรหัสต้นทางของค่า
สัญพจน์:
LogicalLiteral
NumberLiteral
TextLiteral
สัญพจน์ตรรกะ
lสัญพจน์ตรรกะ จะใช้สำหรับเขียนค่า จริง และ เท็จ และจะทำให้เกิดค่าตรรกะ
LogicalLiteral:หนึ่งใน
true
false
สัญพจน์ตัวเลข
สัญพจน์ตัวเลขl จะใช้สำหรับเขียนค่าตัวเลขและทำให้เกิดค่าตัวเลข
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:
"
"
Identifiers
ตัวระบุ คือชื่อที่ใช้สำหรับอ้างอิงถึงค่า ตัวระบุอาจเป็นตัวระบุปกติหรือตัวระบุที่ได้รับการอ้างอิงเดียว อย่างใดอย่างหนึ่ง
ตัวระบุ:
IdentifierNameแต่ไม่ตัวดำเนินการหรือContextKeywordI
IdentifierName:
IdentifierStartCharacterIdentifierContinueCharactersopt
'
SingleQuotedIdentifier'
IdentifierStartCharacter:
LetterCharacter
_
IdentifierContinueCharacter:
IdentifierStartCharacter
DecimalDigitCharacter
ConnectingCharacter
CombiningCharacter
FormattingCharacter
IdentifierContinueCharacters:
IdentifierContinueCharacterIdentifierContinueCharactersopt
LetterCharacter:
อักขระ Unicode ใดๆ ของคลาส อักษรตัวพิมพ์ใหญ่ (Lu) หรือ ตัวอักษรพิมพ์เล็ก (Ll)
อักขระ Unicode ใดๆ ของคลาส Titlecase letter (Lt)
อักขระ Unicode ใดๆ ของคลาส ตัวแก้ไขตัวอักษร (Lm) หรือ Letter other (Lo)
อักขระ Unicode ใดๆ ของคลาส ตัวอักษรตัวเลข (Nl)
CombiningCharacter:
อักขระ Unicode ใดๆ ของคลาส เครื่องหมายไม่เว้นวรรค (Mn) หรือ เครื่องหมายรวมระยะห่าง (Mc)
DecimalDigitCharacter:
อักขระ Unicode ใดๆ ของคลาส ตัวเลขทศนิยม (Nd)
ConnectingCharacter:
อักขระ Unicode ใดๆ ของคลาส เครื่องหมายวรรคตอนตัวเชื่อมต่อ (Pc)
FormattingCharacter:
อักขระ Unicode ใดๆ ของคลาส รูปแบบ (Cf)
ตัวระบุที่ได้รับการอ้างอิงเดียว
ตัวระบุใบเสนอราคาเดียว สามารถมีลำดับของอักขระ Unicode ศูนย์หรืออื่นๆ ที่ใช้เป็นตัวระบุได้ รวมถึงคำสำคัญ Whitespace ข้อคิดเห็น และตัวดำเนินการอื่นๆ อักขระเครื่องหมายคำพูดเดี่ยวได้รับการสนับสนุนโดยมีลำดับการหลีกเลี่ยงของเครื่องหมายคำพูดเดี่ยวสองตัว
SingleQuotedIdentifier:
SingleQuotedIdentifierCharacters
SingleQuotedIdentifierCharacters:
SingleQuotedIdentifierCharacterSingleQuotedIdentifierCharactersopt
SingleQuotedIdentifierCharacter:
TextCharactersNoSingleQuote
SingleQuoteEscapeSequence
TextCharactersNoSingleQuote:
อักขระ Unicode ใดๆ ยกเว้น ' (U+0027)
SingleQuoteEscapeSequence:
'
'
ตัวระบุที่ถูกยกเลิก
DisambiguatedIdentifier:
TableColumnIdentifier
GlobalIdentifier
TableColumnIdentifier:
ตัวระบุ[@
ตัวระบุ]
GlobalIdentifier:
[@
ตัวระบุ]
คำสำคัญตามบริบท
ContextKeyword:
Parent
Self
ThisItem
ThisRecord
การใช้ตัวพิมพ์ใหญ่-เล็ก
ตัวระบุ Power Apps ต้องตรงตามตัวพิมพ์ใหญ่-เล็ก เครื่องมือสร้างจะเปลี่ยนเป็นกรณีที่ถูกต้องโดยอัตโนมัติ เมื่อมีการเขียนสูตร
ตัวคั่น
DecimalSeparator:
.
(จุด) สำหรับภาษาที่ใช้จุดเป็นตัวคั่นสำหรับเลขฐานสิบ เช่น 1.23
,
(จุลภาค) สำหรับภาษาที่ใช้จุลภาคเป็นตัวคั่นสำหรับเลขฐานสิบ ตัวอย่างเช่น 1,23
ListSeparator:
,
(จุลภาค) ถ้า DecimalSeparator คือ .
(จุด)
;
(อัฒภาค) ถ้า ทศนิยม คือ ,
(ลูกน้ำ)
ChainingSeparator:
;
(อัฒภาค) ถ้า ทศนิยม คือ .
(จุด)
;;
(อัฒภาคคู่) ถ้า ทศนิยม คือ ,
(ลูกน้ำ)
Operators
ตัวดำเนินการจะใช้ในสูตรต่างๆ เพื่ออธิบายการดำเนินการเกี่ยวกับตัวถูกดำเนินการอย่างน้อยหนึ่งตัว ตัวอย่างเช่น นิพจน์ a + b
ใช้ตัวดำเนินการ +
เพื่อเพิ่มตัวถูกดำเนินการสองตัว a
และ b
ตัวดำเนินการ:
BinaryOperator
BinaryOperatorRequiresWhitespace
PrefixOperator
PrefixOperatorRequiresWhitespace
PostfixOperator
BinaryOperator:หนึ่งใน
=
<
<=
>
>=
<>
+
-
*
/
^
&
&&
||
in
exactin
BinaryOperatorRequiresWhitespace:
And
ช่องว่าง
Or
ช่องว่าง
PrefixOperatorRequiresWhitespace:
Not
ช่องว่าง
ตัวดำเนินการอ้างอิง
การอ้างอิงวัตถุ
การอ้างอิง:
BaseReference
BaseReferenceReferenceOperatorReferenceList
BaseReference:
ตัวระบุ
DisambiguatedIdentifier
ContextKeyword
ReferenceList:
ตัวระบุ
ตัวระบุReferenceOperatorReferenceList
เรกคอร์ดแบบอินไลน์
InlineRecord:
{
InlineRecordListopt}
InlineRecordList:
ตัวระบุ:
นิพจน์
ตัวระบุ:
นิพจน์ListSeparatorInlineRecordList
ตารางอินไลน์
InlineTable:
[
InlineTableListopt]
InlineTableList:
Expression
นิพจน์ListSeparatorInlineTableList
Expression
นิพจน์:
สัญพจน์
การอ้างอิง
InlineRecord
InlineTable
FunctionCall
(
Expression)
PrefixOperatorนิพจน์
นิพจน์PostfixOperator
นิพจน์BinaryOperatorนิพจน์
นิพจน์แบบต่อเนื่อง
ChainedExpression:
Expression
นิพจน์ChainingSeparatorChainedExpressionopt
การเรียกฟังก์ชัน
FunctionCall:
FunctionIdentifier(
FunctionArgumentsopt)
FunctionIdentifier:
ตัวระบุ
ตัวระบุ.
FunctionIdentifier
FunctionArguments:
ChainedExpression
ChainedExpressionListSeparatorFunctionArguments