Өрнек грамматикасы
Ескертпе
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(
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 өрнегі осы грамматикаға сәйкес келеді.
Өрнек бірлігі:
ExpressionElementsопция
ExpressionElements:
ExpressionElement
ExpressionElementExpressionElementsтаңдау
Өрнек элементі:
Бос орын
Пікір
Лексикалық деңгейде Power Fx өрнегі Бос орын, Пікір және Таңбалауыш элементтерінің ағынынан тұрады. Осы өндірістердің әрқайсысы келесі бөлімдерде қарастырылған. Тек Таңбалауыш элементтері синтаксистік грамматикада маңызды.
Бос орын таңбасы
Бос орын Power Apps құжатындағы түсініктемелер мен белгілерді бөлу үшін қолданылады.
Бос орын:
кез келген Unicode кеңістігін бөлгіш (Zs класы)
кез келген Unicode жолын бөлгіш (Zl класы)
кез келген Unicode абзацын бөлгіш (Zp класы)
Көлденең қойынша таңбасы (U+0009)
Сызық беру сипаты (U+000A)
Тік қойынша таңбасы (U+000B)
Пішін беру сипаты (U+000C)
Тасымалды қайтару таңбасы (U+000D)
Келесі жол сипаты (U+0085)
Аңғартпалар
Пікірлердің екі пішініне қолдау көрсетіледі:
-
//
таңбаларынан басталып, бастапқы жолдың соңына дейін созылатын бір жолды түсініктемелер. -
/*
таңбасымен басталатын және*/
таңбасымен аяқталатын бөлінген түсініктемелер. Бөлінген түсініктемелер бірнеше жолды қамтуы мүмкін.
Түсініктеме:
Бөлінген Түсініктеме
SingleLineComment
SingleLineComment:
//
SingleLineCommentCharactersтаңдау
SingleLineCommentтаңбалары:
SingleLineCommentCharacter
SingleLineCommentCharacterSingleLineCommentCharactersopt
SingleLineCommentCharacter:
NewLineCharacter параметрінен басқа кез келген Unicode таңбасы
Бөлінген түсініктеме:
/*
Бөлінген Түсініктеме таңбаларытаңдау*/
Бөлінген түсініктеме таңбалары:
Бөлінген ТүсініктемеТаңбаларыЖұлдызша жоқБөлінген ТүсініктемеТаңбаларытаңдау
*
Бөлінген Түсініктеме Жұлдызшадан кейін Таңбалар
Бөлінген ТүсініктемеЖұлдызшаТаңбалары:
БөлінгенТүсініктемеЖоқ қиғаш сызықЖұлдызшаТаңбаБөлектелген ТүсініктемеТаңбаларытаңдау
*
Бөлінген Түсініктеме Жұлдызшадан кейін Таңбалар
Бөлінген Түсініктеме ТаңбаларЖұлдызша жоқ:
* (жұлдызша) қоспағанда, кез келген Unicode таңбасы
БөлінгенТүсініктемеЖоқЖұлдызшатаңба:
/ (қисық сызық) немесе* (жұлдызша) қоспағанда, кез келген 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
СанЛитерал
TextLiteral
Логикалық литералдар
Логикалық литерал шын және жалған мәндерін жазып, логикалық мән шығару үшін қолданылады.
Сан литералдары
Сандық литерал сандық мәнді жазу және сандық мәнді шығару үшін қолданылады.
СанӘдеби:
DecimalDigitsExponentPartопт
DecimalDigitsDecimalSeparatorDecimalDigitsoptExponentPartopt
DecimalSeparatorDecimalDigitsExponentPartопт
DecimalDigits:
DecimalDigit
DecimalDigitsDecimalDigit
DecimalDigit:бір
0
1
2
3
4
5
6
7
8
9
ExponentPart:
ExponentIndicatorБелгіoptОндықСандар
Мәтіндік литералдар
Мәтіндік литерал юникод таңбаларының тізбегін жазу және мәтін мәнін шығару үшін қолданылады. Мәтіндік литералдар қос тырнақшаға алынады. Қос тырнақшаларды мәтін мәніне қосу үшін, келесі мысалда көрсетілгендей екі тырнақшаны қайталаңыз:
"The ""quoted"" text" // The "quoted" text
МәтінӘдеби:
"
TextLiteralCharactersопция"
Мәтіндік таңбалар:
TextLiteralCharacterTextLiteralCharactersтаңдау
TextLiteralCharacter:
TextCharacterNoDoubleQuote
DoubleQuoteEscapeSequence
TextCharacterNoDoubleQuote:
қос тырнақшадан басқа кез келген Unicode код нүктесі
DoubleQuoteEscapeSequence:
"
"
Identifiers
Идентификатор — мәнге сілтеме жасау үшін қолданылатын атау. Идентификаторлар тұрақты идентификаторлар немесе бір тырнақшалы идентификаторлар болуы мүмкін.
Идентификатор:
IdentifierNameбірақемесОператорнемесеContextKeyword
Идентификатор атауы:
IdentifierStartCharacterIdentifierContinueCharacterтаңдау
'
SingleQuotedIdentifier'
IdentifierStartCharacter:
LetterCharacter
_
ИдентификаторContinueCharacter:
IdentifierStartCharacter
DecimalDigitCharacter
ConnectingCharacter
Біріктіру таңба
Форматтау таңба
IdentifierContinueCharacters:
IdentifierContinueCharacterIdentifierContinueCharacterтаңдау
LetterCharacter:
Бас әріп (Lu) немесе Кіші әріп (Ll) класының кез келген юникод таңбасы
Тақырыптық әріп (Lt) класының кез келген юникод таңбасы
Әріпті өзгерткіш (Lm) немесе Басқа әріп (Lo) класының кез келген юникод таңбасы
Сандық әріп (Nl) класының кез келген юникод таңбасы
Біріктіру таңба:
Бос орынсыз белгі (Mn) немесе Бор орынды біріктіретін белгі (Mc) класының кез келген юникод таңбасы
DecimalDigitCharacter:
Ондық сан (Nd) класының кез келген юникод таңбасы
ConnectingCharacter:
Коннектор тыныс белгісі (Pc) класының кез келген юникод таңбасы
Пішімдеу таңбасы:
Пішім (Cf) класының кез келген юникод таңбасы
Бірыңғай дәйексөз идентификаторлары
Бір тырнақшалы идентификатор идентификатор ретінде пайдаланылатын юникод таңбаларының кез келген ретін, соның ішінде кілт сөздерді, бос орынды, пікірлер мен операторларды қамтуы мүмкін. Бір тырнақша белгісінің таңбаларына екі тырнақша белгісінің болдырмау тізбегімен қолдау көрсетіледі.
SingleQuotedIdentifier:
SingleQuotedIdentifierCharacters
SingleQuotedIdentifierCharacters:
SingleQuotedIdentifierCharacterSingleQuotedIdentifierCharactersopt
SingleQuotedIdentifierCharacter:
TextCharactersNoSingleQuote
SingleQuoteEscapeSequence
МәтінтаңбаларыNoSingleQuote:
' (U+0027) қоспағандағы кез келген Unicode таңбасы
SingleQuoteEscapeSequence:
'
'
Бір мәнді идентификатор
DisambiguatedIdentifier:
TableColumnIdentifier
GlobalIdentifier
TableColumnIdentifier:
Идентификатор[@
Идентификатор]
GlobalIdentifier:
[@
Идентификатор]
Контекстік кілт сөздер
МәтінмәндікКілтсөз:
Parent
Self
ThisItem
ThisRecord
Регистрді ескеру
Power Apps идентификаторлары регистрді ескереді. Жасау құралы формула жазылған кезде оларды автоматты түрде дұрыс іске өзгертеді.
Бөлгіштер
DecimalSeparator:
.
(нүкте) ондық сандар үшін бөлгіш ретінде нүктені пайдаланатын тілдер үшін, мысалы 1.23
,
(үтір) ондық сандар үшін бөлгіш ретінде үтірді пайдаланатын тілдер үшін, мысалы 1,23
ListSeparator:
,
(үтір) егер Ондық бөлгіш болса .
(нүкте)
;
(нүктелі үтір) егер ОндықБөлгіш болса ,
(үтір)
Тізбекті бөлгіш:
;
(нүктелі үтір) егер ОндықБөлгіш болса .
(нүкте)
;;
(қос нүктелі үтір) егер ОндықБөлгіш болса ,
(үтір)
Операторлар
Операторлар формулаларда бір немесе бірнеше операндтарға қатысты операцияларды сипаттау үшін қолданылады. Мысалы, a + b
өрнегі a
және b
операндтарын қосу үшін +
операторын қолданады.
Оператор:
BinaryOperator
BinaryOperatorRequiresWhitespace
PrefixOperator
PrefixOperatorRequiresWhitespace
PostfixOperator
BinaryOperator:бір
=
<
<=
>
>=
<>
+
-
*
/
^
&
&&
||
in
exactin
BinaryOperatorRequiresWhitespace:
And
Бос орын
Or
Бос орын
PrefixOperatorRequiresWhitespace:
Not
Бос орын
Анықтамалық оператор
Нысанға сілтеме
Анықтама:
Негізгі анықтама
BaseReferenceReferenceOperatorАнықтамалар тізімі
Негізгі анықтама:
Идентификатор
DisambiguatedIdentifier
МәтінмәндікКілтсөз
Анықтама тізімі:
Идентификатор
ИдентификаторReferenceOperatorАнықтама тізімі
Ендірілген жазба
InlineRecord:
{
InlineRecordListопция}
InlineRecordList:
Идентификатор:
Өрнек
Идентификатор:
ӨрнекListSeparatorInlineRecordList
Кірістірілген кесте
Кірістірілген кесте:
[
InlineTableListопция]
InlineTableList:
Өрнек
ӨрнекТізім бөлгішInlineTableList
Expression
Өрнек:
Әріптік
Анықтама
InlineRecord
Кірістірілген кесте
FunctionCall
(
Өрнек)
PrefixOperatorӨрнек
ӨрнекPostfixOperator
ӨрнекBinaryOperatorӨрнек
Тізбектелген өрнектер
ChainedExpression:
Өрнек
ӨрнекChainingSeparatorChainedExpressionопт
Функцияны шақыру
FunctionCall:
FunctionIdentifier(
FunctionArgumentsopt)
Функция идентификаторы:
Идентификатор
Идентификатор.
Функцияның идентификаторы
FunctionArguments:
ChainedExpression
ChainedExpressionListSeparatorFunctionArguments