Dizgi değişmezlerinde, düzenli ifade değişmezlerinde, şablon değişmezlerinde ve tanımlayıcılarda, herhangi bir Unicode kod noktası, bir kod noktasının sayısal değerini açıkça ifade eden Unicode kaçış dizileri kullanılarak da ifade edilebilir. Bir yorum içinde, böyle bir kaçış dizisi yorumun bir parçası olarak etkin bir şekilde yok sayılır.
ECMAScript, Unicode kaçış dizilerinin davranışı bakımından Java programlama dilinden farklılık gösterir. Örneğin, bir Java programında, eğer \u000A Unicode kaçış dizisi tek satırlık bir yorum içinde yer alırsa, bu bir satır sonlandırıcı olarak yorumlanır (Unicode kod noktası U+000A SATIR BESLEME (LF)'dir) ve bu nedenle sonraki kod noktası yorumun bir parçası olmaz. Benzer şekilde, bir Java programında \u000A Unicode kaçış dizisi bir dizgi değişmezi içinde yer alırsa, aynı şekilde bir satır sonlandırıcı olarak yorumlanır ki buna bir dizgi değişmezi içinde izin verilmez—bir dizgi değişmezinin değerinin bir parçası olarak SATIR BESLEME (LF) karakterinin yer almasını sağlamak için \u000A yerine \n yazılmalıdır. Bir ECMAScript programında, bir yorum içinde yer alan bir Unicode kaçış dizisi asla yorumlanmaz ve bu nedenle yorumun sonlanmasına katkıda bulunamaz. Benzer şekilde, bir ECMAScript programında bir dizgi değişmezi içinde yer alan bir Unicode kaçış dizisi her zaman değişmeze katkıda bulunur ve asla bir satır sonlandırıcı veya dizgi değişmezini sonlandırabilecek bir kod noktası olarak yorumlanmaz.
# 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:
Assert : 0 ≤ codePoint ≤ 0x10FFFF.
Eğer codePoint ≤ 0xFFFF ise, sayısal değeri codePoint olan kod biriminden oluşan String değerini döndür.
cu1 , sayısal değeri floor ((codePoint - 0x10000) / 0x400) + 0xD800 olan kod birimi olsun.
cu2 , sayısal değeri ((codePoint - 0x10000) modulo 0x400) + 0xDC00 olan kod birimi olsun.
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:
result boş String olsun.
text 'in her bir codePoint kod noktası için,
result 'ı, result ile UTF16EncodeCodePoint (codePoint )'in dizgi birleştirmesi olarak ayarla.
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:
Assert : lead bir öncül vekil ve trail bir artçıl vekildir .
codePoint = (lead - 0xD800) × 0x400 + (trail - 0xDC00) + 0x10000 olsun.
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:
size , string 'in uzunluğu olsun.
Assert : position ≥ 0 ve position < size .
first , string içinde position indisindeki kod birimi olsun.
codePoint , sayısal değeri first 'ün sayısal değeri olan kod noktası olsun.
Eğer first ne bir öncül vekil ne de bir artçıl vekil ise, o zaman
Record { [[CodePoint]] : codePoint , [[CodeUnitCount]] : 1, [[IsUnpairedSurrogate]] : false } döndür.
Eğer first bir artçıl vekil ise veya position + 1 = size ise, o zaman
Record { [[CodePoint]] : codePoint , [[CodeUnitCount]] : 1, [[IsUnpairedSurrogate]] : true } döndür.
second , string içinde position + 1 indisindeki kod birimi olsun.
Eğer second bir artçıl vekil değilse, o zaman
Record { [[CodePoint]] : codePoint , [[CodeUnitCount]] : 1, [[IsUnpairedSurrogate]] : true } döndür.
codePoint 'i UTF16SurrogatePairToCodePoint (first , second ) olarak ayarla.
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:
codePoints yeni bir boş Liste olsun.
size , string 'in uzunluğu olsun.
position 0 olsun.
position < size olduğu sürece tekrar et,
codePoint = CodePointAt (string , position ) olsun.
codePoint .[[CodePoint]] 'ı codePoints 'e ekle.
position = position + codePoint .[[CodeUnitCount]] olarak ayarla.
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:
Eğer sourceText bir String ise , sourceText 'i StringToCodePoints (sourceText ) olarak ayarla.
goalSymbol 'ü hedef 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.
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.
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.
NOT
Belirli bir noktada bir erken hatası olan ve daha sonraki bir noktada da bir sözdizimi hatası olan bir metin düşünün. Bir ayrıştırma geçişi ve ardından bir erken hatalar geçişi yapan bir gerçekleştirim, sözdizimi hatasını rapor edebilir ve erken hatalar geçişine devam etmeyebilir. İki aktiviteyi iç içe geçiren bir gerçekleştirim, erken hatayı rapor edebilir ve sözdizimi hatasını bulmaya devam etmeyebilir. Üçüncü bir gerçekleştirim her iki hatayı da rapor edebilir. Tüm bu davranışlar uygundur.