İfade dil bilgisi

Not

Microsoft Power Fx, tuval uygulamaları için formül dilinin yeni adıdır. Dili tuval uygulamalarından ayırdığımız, Microsoft Power Platform ürünlerine entegre ettiğimiz ve açık kaynak olarak sunduğumuz bu süreçte bu makaleler geliştirilmeye devam eder. Dilin tanıtımı için Microsoft Power Fx genel bakış makalesiyle başlayın.

Microsoft Power Fx, bir adı ifadeye bağlayan formüllere dayalıdır. Excel çalışma sayfalarında olduğu gibi, ifadenin gelen bağımlılıkları değiştikçe ifade yeniden hesaplanır ve adın değeri değişir. Bu durum, yeniden hesaplamanın diğer formüllere basamaklanmasına neden olabilir.

Bu dil bilgisi, formülün ifade bölümünü kapsar. Formül oluşturmak için ada bağlama, Power Fx'in nasıl tümleştirildiğine bağlıdır. Çalışma sayfalarında, bağlama söz dizimi gösterilmediği için ifadenin yazıldığı konum ile belirtilir (ör. A1 hücresine =B1 ifadesinin girilmesi). Bazı durumda, bir veritabanı tablosunun hesaplanan sütunlarını desteklemek gibi işlemlerde hiçbir bağlama gerekmez ve Power Fx, ifade değerlendiricisi olarak kullanılır. Power Apps için bağlama, Power Apps Studio'da çalışırken Power Apps Studio dışında kullanım için YAML temelli serileştirme biçimi ile belirtilir.

Dil bilgisi kuralları

Sözcük temelli ve söz dizimsel dil bilgisi, dil bilgisi üretimlerinin kullanılmasıyla sunulur. Her bir dil bilgisi üretimi, terminal dışı bir sembolü ve bu terminal dışı sembolün olası genişletmelerini, terminal dışı veya terminal semboller dizisi olarak tanımlar. Dil bilgisi üretimlerinde, terminal dışı semboller italik yazıyla, terminal sembolleri ise sabit genişlikli yazı tipinde gösterilir.

Bir dil bilgisi üretiminin ilk satırı, tanımlanmakta olan terminal dışı sembolün adıdır ve sonuna iki nokta eklenir. Birbirini izleyen her girintili satır, terminal dışı sembolün terminal dışı veya terminal sembolleri dizisi olarak verilen olası bir genişletmesini içerir. Örneğin, şu üretim:

  GlobalIdentifier :
    [@Tanımlayıcı]

[@ belirtecinden oluşan, ardından Tanımlayıcı gelen, ardından ] belirteci gelen bir GlobalIdentifier öğesini ifade eder.

Terminal dışı bir sembolün birden fazla olası genişletmesi olduğunda, alternatifler ayrı satırlarda listelenir. İsteğe bağlı bir sembol göstermek için "ist" alt simgesi kullanılır. Örneğin, şu üretim:

  FunctionCall :
    FunctionIdentifier(FunctionArgumentsist)

şunun kısaltmasıdır:

  FunctionCall :
    FunctionIdentifier()
    FunctionIdentifier(FunctionArguments)

Alternatifler normalde ayrı satırlarda listelenir, ancak birçok alternatifin olduğu durumlarda, "şunlardan biri" tümceciği tek bir satırda verilen genişletme listesinden önce gelebilir. Bu, her bir alternatifi ayrı satırlarda listelemenin kısayoludur.

Örneğin, şu üretim:

  DecimalDigit : şunlardan biri
    0123456789

şunun kısaltmasıdır:

  DecimalDigit :
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9

Sözcük temelli analiz

Sözcük temelli birim üretimi, Power Fx ifadesinin sözcük temelli dil bilgisini tanımlar. Her geçerli Power FX ifadesi bu dil bilgisine uyar.

  ExpressionUnit :
    ExpressionElementsist

  ExpressionElements :
    ExpressionElement
    ExpressionElementExpressionElementsist

  ExpressionElement :
    Boşluk
    Yorum

Sözcük temelli düzeyde bir Power Fx ifadesi, Boşluk, Açıklama ve Belirteç öğeleri akışından oluşur. Bu üretimlerin her biri aşağıdaki bölümlerde ele alınmıştır. Söz dizimi dil bilgisinde yalnızca Belirteç öğeleri önemlidir.

Boşluk

Boşluk, bir Power Apps belgesi içindeki açıklamaları ve belirteçleri ayırmak için kullanılır.

  Boşluk :
    herhangi bir Unicode Alan ayırıcısı (Zs sınıfı)
    herhangi bir Unicode Satır ayırıcısı (Zs sınıfı)
    herhangi bir Unicode Paragraf ayırıcısı (Zp sınıfı)
    Yatay sekme karakteri (U+0009)
    Satır besleme karakteri (U+000A)
    Dikey sekme karakteri (U+000B)
    Sonraki sayfaya geçme karakteri (U+000C)
    Satır başı karakteri (U+000D)
    Yeni satır karakteri (U+0085)

Açıklamalar

İki açıklama biçimi desteklenmektedir:

  • // karakterleriyle başlayıp kaynak satırın sonuna kadar giden tek satırlı açıklamalar.
  • /* karakterleriyle başlayıp */ karakterleriyle biten sınırlandırılmış açıklamalar. Sınırlandırılmış açıklamalar birden çok satıra yayılabilir.

  Açıklama :
    DelimitedComment
    SingleLineComment

  SingleLineComment :
    //SingleLineCommentCharactersist

  SingleLineCommentCharacters :
    SingleLineCommentCharacter
    SingleLineCommentCharacterSingleLineCommentCharactersist

  SingleLineCommentCharacter :
    NewLineCharacter haricindeki herhangi bir Unicode karakter

  DelimitedComment :
    /*DelimitedCommentCharactersist*/

  DelimitedCommentCharacters :
    DelimitedCommentCharactersNoAsteriskDelimitedCommentCharactersist
    *DelimitedCommentAfterAsteriskCharacters

  DelimitedCommentAfterAsteriskCharacters :
    DelimitedCommentNoSlashAsteriskCharacterDelimitedCommentCharactersist
    *DelimitedCommentAfterAsteriskCharacters

  DelimitedCommentCharactersNoAsterisk :
    * (yıldız) dışındaki herhangi bir Unicode karakteri

  DelimitedCommentNoSlashAsteriskCharacter :
    / (eğik çizgi) veya * (yıldız) dışındaki herhangi bir Unicode karakteri

Açıklamalar iç içe değildir. /* ile */ karakter dizilerinin tek satırlı bir açıklama içinde ve // ile /* karakter dizilerinin de sınırlandırılmış bir açıklama içinde özel bir anlamı yoktur.

Metin değişmez dizeleri içindeki yorumlar işlenmez.

Aşağıdaki örnekte iki adet sınırlandırılmış açıklama vardır:

/* Hello, world
*/
"Hello, world"    /* This is an example of a text literal */

Aşağıdaki örneklerde üç adet tek satırlı açıklama vardır:

// Hello, world
//
"Hello, world"    // This is an example of a text literal

Değişmez Değerler

Değişmez değer, bir değerin kaynak kodu gösterimidir.

  Değişmez Değer :
    LogicalLiteral
    NumberLiteral
    TextLiteral

Mantıksal değişmez değerler

Mantıksal değişmez değer, true ve false değerlerini yazmak için kullanılır ve mantıksal bir değer üretir.

  LogicalLiteral : şunlardan biri
    truefalse

Sayı değişmez değerleri

Sayı değişmez değeri, sayısal bir değer yazmak için kullanılır ve bir sayı değeri üretir.

  NumberLiteral :
    DecimalDigitsExponentPartist
    DecimalDigitsDecimalSeparatorDecimalDigitsistExponentPartist
    DecimalSeparatorDecimalDigitsExponentPartist

  DecimalDigits :
    DecimalDigit
    DecimalDigitsDecimalDigit

  DecimalDigit : şunlardan biri
    0123456789

  ExponentPart :
    ExponentIndicatorSignistDecimalDigits

  ExponentIndicator : şunlardan biri
    eE

  Sign : şunlardan biri
    +-

Metin değişmez değerleri

Metin değişmez değeri, bir Unicode karakter dizisi yazmak için kullanılır ve bir metin değeri üretir. Metin değişmez değerleri çift tırnak işareti içine alınır. Metin değerine çift tırnak işareti eklemek için aşağıdaki örnekte gösterildiği gibi çift tırnak işaretlerini tekrarlayın:

"The ""quoted"" text" // The "quoted" text

  TextLiteral :
    "TextLiteralCharactersist"

  TextLiteralCharacters :
    TextLiteralCharacterTextLiteralCharactersist

  TextLiteralCharacter :
    TextCharacterNoDoubleQuote
    DoubleQuoteEscapeSequence

  TextCharacterNoDoubleQuote :
    çift tırnak haricinde herhangi bir Unicode kod noktası

  DoubleQuoteEscapeSequence :
    ""

Tanımlayıcılar

Tanımlayıcı, bir değere başvurmak için kullanılan addır. Tanımlayıcılar, normal tanımlayıcılar veya tek tırnak işaretli tanımlayıcılar olabilir.

  Identifier :
    IdentifierName ancak şunlar değil: Operator veya ContextKeyword

  IdentifierName :
    IdentifierStartCharacterIdentifierContinueCharactersist
    'SingleQuotedIdentifier'

  IdentifierStartCharacter :
    LetterCharacter
    _

  IdentifierContinueCharacter :
    IdentifierStartCharacter
    DecimalDigitCharacter
    ConnectingCharacter
    CombiningCharacter
    FormattingCharacter

  IdentifierContinueCharacters :
    IdentifierContinueCharacterIdentifierContinueCharactersist

  LetterCharacter :
    Büyük harf (Lu) veya Küçük harf (Ll) sınıfında herhangi bir Unicode karakteri
    Başlık harfi (Lt) sınıfında herhangi bir Unicode karakteri
    Harf değiştiricisi (Lm) veya Diğer harf (Lo) sınıfında herhangi bir Unicode karakteri
    Sayı harfi (Nl) sınıfından herhangi bir Unicode karakteri

  CombiningCharacter :
    Aralıksız işareti (Mn) veya Aralık birleştirme işareti (Mc) sınıfından herhangi bir Unicode karakteri

  DecimalDigitCharacter :
    Ondalık hanesi (Nd) sınıfından herhangi bir Unicode karakteri

  ConnectingCharacter :
    Bağlayıcı noktalama işareti (Pc) sınıfından herhangi bir Unicode karakteri

  FormattingCharacter :
    Biçim (Cf) sınıfından herhangi bir Unicode karakteri

Tek tırnaklı tanımlayıcılar

Tek tırnak işaretli tanımlayıcı; anahtar sözcükler, boşluk, yorumlar ve işleçler dahil olmak üzere tanımlayıcı olarak kullanılacak bir Unicode karakterlerden dizisi içerebilir. Tek tırnak işareti karakterleri, iki tek tırnak işareti kaçış dizisiyle desteklenir.

  SingleQuotedIdentifier :
    SingleQuotedIdentifierCharacters

  SingleQuotedIdentifierCharacters :
    SingleQuotedIdentifierCharacterSingleQuotedIdentifierCharactersist

  SingleQuotedIdentifierCharacter :
    TextCharactersNoSingleQuote
    SingleQuoteEscapeSequence

  TextCharactersNoSingleQuote :
    ' dışındaki herhangi bir Unicode karakteri (U+0027)

  SingleQuoteEscapeSequence :
    ''

Netleştirilmiş tanımlayıcı

  DisambiguatedIdentifier:
    TableColumnIdentifier
    GlobalIdentifier

  TableColumnIdentifier :
    Identifier[@Identifier]

  GlobalIdentifier:
    [@Tanımlayıcı]

Bağlam anahtar sözcükleri

  ContextKeyword:
    Parent
    Self
    ThisItem
    ThisRecord

Büyük/küçük harfe duyarlı

Power Apps tanımlayıcıları büyük/küçük harfe duyarlıdır. Formül yazılırken yazma aracı, bunları otomatik olarak doğru büyük/küçük harf biçimine dönüştürür.

Ayırıcılar

  DecimalSeparator:
    . Ondalık sayılar için noktayı ayırıcı olarak kullanan dillerde (nokta); ör. 1.23
    , (virgül) ondalık sayılarda ayırıcı olarak virgül kullanılan diller için; örneğin: 1,23

  ListSeparator:
    , (virgül) DecimalSeparator . (nokta) ise
    ; (noktalı virgül) DecimalSeparator , (virgül) ise

  ChainingSeparator:
    ; (noktalı virgül) DecimalSeparator . (nokta) ise
    ;; (çift noktalı virgül) DecimalSeparator , (virgül) ise

İşleçler

İşleçler, bir veya daha fazla işlenen içeren işlemleri betimleyen formüllerde kullanılır. Örneğin a + b ifadesi, iki işleneni (a ve b) toplamak için + işlecini kullanır.

  İşleç:
    BinaryOperator
    BinaryOperatorRequiresWhitespace
    PrefixOperator
    PrefixOperatorRequiresWhitespace
    PostfixOperator

  BinaryOperator: şunlardan biri
    =<<=>>=<>
    +-*/^
    &
    &&||
    inexactin

  BinaryOperatorRequiresWhitespace:
    AndBoşluk
    OrBoşluk

  PrefixOperator:
    !

  PrefixOperatorRequiresWhitespace:
    NotBoşluk

  PostfixOperator:
    %

Başvuru işleci

  ReferenceOperator: şunlardan biri
    .!

Nesne başvurusu

  Reference:
    BaseReference
    BaseReferenceReferenceOperatorReferenceList

  BaseReference:
    Tanımlayıcı
    DisambiguatedIdentifier
    ContextKeyword

  ReferenceList:
    Tanımlayıcı
    IdentifierReferenceOperatorReferenceList

Satır içi kaydı

  InlineRecord:
    {InlineRecordListist}

  InlineRecordList:
    Identifier:Expression
    Identifier:ExpressionListSeparatorInlineRecordList

Satır içi tablo

  InlineTable:
    [InlineTableListist]

  InlineTableList:
    Expression
    ExpressionListSeparatorInlineTableList

Expression

  Expression:
    Literal
    Başvuru
    InlineRecord
    InlineTable
    FunctionCall
    (Expression)
    PrefixOperatorExpression
    ExpressionPostfixOperator
    ExpressionBinaryOperatorExpression

Zincir ifadeler

  ChainedExpression:
    Expression
    ExpressionChainingSeparatorChainedExpressionist

İşlev çağrısı

  FunctionCall:
    FunctionIdentifier(FunctionArgumentsist)

  FunctionIdentifier:
    Tanımlayıcı
    Identifier.FunctionIdentifier

  FunctionArguments:
    ChainedExpression
    ChainedExpressionListSeparatorFunctionArguments