Κοινή χρήση μέσω


Γραμματική έκφρασης

Σημείωμα

Το 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(FunctionArguments)

Οι εναλλακτικές επιλογές παρατίθενται συνήθως σε ξεχωριστές γραμμές, ωστόσο, σε περιπτώσεις όπου υπάρχουν πολλές εναλλακτικές επιλογές, η φράση "ένα από" μπορεί να προηγείται μιας λίστας επεκτάσεων που έχουν εκχωρηθεί σε μία μόνο γραμμή. Αυτό είναι απλώς μια στενογραφία για την αναγραφή κάθε μίας από τις εναλλακτικές επιλογές σε ξεχωριστές γραμμές.

Για παράδειγμα, η παραγωγή:

  DecimalDigit:ένα από τα
    0123456789

είναι στενογραφία για το:

  DecimalDigit:
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9

Λεκτική ανάλυση

Η παραγωγή της λεκτικής μονάδας καθορίζει τη λεκτική ικανότητα για μια παράσταση Power Fx. Κάθε έγκυρη παράσταση Power Fx συμμορφώνεται με αυτήν τη γραμματική.

  ExpressionUnit:
    Επιλογή ExpressionElements

  ExpressionElements:
    ExpressionElement
    ExpressionElementExpressionElementsεπιλέξτε

  ExpressionElement:
    Κενό διάστημα
    Σχόλιο

Στο λεκτικό επίπεδο, μια παράσταση Power Fx αποτελείται από μια ροή κενών διαστημάτων, σχολίων και στοιχείων διακριτικού. Κάθε μία από αυτές τις παραγωγές καλύπτεται στις παρακάτω ενότητες. Μόνο τα στοιχεία διακριτικού είναι σημαντικά στη συντακτική γραμματική.

Κενό διάστημα

Τα κενά διαστήματα χρησιμοποιούνται για να διαχωρίζουν τα σχόλια και τα διακριτικά μέσα σε ένα έγγραφο Power Apps.

  Κενό:
    οποιοδήποτε διαχωριστικό διαστήματος Unicode (κλάση Zs)
    οποιοδήποτε διαχωριστικό γραμμής Unicode (κλάση Zl)
    οποιοδήποτε διαχωριστικό παραγράφου Unicode (κλάση Zp)
    Χαρακτήρας οριζόντιου στηλοθέτη (U+0009)
    Χαρακτήρας αλλαγής γραμμής (U+000A)
    Χαρακτήρας κατακόρυφου στηλοθέτη (U+000B)
    Χαρακτήρας αλλαγής σελίδας (U+000C)
    Χαρακτήρας αλλαγής παραγράφου (U+000D)
    Χαρακτήρας επόμενης γραμμής (U+0085)

Σχόλια

Υποστηρίζονται δύο μορφές σχολίων:

  • Τα σχόλια μίας γραμμής ξεκινούν με τους χαρακτήρες // και επεκτείνονται μέχρι το τέλος της γραμμής προέλευσης.
  • Τα οριοθετημένα σχόλια ξεκινούν με τους χαρακτήρες /* και τελειώνουν με τους χαρακτήρες */. Τα οριοθετημένα σχόλια μπορεί να εκτείνονται σε πολλές γραμμές.

  Σχόλιο:
    ΟριοθετημένοΣχόλιο
    SingleLineComment

  SingleLineΣχόλιο:
    //Επιλογή SingleLineCommentCharacters

  SingleLineCommentCharacters:
    SingleLineCommentCharacter
    SingleLineCommentCharacterSingleLineCommentCharactersεπιλέγουν

  SingleLineCommentCharacter:
    οποιοσδήποτε χαρακτήρας Unicode εκτός από χαρακτήρα NewLineCharacter

  ΟριοθετημένοΣχόλιο:
    /*DelimitedCommentCharactersεπιλέγουν*/

  DelimitedCommentCharacters:
    DelimitedCommentCharactersNoAsteriskDelimitedCommentCharactersopt
    *ΟριοθετημένοΣχόλιοΜετάΑστερίσκοςΧαρακτήρες

  DelimitedCommentAfterAsteriskCharacters:
    DelimitedCommentNoSlashAsteriskCharacterDelimitedCommentCharactersopt
    *ΟριοθετημένοΣχόλιοΜετάΑστερίσκοςΧαρακτήρες

  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

Λεκτικές σταθερές

Μια λεκτική σταθερά είναι μια αναπαράσταση πηγαίου κώδικα μιας τιμής.

  Κυριολεκτικά:
    ΛογικήΚυριολεκτική
    ΑριθμόςΚυριολεκτικός
    ΚείμενοΚυριολεκτική

Λογικές λεκτικές σταθερές

Μια λογική λεκτική σταθερά χρησιμοποιείται για την εγγραφή των τιμών true και false και παραγάγει μια λογική τιμή.

  LogicalLiteral:ένα από τα
    truefalse

Λεκτικές σταθερές αριθμών

Μια λεκτική σταθερά αριθμού χρησιμοποιείται για τη σύνταξη μιας αριθμητικής τιμής και να παραγάγει μια αριθμητική τιμή.

  ΑριθμόςΚυριολεκτικός:
    DecimalDigitsExponentPartεπιλέξτε
    DecimalDigitsDecimalSeparatorDecimalDigitsoptExponentPartopt
    DecimalSeparatorDecimalDigitsExponentPartopt

  Δεκαδικά ψηφία:
    DecimalDigit
    DecimalDigitsDecimalDigit

  DecimalDigit:ένα από τα
    0123456789

  ΕκθέτηςΜέρος:
    Το σύμβολοExponentIndicatorεπιλέγειδεκαδικά ψηφία

  ExponentIndicator:ένα από τα
    eE

  Σημάδι: ένα από τα
    +-

Λεκτικές σταθερές κειμένου

Μια λεκτική σταθερά κειμένου χρησιμοποιείται για την εγγραφή μιας αλληλουχίας χαρακτήρων Unicode και την παραγωγή μιας τιμής κειμένου. Οι λεκτικές σταθερές κειμένου περικλείονται σε διπλά εισαγωγικά. Για να συμπεριλάβετε διπλά εισαγωγικά στην τιμή κειμένου, επαναλάβετε τα διπλά εισαγωγικά, όπως φαίνεται στο παρακάτω παράδειγμα:

"The ""quoted"" text" // The "quoted" text

  ΚείμενοΚυριολεκτικό:
    "TextLiteralCharactersεπιλέξτε"

  ΚείμενοΚυριολεκτικοίΧαρακτήρες:
    TextLiteralCharacterTextLiteralCharactersεπιλέξτε

  TextLiteralCharacter:
    TextCharacterNoDoubleQuote
    DoubleQuoteEscapeSequence

  TextCharacterNoDoubleQuote:
    οποιοδήποτε σημείο κώδικα Unicode εκτός από τα διπλά εισαγωγικά

  DoubleQuoteEscapeSequence:
    ""

Αναγνωριστικά

Ένα αναγνωριστικό είναι ένα όνομα που χρησιμοποιείται για την αναφορά σε μια τιμή. Τα αναγνωριστικά μπορούν είτε να είναι κανονικά αναγνωριστικά είτε αναγνωριστικά σε εισαγωγικά.

  Αναγνωριστικό:
    IdentifierNameαλλάόχιOperatorήContextKeyword

  ΑναγνωριστικόΌνομα:
    IdentifierStartCharacterIdentifierContinueCharactersεπιλέγουν
    'SingleQuotedIdentifier'

  IdentifierStartCharacter:
    LetterCharacter
    _

  IdentifierContinueCharacter:
    ΑναγνωριστικόStartCharacter
    DecimalDigitCharacter
    Συνδετικόςχαρακτήρας
    ΣυνδυασμόςΧαρακτήρας
    ΜορφοποίησηΧαρακτήρας

  IdentifierContinueCharacters:
    IdentifierContinueCharacterIdentifierContinueCharactersopt

  LetterCharacter:
    οποιοσδήποτε χαρακτήρας Unicode της κλάσης Κεφαλαίο γράμμα (Lu) ή Πεζό γράμμα (Ll)
    οποιοσδήποτε χαρακτήρας Unicode της κλάσης Γράμμα Titlecase (Lt)
    οποιοσδήποτε χαρακτήρας Unicode της κλάσης Τροποποιητής γράμματος (Lm) ή Άλλο γράμμα (Lo)
    οποιοσδήποτε χαρακτήρας Unicode της κλάσης Γράμμα αριθμού (Nl)

  ΣυνδυαστικόςΧαρακτήρας:
    οποιοσδήποτε χαρακτήρας Unicode της κλάσης Σημάδι που δεν καταλαμβάνει διάστημα (Mn) ή Σημάδι συνδυασμού διαστήματος (Mc)

  DecimalDigitCharacter:
    οποιοσδήποτε χαρακτήρας Unicode της κλάσης Δεκαδικό ψηφίο (Nd)

  ΣυνδετικόςΧαρακτήρας:
    οποιοσδήποτε χαρακτήρας Unicode της κλάσης Στίξη σύνδεσης (Pc)

  FormattingCharacter:
    οποιοσδήποτε χαρακτήρας Unicode της κλάσης Μορφή (Cf)

Αναγνωριστικά σε εισαγωγικά

Ένα αναγνωριστικό σε μονάδα εισαγωγικά μπορεί να περιέχει οποιαδήποτε αλληλουχία χαρακτήρων Unicode για χρήση ως αναγνωριστικό, συμπεριλαμβανομένων λέξεων-κλειδιών, κενού διαστήματος, σχολίων και τελεστών. Οι χαρακτήρες μονά εισαγωγικά υποστηρίζονται με μια ακολουθία διαφυγής δύο μονών εισαγωγικών.

  SingleQuotedIdentifier:
    SingleQuotedIdentifierCharacters

  SingleQuotedIdentifierCharacters:
    SingleQuotedIdentifierCharacterSingleQuotedIdentifierCharactersεπιλέξτε

  SingleQuotedIdentifierCharacter:
    ΚείμενοΧαρακτήρεςΌχιΜονόΠαράθεση
    SingleQuoteEscapeSequence

  TextCharactersNoSingleQuote:
    οποιοσδήποτε χαρακτήρας Unicode εκτός από ' (U+0027)

  SingleQuoteEscapeSequence:
    ''

Αναγνωριστικό αποσαφηνισμένο

  DisambiguatedIdentifier:
    Αναγνωριστικό_στήλης πίνακα
    GlobalIdentifier

  TableColumnIdentifier:
    Αναγνωριστικό[@αναγνωριστικό]

  GlobalIdentifier:
    [@Αναγνωριστικό]

Λέξεις-κλειδιά περιβάλλοντος

  Λέξη-κλειδί περιβάλλοντος:
    Parent
    Self
    ThisItem
    ThisRecord

Διάκριση πεζών-κεφαλαίων

Τα αναγνωριστικά του Power Apps έχουν διάκριση πεζών-κεφαλαίων. Το εργαλείο σύνταξης θα τα αλλάξει αυτόματα στη σωστή υπόθεση κατά τη σύνταξη ενός τύπου.

Διαχωριστικά

  ΔεκαδικόςΔιαχωριστής:
    . (τελεία) για γλώσσες που χρησιμοποιούν μια τελεία ως διαχωριστικό για δεκαδικούς αριθμούς, για παράδειγμα 1.23
    , (κόμμα) για γλώσσες που χρησιμοποιούν κόμμα ως διαχωριστικό για δεκαδικούς αριθμούς, για παράδειγμα 1,23

  Διαχωριστικό λίστας:
    , (κόμμα) εάν το διαχωριστικό δεκαδικών είναι . (τελεία)
    ; (ερωτηματικό) εάν το διαχωριστικό δεκαδικών είναι , (κόμμα)

  Διαχωριστής αλυσίδας:
    ; (ερωτηματικό) εάν το διαχωριστικό δεκαδικών είναι . (τελεία)
    ;; (διπλό ερωτηματικό) εάν το διαχωριστικό δεκαδικών είναι , (κόμμα)

Τελεστές

Οι τελεστές χρησιμοποιούνται σε τύπους για να περιγράψουν λειτουργίες που περιλαμβάνουν έναν ή περισσότερους τελεστέους. Για παράδειγμα, η παράσταση a + b χρησιμοποιεί τον τελεστή + για να προσθέσει τους δύο τελεστέους a και b.

  Χειριστής:
    Δυαδικόςτελεστής
    BinaryOperatorRequiresWhitespace
    Τελεστής προθέματος
    PrefixOperatorRequiresWhitespace
    PostfixΤελεστής

  BinaryOperator:ένα από τα
    =<<=>>=<>
    +-*/^
    &
    &&||
    inexactin

  BinaryOperatorRequiresWhitespace:
    AndΚενό διάστημα
    OrΚενό διάστημα

  PrefixOperator:
    !

  PrefixOperatorRequiresWhitespace:
    NotΚενό διάστημα

  PostfixOperator:
    %

Αναφορά τελεστή

  ReferenceOperator:ένα από τα
    .!

Αναφορά αντικειμένου

  Αναφορά:
    BaseReference
    BaseReferenceReferenceOperatorReferenceList

  BaseReference:
    Αναγνωριστικό
    DisambiguatedIdentifier
    ContextKeyword

  Λίστα αναφοράς:
    Αναγνωριστικό
    ΑναγνωριστικόαναφοράςΛίστα αναφοράς χειριστή...

Ενσωματωμένη καρτέλα

  InlineRecord:
    {Επιλογή InlineRecordList}

  InlineRecordList:
    Αναγνωριστική:έκφραση
    Λίστα παραστάσεων:αναγνωριστικούΔιαχωριστικό...InlineRecordList

Ενσωματωμένος πίνακας

  InlineTable:
    [Επιλογή InlineTableList]

  InlineTableList:
    Έκφραση
    Λίστα παραστάσεωνΔιαχωριστικό...InlineTableList

Expression

  Έκφραση:
    Κυριολεκτικός
    Αναφορά
    InlineRecord
    Ενσωματωμένος πίνακας
    Κλήση λειτουργίας
    (Έκφραση)
    Παράσταση PrefixOperator...
    ΈκφρασηPostfixOperator
    ΠαράστασηBinaryOperatorExpression

Αλυσιδωτές παραστάσεις

  ChainedExpression:
    Έκφραση
    ΈκφρασηChainingSeparatorChainedExpressionopt

Κλήση συνάρτησης

  FunctionCall:
    FunctionIdentifier(FunctionArgumentsopt)

  ΑναγνωριστικόΣυνάρτησης:
    Αναγνωριστικό
    Αναγνωριστικό.FunctionIdentifier

  FunctionArguments:
    ChainedExpression
    ChainedExpressionListSeparatorFunctionArguments