← ECMAScript 2027 · İçindekiler
ECMA-262 · 18inci Baskı
11

ECMAScript Dili: Kaynak Metin

11.1 Kaynak Metin

Sözdizimi

SourceCharacter SourceCharacter :: herhangi bir Unicode kod noktası

ECMAScript kaynak metni, bir Unicode kod noktaları dizisidir. Vekil kod noktaları da dahil olmak üzere, U+0000 ile U+10FFFF arasındaki tüm Unicode kod noktası değerleri, ECMAScript dilbilgileri tarafından izin verildiği yerlerde ECMAScript kaynak metninde bulunabilir. ECMAScript kaynak metnini depolamak ve değiş tokuş etmek için kullanılan asıl kodlamalar bu belirtimle ilgili değildir. Harici kaynak metin kodlamasından bağımsız olarak, uygun bir ECMAScript gerçekleştirimi, kaynak metni, her bir SourceCharacter bir Unicode kod noktası olmak üzere, eşdeğer bir SourceCharacter değerleri dizisiymiş gibi işler. Uygun ECMAScript gerçekleştirimlerinin, kaynak metin üzerinde herhangi bir normalleştirme yapması veya kaynak metnin normalleştirmesini yapıyormuş gibi davranması gerekli değildir.

Bir birleştirici karakter dizisinin bileşenleri, kullanıcı tüm diziyi tek bir karakter olarak düşünebilse de, bireysel Unicode kod noktaları olarak ele alınır.

11.1.1 Statik Anlambilim: UTF16EncodeCodePoint ( codePoint )

Soyut işlem UTF16EncodeCodePoint, codePoint (bir Unicode kod noktası) argümanını alır ve bir String döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Assert: 0 ≤ codePoint ≤ 0x10FFFF.

  2. Eğer codePoint ≤ 0xFFFF ise, sayısal değeri codePoint olan kod biriminden oluşan String değerini döndür.

  3. cu1, sayısal değeri floor((codePoint - 0x10000) / 0x400) + 0xD800 olan kod birimi olsun.

  4. cu2, sayısal değeri ((codePoint - 0x10000) modulo 0x400) + 0xDC00 olan kod birimi olsun.

  5. cu1 ve cu2'nin dizgi birleştirmesini döndür.

11.1.2 Statik Anlambilim: CodePointsToString ( text )

Soyut işlem CodePointsToString, text (bir Unicode kod noktaları dizisi) argümanını alır ve bir String döndürür. text'i, 6.1.4'te açıklandığı gibi bir String değerine dönüştürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. result boş String olsun.

  2. text'in her bir codePoint kod noktası için,

    1. result'ı, result ile UTF16EncodeCodePoint(codePoint)'in dizgi birleştirmesi olarak ayarla.
  3. result döndür.

11.1.3 Statik Anlambilim: UTF16SurrogatePairToCodePoint ( lead, trail )

Soyut işlem UTF16SurrogatePairToCodePoint, lead (bir kod birimi) ve trail (bir kod birimi) argümanlarını alır ve bir kod noktası döndürür. UTF-16 vekil çiftini oluşturan iki kod birimi bir kod noktasına dönüştürülür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Assert: lead bir öncül vekil ve trail bir artçıl vekildir.

  2. codePoint = (lead - 0xD800) × 0x400 + (trail - 0xDC00) + 0x10000 olsun.

  3. codePoint kod noktasını döndür.

11.1.4 Statik Anlambilim: CodePointAt ( string, position )

Soyut işlem CodePointAt, string (bir String) ve position (negatif olmayan bir tamsayı) argümanlarını alır ve [[CodePoint]] (bir kod noktası), [[CodeUnitCount]] (pozitif bir tamsayı) ve [[IsUnpairedSurrogate]] (bir Boolean) alanlarına sahip bir Record döndürür. string'i, 6.1.4'te açıklandığı gibi UTF-16 kodlanmış kod noktaları dizisi olarak yorumlar ve position indisindeki kod biriminden başlayarak ondan tek bir kod noktası okur. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. size, string'in uzunluğu olsun.

  2. Assert: position ≥ 0 ve position < size.

  3. first, string içinde position indisindeki kod birimi olsun.

  4. codePoint, sayısal değeri first'ün sayısal değeri olan kod noktası olsun.

  5. Eğer first ne bir öncül vekil ne de bir artçıl vekil ise, o zaman

    1. Record { [[CodePoint]]: codePoint, [[CodeUnitCount]]: 1, [[IsUnpairedSurrogate]]: false } döndür.
  6. Eğer first bir artçıl vekil ise veya position + 1 = size ise, o zaman

    1. Record { [[CodePoint]]: codePoint, [[CodeUnitCount]]: 1, [[IsUnpairedSurrogate]]: true } döndür.
  7. second, string içinde position + 1 indisindeki kod birimi olsun.

  8. Eğer second bir artçıl vekil değilse, o zaman

    1. Record { [[CodePoint]]: codePoint, [[CodeUnitCount]]: 1, [[IsUnpairedSurrogate]]: true } döndür.
  9. codePoint'i UTF16SurrogatePairToCodePoint(first, second) olarak ayarla.

  10. Record { [[CodePoint]]: codePoint, [[CodeUnitCount]]: 2, [[IsUnpairedSurrogate]]: false } döndür.

11.1.5 Statik Anlambilim: StringToCodePoints ( string )

Soyut işlem StringToCodePoints, string (bir String) argümanını alır ve bir kod noktaları Listesi döndürür. string'in 6.1.4'te açıklandığı gibi UTF-16 kodlanmış Unicode metin olarak yorumlanması sonucu ortaya çıkan Unicode kod noktaları dizisini döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. codePoints yeni bir boş Liste olsun.

  2. size, string'in uzunluğu olsun.

  3. position 0 olsun.

  4. position < size olduğu sürece tekrar et,

    1. codePoint = CodePointAt(string, position) olsun.

    2. codePoint.[[CodePoint]]codePoints'e ekle.

    3. position = position + codePoint.[[CodeUnitCount]] olarak ayarla.

  5. codePoints döndür.

11.1.6 Statik Anlambilim: ParseText ( sourceText, goalSymbol )

Soyut işlem ParseText, sourceText (bir String veya bir Unicode kod noktaları dizisi) ve goalSymbol (ECMAScript dilbilgilerinden birinde bir uçolmayan) argümanlarını alır ve bir Parse Node veya SyntaxError nesnelerinden oluşan boş olmayan bir Liste döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer sourceText bir String ise, sourceText'i StringToCodePoints(sourceText) olarak ayarla.

  2. goalSymbolhedef sembolü olarak kullanarak sourceText'i ayrıştırmaya çalış ve ayrıştırma sonucunu herhangi bir erken hata koşulu için analiz et. Ayrıştırma ve erken hata tespiti, gerçekleştirim tanımlı bir şekilde iç içe geçmiş olabilir.

  3. Eğer ayrıştırma başarılı olduysa ve hiçbir erken hata bulunmadıysa, ayrıştırmadan elde edilen ayrıştırma ağacının kökündeki Parse Node'u (bir goalSymbol örneği) döndür.

  4. Ayrıştırma hatalarını ve/veya erken hataları temsil eden bir veya daha fazla SyntaxError nesnesinden oluşan bir Liste döndür. Birden fazla ayrıştırma hatası veya erken hata mevcutsa, listedeki hata nesnelerinin sayısı ve sıralaması gerçekleştirim tanımlıdır, ancak en az bir tane bulunmalıdır.

11.2 Kaynak Kod Türleri

Dört tür ECMAScript kodu vardır:

11.2.1 Direktif Önsözleri ve Use Strict Direktifi

Bir Direktif Önsözü, bir FunctionBody, bir ScriptBody veya bir ModuleBody'nin başlangıç StatementListItem'leri veya ModuleItem'leri olarak bulunan ve dizideki her ExpressionStatement'in tamamen bir StringLiteral belirteci ve ardından bir noktalı virgülden oluştuğu en uzun ExpressionStatement dizisidir. Noktalı virgül açıkça görünebilir veya otomatik noktalı virgül ekleme (12.10) tarafından eklenmiş olabilir. Bir Direktif Önsözü boş bir dizi olabilir.

Bir Use Strict Direktifi, StringLiteral'ı tam olarak "use strict" veya 'use strict' kod noktası dizilerinden biri olan bir Direktif Önsözü içindeki bir ExpressionStatement'tir. Bir Use Strict Direktifi, bir EscapeSequence veya LineContinuation içeremez.

Bir Direktif Önsözü birden fazla Use Strict Direktifi içerebilir. Ancak, bu gerçekleşirse bir gerçekleştirim bir uyarı yayımlayabilir.

11.2.2 Katı Kip Kodu

Bir ECMAScript sözdizimsel birimi, kısıtlamasız veya katı kip sözdizimi ve anlambilimi kullanılarak işlenebilir (4.3.2). Kod, aşağıdaki durumlarda katı kip kodu olarak yorumlanır:

Katı kip kodu olmayan ECMAScript koduna katı olmayan kod denir.

11.2.2.1 Statik Anlambilim: IsStrict ( parseNode )

Soyut işlem IsStrict, parseNode (bir Parse Node) argümanını alır ve bir Boolean döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer parseNode tarafından eşleşen kaynak metin katı kip kodu ise, true döndür.

  2. false döndür.

11.2.3 ECMAScript Olmayan İşlevler

Bir ECMAScript gerçekleştirimi, değerlendirme davranışı ECMAScript kaynak metni dışında konak tanımlı bir yürütülebilir kod biçiminde ifade edilen işlev egzotik nesnelerinin değerlendirmesini destekleyebilir. Bir işlev nesnesinin ECMAScript kodu içinde tanımlanmış olması veya yerleşik bir işlev olması, böyle bir işlev nesnesini çağıran veya onun tarafından çağrılan ECMAScript kodu perspektifinden gözlemlenebilir değildir.