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


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

Ескертпе

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

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

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

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

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

  NumberLiteral:
    DecimalDigitsExponentPartopt
    DecimalDigitsDecimalSeparatorDecimalDigitsoptExponentPartopt
    DecimalSeparatorDecimalDigitsExponentPartopt

  DecimalDigits:
    DecimalDigit
    DecimalDigitsDecimalDigit

  DecimalDigit:біреуі
    0123456789

  ExponentPart:
    ExponentIndicatorSignoptDecimalDigits

  ExponentIndicator:біреуі
    eE

  Sign:біреуі
    +-

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

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

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

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

  PrefixOperator:
    !

  PrefixOperatorRequiresWhitespace:
    NotБос орын

  PostfixOperator:
    %

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

  ReferenceOperator:біреуі
    .!

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

  Сілтеме:
    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