B Programming Language
Ana Başlıklar ve Özetleri
Introduction
- B, Bell Labs’ta Ken Thompson ve Dennis Ritchie tarafından geliştirilmiş.
- Özellikle sistem programlama için uygun, typeless bir dil.
- B dili, GMAP’a göre daha kolay kod yazmaya izin verir.
- Sadece non-numeric işlemler (karakterler, bit manipülasyonu) için tasarlanmıştır.
General Layout of Programs
- B programları fonksiyonlardan oluşur.
- Her programda bir main() fonksiyonu bulunmalı; program buradan başlar.
- Fonksiyonlar bağımsızdır ve argüman alabilir.
- Kod blokları {} ile tanımlanır; satır sonu için ; kullanılır.
Compiling and Running B Programs
- Kaynak kod metin editörü ile yazılır.
- B derleyicisiyle derlenir ve TSS sistemi üzerinde çalıştırılır.
- Derleyici hataları: iki harfli kodlar + satır numarası (ör:
sx= syntax error).
A Working B Program; Variables
- Değişkenler
autoile tanımlanır (lokal). - Tüm değişkenler fonksiyon başında tanımlanmalı.
- B typeless’tır → tüm değişkenler 36-bit word olarak kabul edilir.
main() {
auto a, b, sum;
a = 1; b = 2;
sum = a + b;
putnumb(sum);
}
Constants
- Floating‑point sabitler destekleniyor (ondalık, exponensli, örn.
1.5e-2) - ASCII karakter sabitleri: 1–4 karakterli
'A','abc', 36‑bit word içinde doldurulur - BCD karakter sabitleri: grave accent içinde
`a`, 1–6 BCD karakter
Manifest Constants
name = text; ile tanımlanan makro‑benzeri yapılar: derleme sırasında text yerine geçer (10 seviye iç içe)
Arithmetic; Octal Numbers
- Sadece integer arithmetic desteklenir.
- Operatörler:
+ - * / % - Octal sayılar: başında
0olanlar (ör:0777= decimal 511). %operatörü yanında floating‑point aritmetiği de desteklenir
Characters; putchar; Newline
- Karakterler tek tırnak içinde:
'A' - Stringler çift tırnak içinde:
"Hello" putchar()fonksiyonu karakter basar.*nnewline’ı temsil eder.
External Variables
extrnanahtar kelimesi ile tanımlanır.- Fonksiyonlar dışında tanımlanan değişkenler globaldir.
- Argüman geçişi yapılabilir.
- Argümanlar call by value (değer kopyalanır).
put2char(x, y) {
putchar(x);
putchar(y);
}
Input; getchar
getchar()bir karakter okur.- Satır sonuna kadar karakterleri tek tek alır.
Relational Operators
==,!=,<,>,<=,>=- Mantıksal ifadeler için kullanılırlar.
if; goto; Labels; Comments
- if (expr) statement
else statement2 goto label;atlamalar için.- Yorum:
/* comment */
Compound Statements
- Birden fazla ifadeyi
{}ile grupla. - Tek ifade yerine blok kullanılabilir.
Function Nesting
- Fonksiyonlar diğer fonksiyonlara argüman olabilir:
putchar(getchar());
While statement; Assignment within an Expression
- While döngüsü:
- Atamayı koşul içinde yapabilirsin:
while (expr) statement
while ((c = getchar()) != ‘*n’) putchar(c);
Get Enes Özmert’s stories in your inbox
Join Medium for free to get updates from this writer.
More on Whiles; Null Statement; exit
- Sonsuz döngü:
while(1) { ... } exit()fonksiyonu programı sonlandırır.- Null statement:
;(hiçbir şey yapmaz).
Else Clause; Conditional Expressions
if ... elsezincirleri.- Kısa koşul:
x = (a < b) ? a : b;
Unary Operators
++,--prefix/postfix destekli- Ayrıca
#-unary float negation gibi ek operatörler mevcuttur
Bit Operators
- Bit düzeyinde işlemler:
&,|,~,<<,>>
Örnek: karakterleri bir word’e sıkıştırmak.
Assignment Operators
- Kısa atamalar:
- Atama
=en düşük önceliklidir
x =- 10 /* x = x — 10 */
x =+ 5 /* x = x + 5 */
(Dikkat: boşluklar önemli!)
Addressing
Detaylı: & adres alma, * dizinleme ile dereference; a[b] ⇔ *(a+b)
Vectors
- Diziler (vektörler):
auto v[10]; - Eleman erişimi:
v[i]
External Vectors
- Global diziler:
extrn v;
v[10] ‘hi!’, 1, 2, 3;
Addressing
&adres alma,*pointer dereference.
x[0] = *x;
Strings
- Çift tırnak içinde tanımlanır:
"hello" - Son karakter
*eile işaretlenir (EOT).
Return Statement
Fonksiyonlar değer döndürür:
return(y);
Other String Functions
concat(s, a1, a2, ...)→ String birleştirmegetstr(s)→ Bir satır okumaputstr(s)→ String yazma
Switch Statement; Break
switch(c) {
case ‘a’: action1(); break;
case ‘b’: action2(); break;
default: error();
}
Formatted IO
printf(“%d”, x);
Appendix C’de detaylı.
Lots More on IO
- Dosya açma:
openr(u, "file"); - Yazma:
openw(u, "file"); flush()→ Çıktıyı temizle.
System Call from TSS
- system(“command”);
- TSS komutlarını B’den çalıştırır.
Recursion
- Fonksiyonlar kendini çağırabilir:
putnumb(n) {
if (n/10) putnumb(n/10);
putchar(n%10 + ‘0’);
}
Argument Passing for Functions
- Argümanlar call by value ile geçer.
- Değişiklik yapmak için pointer kullanılır:
flip(&x, &y);
Calling Fortran and GMAP Subroutines
callf() ile diğer dillerdeki fonksiyonları çağırabilirsin.
Compiler Directives
#title,#lbl,#alias,#ttldat,#copyrightgibi satır içi direktifler kullanılıyor
Random File I/O, Sequential Streams
.BSET,unit, rastgele erişimli I/O (random file I/O) ve akış yönelimli I/O
******************************************************
Appendix A: Derleyici hata kodları
Appendix B: Escape karakterleri (*n, *t, *e, vb.)
Appendix C: printf rehberi
Appendix D: Operatör öncelikleri tablosu
Appendix E: İçindekiler dizini





