Digraflar ve trigraflar - Digraphs and trigraphs

Olarak bilgisayar programlama , digraphs ve üç karakterli iki ve üçüncü sekansları karakterleri görünür sırasıyla, kaynak kodu , bir birine göre ve bir programlama dili de birer karakter sanki 'in özellikleri, tedavi edilmelidir.

Digrafları ve trigrafları kullanmanın çeşitli nedenleri vardır: klavyeler , dilin tüm karakter setini kapsayacak tuşlara sahip olmayabilir , özel karakterlerin girişi zor olabilir, metin editörleri bazı karakterleri özel kullanım için ayırabilir vb. Trigraflar , ve gibi karakterlerin bulunmadığı bazı EBCDIC kod sayfaları için de kullanılabilir . {}

Tarih

C programlama dilinin temel karakter kümesi , ISO 646 değişmez karakter kümesinin dışında kalan dokuz karakter içeren ASCII karakter kümesinin bir alt kümesidir. Bu yazılması için bir sorun oluşturabilir kaynak kodunu zaman kodlama (ve muhtemelen klavye ), bu dokuz karakterlerden herhangi desteklemez kullanılıyor. ANSI C komitesi ISO 646 karakter kümesi herhangi bir sürümünü destekleyen klavyeleri kullanarak kaynak kodunu girerek bir yolu olarak üç karakterli icat etti.

Uygulamalar

Trigraflara, derleyici test takımlarının dışında yaygın olarak rastlanmaz . Bazı derleyiciler, varsayılan olarak trigrafların tanınmasını kapatma veya trigrafları devre dışı bırakma seçeneğini destekler ve bunları açmak için bir seçenek gerektirir. Bazıları, kaynak dosyalarda trigraflarla karşılaştıklarında uyarı verebilir. BorlandTRIGRAPH.EXE , yalnızca trigraf işleme istendiğinde (gerekçe derleme hızını en üst düzeye çıkarmaktı) kullanılmak üzere ayrı bir program olan trigraf önişlemcisi ( ) sağladı.

Dil desteği

Farklı sistemler, aşağıda açıklandığı gibi farklı digraf ve trigraf setlerini tanımlar.

Algol

ALGOL'un ilk sürümleri , standartlaştırılmış ASCII ve EBCDIC karakter kümelerinden önceydi ve tipik olarak üreticiye özgü altı bitlik karakter kodu kullanılarak uygulandı . Bir dizi ALGOL işlemi ya mevcut karakter setinde kod noktalarından yoksundu ya da çevre birimleri tarafından desteklenmedi, bu da :=for (atama) ve >=for (büyüktür veya eşittir) dahil olmak üzere bir dizi ikameye yol açtı .

paskal

Pascal programlama dili digraphs destekler (., .), (*ve *)için [, ], {ve }sırasıyla. Diğer tüm durumlarda burada belirtilen aksine (*ve *)hâlâ ve geniş kullanımdadır. Bununla birlikte, birçok derleyici bunları gerçek digraflar yerine farklı bir yorum bloğu türü olarak ele alır, yani ile başlayan bir yorum ile (*kapatılamaz }ve bunun tersi de geçerlidir.

J

J programlama dili soyundan olan APL ama yerine ASCII karakter kümesi kullanır APL sembolleri . ASCII'nin yazdırılabilir aralığı, APL'nin özel sembol setinden daha küçük olduğu için, .(nokta) ve :(iki nokta) karakterler ASCII sembollerini etkilemek için kullanılır, tek grafikleri, digrafları veya nadiren trigrafları bağımsız "semboller" olarak etkin bir şekilde yorumlar.

C ve C++'da digraf ve trigraf kullanımının aksine, J'de bunlara tek karakterli eşdeğerler yoktur.

C

trigraf Eş değer
??= #
??/ \
??' ^
??( [
??) ]
??! |
??< {
??> }
??- ~

C önişlemci (C ve küçük farklar ile birlikte kullanıldığında , C ++ , bakınız aşağıdaki ) başka bir işleme tabi tutulmadan önce tek karakterlik eşdeğerleriyle bu tabloda dokuz TriGraph dizilerinin tüm oluşumları değiştirir.

Bir programcı, iki soru işaretini bir araya getirmek isteyebilir, ancak derleyicinin bunları bir trigraf tanıtıyormuş gibi görmesini istemeyebilir. C dilbilgisi iki ardışık ?simgeye izin vermez , bu nedenle bir C dosyasında arka arkaya iki soru işaretinin kullanılabileceği yerler yalnızca çok karakterli sabitler, dize değişmezleri ve yorumlardır. Bu, özellikle sabitin bir dosya türü veya oluşturucu olarak kullanılabileceği klasik Mac OS için bir sorundur '????'. Bir dize değişmezi içine iki ardışık soru işaretini güvenli bir şekilde yerleştirmek için, programcı dize bitiştirme "...?""?..."veya bir kaçış dizisi kullanabilir "...?\?..." .

???kendisi bir trigraf dizisi değildir, ancak arkasından önce 16 s olan aşağıdaki örnekte olduğu -gibi ?+ olarak yorumlanacak gibi bir karakter tarafından izlenir . ??-?/

??/Sesli üç harf çizgi ekleme için kaçan bir yeni satır tanıtmak için kullanılabilir; bu, önişlemci içinde trigrafların doğru ve verimli bir şekilde işlenmesi için dikkate alınmalıdır. Ayrıca, özellikle yorumlarda sürprizlere neden olabilir. Örneğin:

 // Will the next line be executed????????????????/
 a++;

tek bir mantıksal yorum satırı olan (C++ ve C99'da kullanılır ) ve

 /??/
 * A comment *??/
 /

hangi doğru biçimlendirilmiş bir blok yorumdur. Konsept, yalnızca bir dönüş ifadesinin yürütüleceği aşağıdaki C99 örneğinde olduğu gibi trigrafları kontrol etmek için kullanılabilir.

int trigraphsavailable() // returns 0 or 1; language standard C99 or later
{
	// are trigraphs available??/
	return 0;
	return 1;
}
1994 yılında C standardında tanıtılan alternatif digraflar
Digraf Eş değer
<: [
:> ]
<% {
%> }
%: #

1994 yılında, C standardında yapılan ve C99'a dahil edilen normatif bir değişiklik, digrafları beş üç grafiğin daha okunabilir alternatifleri olarak sağladı.

Üç karakterli farklı olarak, digraphs sırasında işlenir simgelileştirme ve herhangi bir digraph her zaman kendi başına tam bir belirteç temsil ettiği, veya jeton oluşturmak gerekir %:%:önişlemci birleştirme belirteci değiştirilmesi ##. Başka bir belirteç içinde bir digraf dizisi oluşursa, örneğin tırnak içine alınmış bir dize veya bir karakter sabiti, değiştirilmez.

C++

Jeton Eş değer
compl ~
not !
bitand &
bitor |
and &&
or ||
xor ^
and_eq &=
or_eq |=
xor_eq ^=
not_eq !=

C++ ( C++14 aracılığıyla , aşağıya bakın ), C99 eklemeleri dahil, ancak tabloda listelenen ek belirteçlerle C gibi davranır.

Not olarak, %:%:iki oluşumundan ziyade tek bir belirteç olarak kabul edilir %:.

C++ Standardı, "digraph" terimiyle ilgili olarak şu yorumu yapar:

Alternatif önişleme belirteçlerinden biri %:%:ve elbette birkaç birincil belirteç iki karakter içerdiğinden , "digraf" (iki karakterden oluşan belirteç) terimi tam olarak açıklayıcı değildir . Bununla birlikte, sözcüksel anahtar kelimeler olmayan bu alternatif belirteçler, halk dilinde "digraflar" olarak bilinir.

C++11 olarak piyasaya sürülen C++ 0x'te kullanımdan kaldırılması için trigraflar önerildi . Buna kendisi ve diğer C++ kullanıcıları adına konuşan IBM karşı çıktı ve sonuç olarak üçlemeler C++11'de tutuldu. Daha sonra C++17'de kaldırılmak üzere (yalnızca kullanımdan kaldırılmakla kalmayıp) trigraflar yeniden önerildi . Bu bir komite oylamasından geçti ve IBM'in muhalefetine rağmen trigraflar (ancak ek belirteçler değil) C++ 17'den kaldırıldı. Trigrafları kullanan mevcut kod, kaynak dosyalardan (trigrafları ayrıştırma) trigraf içermeyen temel kaynak karakter kümesine çevrilerek desteklenebilir.

RPL

RPL dilini ve giriş yöntemini destekleyen Hewlett-Packard hesap makineleri , hesap makinelerinin yabancı platformlarda genişletilmiş karakter kümesinin yedi bit olmayan ASCII karakterlerini güvenilir bir şekilde kopyalamak ve klavyeyi kolaylaştırmak için çok sayıda trigrafa ( TIO kodları da denir ) destek sağlar. CHARS uygulamasını kullanmadan giriş yapın . Tüm TIO kodlarının ilk karakteri a'dır , ardından değiştirilecek glife belirsiz bir şekilde benzeyen diğer iki ASCII karakteri gelir. Diğer tüm karakterler, özel TIO kod sözdizimi kullanılarak girilebilir ; nnn , karşılık gelen kod noktasının üç basamaklı ondalık sayısıdır ( gerekirse baştaki sıfırlarla birlikte ) (böylece resmi olarak bir tetragrafı temsil eder ). \\nnn

Uygulama desteği

Vim

Vim metin editörü aşağıdaki metin karakterlerinin gerçek giriş için digraphs destekler RFC  1345 . Digrafların girişi varsayılan olarak +'ya bağlıdır . Olası tüm digraphs listesi Vim yazarak görüntülenebilir . CtrlK:dig

GNU Ekranı

GNU Screen , varsayılan olarak Ctrl+ A Ctrl+ ile bağlantılı bir digraph komutuna sahiptir V.

Lotus

Lotus 1-2-3 için DOS kullanımlar Alt+ F1olarak oluşturma anahtarın birçok özel karakterler daha kolay girişini sağlamak için , Lotus Uluslararası karakter kümesi (LICS) ve Lotus Çok Byte Karakter Seti (LMBCS).

Ayrıca bakınız

Referanslar

Dış bağlantılar