Γραμματική έκφρασης
Σημείωμα
Το 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:ένα από τα
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:
Επιλογή 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:ένα από τα
true
false
Λεκτικές σταθερές αριθμών
Μια λεκτική σταθερά αριθμού χρησιμοποιείται για τη σύνταξη μιας αριθμητικής τιμής και να παραγάγει μια αριθμητική τιμή.
ΑριθμόςΚυριολεκτικός:
DecimalDigitsExponentPartεπιλέξτε
DecimalDigitsDecimalSeparatorDecimalDigitsoptExponentPartopt
DecimalSeparatorDecimalDigitsExponentPartopt
Δεκαδικά ψηφία:
DecimalDigit
DecimalDigitsDecimalDigit
DecimalDigit:ένα από τα
0
1
2
3
4
5
6
7
8
9
ΕκθέτηςΜέρος:
Το σύμβολοExponentIndicatorεπιλέγειδεκαδικά ψηφία
ExponentIndicator:ένα από τα
e
E
Λεκτικές σταθερές κειμένου
Μια λεκτική σταθερά κειμένου χρησιμοποιείται για την εγγραφή μιας αλληλουχίας χαρακτήρων 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:ένα από τα
=
<
<=
>
>=
<>
+
-
*
/
^
&
&&
||
in
exactin
BinaryOperatorRequiresWhitespace:
And
Κενό διάστημα
Or
Κενό διάστημα
PrefixOperatorRequiresWhitespace:
Not
Κενό διάστημα
Αναφορά τελεστή
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