Бөлісу құралы:


Өрнек грамматикасы

Ескертпе

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:біреуі
    0123456789

стенография:

   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

Логикалық литералдар

Логикалық литерал шын және жалған мәндерін жазып, логикалық мән шығару үшін қолданылады.

   LogicalLiteral:бір
    truefalse

Сан литералдары

Сандық литерал сандық мәнді жазу және сандық мәнді шығару үшін қолданылады.

   СанӘдеби:
     DecimalDigitsExponentPartопт
     DecimalDigitsDecimalSeparatorDecimalDigitsoptExponentPartopt
     DecimalSeparatorDecimalDigitsExponentPartопт

   DecimalDigits:
     DecimalDigit
     DecimalDigitsDecimalDigit

   DecimalDigit:бір
    0123456789

   ExponentPart:
     ExponentIndicatorБелгіoptОндықСандар

   ExponentIndicator:бір
    eE

   Белгі:бір
    +-

Мәтіндік литералдар

Мәтіндік литерал юникод таңбаларының тізбегін жазу және мәтін мәнін шығару үшін қолданылады. Мәтіндік литералдар қос тырнақшаға алынады. Қос тырнақшаларды мәтін мәніне қосу үшін, келесі мысалда көрсетілгендей екі тырнақшаны қайталаңыз:

"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:бір
    =<<=>>=<>
    +-*/^
    &
    &&||
    inexactin

   BinaryOperatorRequiresWhitespace:
     And Бос орын
     Or Бос орын

   ПрефиксОператоры:
    !

   PrefixOperatorRequiresWhitespace:
     Not Бос орын

   PostfixOperator:
    %

Анықтамалық оператор

   ReferenceOperator:бір
    .!

Нысанға сілтеме

   Анықтама:
     Негізгі анықтама
     BaseReferenceReferenceOperatorАнықтамалар тізімі

   Негізгі анықтама:
     Идентификатор
     DisambiguatedIdentifier
     МәтінмәндікКілтсөз

   Анықтама тізімі:
     Идентификатор
     ИдентификаторReferenceOperatorАнықтама тізімі

Ендірілген жазба

   InlineRecord:
     { InlineRecordListопция}

   InlineRecordList:
     Идентификатор:Өрнек
     Идентификатор:ӨрнекListSeparatorInlineRecordList

Кірістірілген кесте

   Кірістірілген кесте:
     [ InlineTableListопция]

   InlineTableList:
     Өрнек
     ӨрнекТізім бөлгішInlineTableList

Expression

   Өрнек:
     Әріптік
     Анықтама
     InlineRecord
     Кірістірілген кесте
     FunctionCall
     ( Өрнек)
     PrefixOperatorӨрнек
     ӨрнекPostfixOperator
     ӨрнекBinaryOperatorӨрнек

Тізбектелген өрнектер

   ChainedExpression:
     Өрнек
     ӨрнекChainingSeparatorChainedExpressionопт

Функцияны шақыру

   FunctionCall:
     FunctionIdentifier(FunctionArgumentsopt)

   Функция идентификаторы:
     Идентификатор
     Идентификатор.Функцияның идентификаторы

   FunctionArguments:
     ChainedExpression
     ChainedExpressionListSeparatorFunctionArguments