แชร์ผ่าน


การแสดงไวยากรณ์

หมายเหตุ

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:หนึ่งใน
    0123456789

เป็นแบบย่อสำหรับ:

  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:หนึ่งใน
    truefalse

สัญพจน์ตัวเลข

สัญพจน์ตัวเลขl จะใช้สำหรับเขียนค่าตัวเลขและทำให้เกิดค่าตัวเลข

  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:
    ""

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:หนึ่งใน
    =<<=>>=<>
    +-*/^
    &
    &&||
    inexactin

  BinaryOperatorRequiresWhitespace:
    Andช่องว่าง
    Orช่องว่าง

  PrefixOperator:
    !

  PrefixOperatorRequiresWhitespace:
    Notช่องว่าง

  PostfixOperator:
    %

ตัวดำเนินการอ้างอิง

  ReferenceOperator:หนึ่งใน
    .!

การอ้างอิงวัตถุ

  การอ้างอิง:
    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