Өрнек грамматикасы
Ескертпе
Microsoft Power Fx — бұл кенеп бағдарламаларына арналған формула тілінің жаңа атауы. Бұл мақалалармен жұмыс әлі де жалғасуда, өйткені біз кенеп бағдарламаларынан тілді шығарамыз, оны басқа Microsoft Power Platform өнімдерімен біріктіреміз және оны ашық код ретінде қолжетімді етеміз. Тілге кіріспе үшін Microsoft Power Fx шолуымен бастаңыз.
Microsoft Power Fx бағдарламасы атауды өрнекке байланыстыратын формулаларға негізделген. Excel жұмыс парақтарындағы сияқты, өрнекке тәуелділіктер өзгергендей, өрнек қайта есептелінеді және атаудың мәні өзгереді, мүмкін қайта есептеуді басқа формулаларға қосады.
Бұл грамматика формуланың өрнек бөлігін қамтиды. Формула құру үшін атаумен байланысу Power Fx қалай біріктірілгеніне байланысты. Жұмыс парақтарында байланыстыру синтаксисі көрсетілмейді, ол өрнек жазылған орында деп есептеледі, мысалы, A1 ұяшығына =B1
енгізу сияқты. Кейбір жағдайларда байланыстырудың қажеті жоқ және Power Fx өрнекті бағалаушы ретінде пайдаланылады, мысалы, деректер қоры кестесінің есептелген бағандарын қолдау кезінде. Power Apps бағдарламасы үшін байланыстыру Power Apps Studio бағдарламасында Power Apps Studio бағдарламасынан тыс пайдалану үшін YAML негізделген сериялау пішімімен жұмыс істеу кезінде туындайды.
Грамматикалық келісімдер
Лексикалық және синтаксистік грамматикалар грамматикалық өндірістерді қолдану арқылы ұсынылады. Әрбір грамматикалық өндіріс терминальды емес белгіні және терминальды емес белгінің терминальды емес немесе терминалды белгі тізбегіне кеңеюін анықтайды. Грамматикалық өндірістерде терминальды емес белгілер курсив түрінде, ал терминалды белгілер ені бекітілген қаріппен көрсетіледі.
Грамматикалық өндірістің бірінші жолы – анықталатын терминалды емес белгінің атауы, содан кейін қос нүкте. Әрбір шегіністі жол терминалды емес немесе шартты емес таңбалар тізбегі ретінде берілген терминалды емес таңбаның кеңеюін қамтиды. Мысалы, өндіріс:
GlobalIdentifier:
[@
Идентификатор]
[@
, таңбалауыштан кейінгі идентификатордан кейін ]
таңбалауыштан тұратын GlobalIdentifier анықтайды.
Терминалды емес белгіні бірнеше кеңейту мүмкіндігі болған кезде, баламалар бөлек жолдарда тізімделеді. "Қосымша" төменгі индексі қосымша таңбаны көрсету үшін қолданылады. Мысалы, өндіріс:
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 кеңістігін бөлгіш (Zs класы)
кез келген Unicode жолын бөлгіш (Zl класы)
кез келген Unicode абзацын бөлгіш (Zp класы)
Көлденең қойынша таңбасы (U+0009)
Сызық беру сипаты (U+000A)
Тік қойынша таңбасы (U+000B)
Пішін беру сипаты (U+000C)
Тасымалды қайтару таңбасы (U+000D)
Келесі жол сипаты (U+0085)
Аңғартпалар
Пікірлердің екі пішініне қолдау көрсетіледі:
//
таңбаларынан басталып, бастапқы жолдың соңына дейін созылатын бір жолды түсініктемелер./*
таңбасымен басталатын және*/
таңбасымен аяқталатын бөлінген түсініктемелер. Бөлінген түсініктемелер бірнеше жолды қамтуы мүмкін.
Пікір:
DelimitedComment
SingleLineComment
SingleLineComment:
//
SingleLineCommentCharactersopt
SingleLineCommentCharacters:
SingleLineCommentCharacter
SingleLineCommentCharacterSingleLineCommentCharactersopt
SingleLineCommentCharacter:
NewLineCharacter параметрінен басқа кез келген Unicode таңбасы
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
Логикалық литералдар
Логикалық литерал шын және жалған мәндерін жазып, логикалық мән шығару үшін қолданылады.
LogicalLiteral:біреуі
true
false
Сан литералдары
Сандық литерал сандық мәнді жазу және сандық мәнді шығару үшін қолданылады.
NumberLiteral:
DecimalDigitsExponentPartopt
DecimalDigitsDecimalSeparatorDecimalDigitsoptExponentPartopt
DecimalSeparatorDecimalDigitsExponentPartopt
DecimalDigits:
DecimalDigit
DecimalDigitsDecimalDigit
DecimalDigit:біреуі
0
1
2
3
4
5
6
7
8
9
ExponentPart:
ExponentIndicatorSignoptDecimalDigits
Мәтіндік литералдар
Мәтіндік литерал юникод таңбаларының тізбегін жазу және мәтін мәнін шығару үшін қолданылады. Мәтіндік литералдар қос тырнақшаға алынады. Қос тырнақшаларды мәтін мәніне қосу үшін, келесі мысалда көрсетілгендей екі тырнақшаны қайталаңыз:
"The ""quoted"" text" // The "quoted" text
TextLiteral:
"
TextLiteralCharactersopt"
TextLiteralCharacters:
TextLiteralCharacterTextLiteralCharactersopt
TextLiteralCharacter:
TextCharacterNoDoubleQuote
DoubleQuoteEscapeSequence
TextCharacterNoDoubleQuote:
қос тырнақшадан басқа кез келген Unicode код нүктесі
DoubleQuoteEscapeSequence:
"
"
Identifiers
Идентификатор — мәнге сілтеме жасау үшін қолданылатын атау. Идентификаторлар тұрақты идентификаторлар немесе бір тырнақшалы идентификаторлар болуы мүмкін.
Identifier:
IdentifierNamebutnotOperatorнемесеContextKeyword
IdentifierName:
IdentifierStartCharacterIdentifierContinueCharactersopt
'
SingleQuotedIdentifier'
IdentifierStartCharacter:
LetterCharacter
_
IdentifierContinueCharacter:
IdentifierStartCharacter
DecimalDigitCharacter
ConnectingCharacter
CombiningCharacter
FormattingCharacter
IdentifierContinueCharacters:
IdentifierContinueCharacterIdentifierContinueCharactersopt
LetterCharacter:
Бас әріп (Lu) немесе Кіші әріп (Ll) класының кез келген юникод таңбасы
Тақырыптық әріп (Lt) класының кез келген юникод таңбасы
Әріпті өзгерткіш (Lm) немесе Басқа әріп (Lo) класының кез келген юникод таңбасы
Сандық әріп (Nl) класының кез келген юникод таңбасы
CombiningCharacter:
Бос орынсыз белгі (Mn) немесе Бор орынды біріктіретін белгі (Mc) класының кез келген юникод таңбасы
DecimalDigitCharacter:
Ондық сан (Nd) класының кез келген юникод таңбасы
ConnectingCharacter:
Коннектор тыныс белгісі (Pc) класының кез келген юникод таңбасы
FormattingCharacter:
Пішім (Cf) класының кез келген юникод таңбасы
Бірыңғай дәйексөз идентификаторлары
Бір тырнақшалы идентификатор идентификатор ретінде пайдаланылатын юникод таңбаларының кез келген ретін, соның ішінде кілт сөздерді, бос орынды, пікірлер мен операторларды қамтуы мүмкін. Бір тырнақша белгісінің таңбаларына екі тырнақша белгісінің болдырмау тізбегімен қолдау көрсетіледі.
SingleQuotedIdentifier:
SingleQuotedIdentifierCharacters
SingleQuotedIdentifierCharacters:
SingleQuotedIdentifierCharacterSingleQuotedIdentifierCharactersopt
SingleQuotedIdentifierCharacter:
TextCharactersNoSingleQuote
SingleQuoteEscapeSequence
TextCharactersNoSingleQuote:
' (U+0027) қоспағандағы кез келген Unicode таңбасы
SingleQuoteEscapeSequence:
'
'
Бір мәнді идентификатор
DisambiguatedIdentifier:
TableColumnIdentifier
GlobalIdentifier
TableColumnIdentifier:
Идентификатор[@
Идентификатор]
GlobalIdentifier:
[@
Идентификатор]
Контекстік кілт сөздер
ContextKeyword:
Parent
Self
ThisItem
ThisRecord
Регистрді ескеру
Power Apps идентификаторлары регистрді ескереді. Жасау құралы формула жазылған кезде оларды автоматты түрде дұрыс іске өзгертеді.
Бөлгіштер
DecimalSeparator:
.
(нүкте) нүктені ондық сандар үшін бөлгіш ретінде пайдаланатын тілдер үшін, мысалы 1.23
,
үтірді ондық бөлгіш ретінде пайдаланатын тілдерге арналған (үтір), мысалы, 1,23
ListSeparator:
,
(үтір) егер DecimalSeparator is .
(нүкте) болса
;
(нүктелі үтір) егер DecimalSeparator,
(үтір) болса
ChainingSeparator:
;
(нүктелі үтір) егер DecimalSeparator.
(нүкте) болса
;;
(қос нүктелі үтір) егер DecimalSeparator,
(үтір) болса
Операторлар
Операторлар формулаларда бір немесе бірнеше операндтарға қатысты операцияларды сипаттау үшін қолданылады. Мысалы, a + b
өрнегі a
және b
операндтарын қосу үшін +
операторын қолданады.
Оператор:
BinaryOperator
BinaryOperatorRequiresWhitespace
PrefixOperator
PrefixOperatorRequiresWhitespace
PostfixOperator
BinaryOperator:біреуі
=
<
<=
>
>=
<>
+
-
*
/
^
&
&&
||
in
exactin
BinaryOperatorRequiresWhitespace:
And
Бос орын
Or
Бос орын
PrefixOperatorRequiresWhitespace:
Not
Бос орын
Анықтамалық оператор
Нысанға сілтеме
Сілтеме:
BaseReference
BaseReferenceReferenceOperatorReferenceList
BaseReference:
Идентификатор
DisambiguatedIdentifier
ContextKeyword
ReferenceList:
Идентификатор
IdentifierReferenceOperatorReferenceList
Ендірілген жазба
InlineRecord:
{
InlineRecordListopt}
InlineRecordList:
Identifier:
Expression
Identifier:
ExpressionListSeparatorInlineRecordList
Кірістірілген кесте
InlineTable:
[
InlineTableListopt]
InlineTableList:
Өрнек
ExpressionListSeparatorInlineTableList
Expression
Өрнек:
Литерал
Сілтеме
InlineRecord
InlineTable
FunctionCall
(
Өрнек)
PrefixOperatorExpression
ExpressionPostfixOperator
ExpressionBinaryOperatorExpression
Тізбектелген өрнектер
ChainedExpression:
Өрнек
ExpressionChainingSeparatorChainedExpressionopt
Функцияны шақыру
FunctionCall:
FunctionIdentifier(
FunctionArgumentsopt)
FunctionIdentifier:
Идентификатор
Identifier.
FunctionIdentifier
FunctionArguments:
ChainedExpression
ChainedExpressionListSeparatorFunctionArguments