Dokümantasyon

Soz ile başlamak için tek durak.

Kurulumdan ilk programa, CLI ve REPL kullanımından 18 yerleşik fonksiyonun tam sözleşmesine kadar Soz v0.2.0 dokümantasyonu.

v0.2.0 Public AlphaWindows x64144/144 test

Hızlı başlangıç

Son kullanıcı paketi için Rust, Cargo, Python, pip, Node.js veya yönetici yetkisi gerekmez. v0.2.0 release sayfasından Windows x64 ZIP'i ve SHA256SUMS.txt dosyasını indirin; özeti doğruladıktan sonra ZIP'i çıkarın.

PowerShell
Get-FileHash .\soz-0.2.0-windows-x64.zip -Algorithm SHA256Get-Content .\SHA256SUMS.txt .\soz.exe version.\soz.exe run .\examples\merhaba.soz
Public Alpha: Söz dizimi ve çalışma zamanı davranışı sonraki alpha sürümlerinde değişebilir. Hazır binary, PowerShell betikleri ve VSIX imzasızdır; SmartScreen uyarı gösterebilir.

İlk program

merhaba.soz adlı UTF-8 dosya oluşturun. Anahtar kelimeler ASCII biçimindedir; metin içerikleri Türkçe ve diğer Unicode karakterleri kullanabilir.

merhaba.soz
isim = "Ahmet"yas = 18 eger yas >= 18:    yaz("Hos geldin " + isim)degilse:    yaz("Yasin kucuk")
Çıktı
Hos geldin Ahmet

Dosyayı soz merhaba.soz veya soz run merhaba.soz ile çalıştırabilirsiniz. Blok başlığı iki noktayla biter, gövde dört boşlukla girintilenir; tab desteklenmez.

CLI sözleşmesi

Argümansız kullanım REPL'i açar. Dosya çalıştırırken adım ve çıktı sınırlarını programın ihtiyacına göre değiştirebilirsiniz.

soz help
sozsoz <dosya.soz> [--max-steps <sayi>] [--max-output <sayi>]soz run <dosya.soz> [--max-steps <sayi>] [--max-output <sayi>]soz check <dosya.soz>soz versionsoz help
KodAnlam
0Başarılı çalışma.
1Soz kaynak, lexer, parser veya çalışma zamanı hatası.
2CLI kullanım hatası.
3Dosya veya G/Ç hatası.

Söz dizimi özeti

Soz'un 16 anahtar kelimesi ve sabiti büyük/küçük harfe duyarlıdır. eğer, değilse, işlev ve dön gibi Türkçe karakterli biçimler anahtar kelime değildir.

Anahtar kelimeler
eger yoksa degilse iken tekrar icindeislev don kir devamdogru yanlis bos ve veya degil
Alanv0.2.0
DeğerlerSayı, metin, mantık, bos, liste ve fonksiyon.
Operatörler+ - * / // % ** == != < <= > >= ve veya degil
Koşullareger, yoksa, degilse
Döngüleriken, tekrar ... icinde ..., kir, devam
Fonksiyonlarislev, don ve özyineleme.
ListelerSıfır tabanlı okuma, yerinde ve iç içe indeks güncelleme.
Çalışan örneklerle dil rehberine git →

Etkileşimli REPL

soz veya portable pakette .\soz.exe komutu REPL'i açar. bos olmayan ifade sonuçları otomatik yazdırılır; atamalar yazdırılmaz.

soz.exeetkileşimli oturum
Soz 0.2.0 Yardim icin: yardim Cikmak icin: cik >>> isim = "Ahmet" >>> 5 + 3 8 >>> yaz("Merhaba " + isim) Merhaba Ahmet
  • Değişkenler ve fonksiyonlar oturum boyunca kalır.
  • İlk satırı : ile biten blok boş satırla tamamlanır.
  • Hatalar oturumu kapatmaz.
  • yardim, surum, temizle ve cik meta komutları vardır.

Hata mesajları

Tanılar stderr'e yazılır ve mümkün olduğunda tür, kaynak konumu, caret/span, yardım ve Soz çağrı izi içerir.

Hata: Tanimlanmamis degisken: 'puann'. Tur: calisma zamani Dosya: oyun.soz Satir: 2 Sutun: 5 2 | yaz(puann) | ^^^^^ 'puan' demek istemis olabilir misin?

soz check dosya.soz, programı çalıştırmadan lexer ve parser denetimi yapar. Başarıda Kontrol basarili, hatada tanı ve çıkış kodu 1 üretir.

Çalışma limitleri

Dosya çalıştırmaları sonsuz döngü, kontrolsüz çıktı ve aşırı çağrı derinliğine karşı varsayılan sınırlar uygular.

1.000.000çalışma adımı
1.000.000UTF-8 çıktı baytı
256fonksiyon çağrı derinliği
1.000.000aralik eleman üst sınırı
Sandbox değildir. Bu limitler işletim sistemi yalıtımı, genel bellek kotası veya girdi için zaman aşımı sağlamaz. Güvenilmeyen kodu ayrı bir süreç/hesap/VM sınırında değerlendirin.

VS Code

Release sayfasındaki soz-language-support-0.2.0.vsixdosyasını Extensions → … → Install from VSIX yoluyla kurun. Uzantı Marketplace'te yayımlanmış değildir.

PowerShell
code --install-extension .\\soz-language-support-0.2.0.vsix --force
  • Güncel syntax renklendirmesi
  • 16 anahtar kelime için statik completion
  • 18 yerleşik için statik completion
  • 10 kod snippet'i
  • Soz: Dosyayi Calistir komutu
  • Güvenilen workspace kontrolü
Uzantı interpreter, debugger, biçimlendirici veya full Language Server içermez. Run komutu için CLI PATH üzerinde olmalıdır.
VS Code uzantısı kaynaklarını incele ↗

Temel kütüphane

18 yerleşik fonksiyon

G/Ç, aralık, tür dönüşümü, liste ve metin işlemleri interpreter ile birlikte gelir. Ek paket kurulumu gerekmez.

Yerleşik

yaz(deger) -> bos

Değeri Soz gösterimiyle standart çıktıya yazar ve satırı bitirir.

Parametreler

degerherhangi bir değer
Standart çıktıya yazılacak değer.

Dönüş değeri

bos

Olası hata

Çıktı bayt limiti aşılırsa veya standart çıktı yazılamazsa çalışma zamanı hatası oluşur.

yaz.soz
yaz("Merhaba")yaz([1, 2, 3])

Yerleşik

aralik(baslangic, bitis) -> liste

Başlangıç dahil, bitiş hariç değerleri üretir. Bitiş başlangıçtan küçük ya da eşitse boş liste döner.

Parametreler

baslangictamsayı
Listeye dahil edilen ilk sayı.
bitistamsayı
Listeye dahil edilmeyen üst sınır.

Dönüş değeri

Adımı 1 olan sayı listesi.

Olası hata

Argümanlar sonlu tamsayı değilse, i64 sınırını aşarsa veya sonuç 1.000.000 elemandan büyükse hata verir.

aralik.soz
sayilar = aralik(0, 5)yaz(sayilar)  # [0, 1, 2, 3, 4]

Yerleşik

girdi(prompt?) -> metin | bos

Standart girdiden bir satır okur. İstem verilirse okumadan önce ekrana yazar.

Parametreler

promptmetin, isteğe bağlı
Satır sonu eklenmeden gösterilecek istem.

Dönüş değeri

Okunan satırdan sonlandırıcıları çıkarılmış metin; EOF'ta bos.

Olası hata

Prompt metin değilse, G/Ç başarısız olursa veya prompt çıktı limitini aşarsa hata verir.

girdi.soz
isim = girdi("Adin: ")yaz("Merhaba " + isim)

Yerleşik

sayi(deger) -> sayi

Sayıyı aynen döndürür veya kırpılmış metni sayı olarak ayrıştırır.

Parametreler

degersayı | metin
Sayıya dönüştürülecek değer.

Dönüş değeri

Sonlu bir sayı.

Olası hata

Geçersiz metin, NaN/sonsuz sonuç, mantık, bos, liste veya fonksiyon değeri reddedilir.

sayi.soz
yaz(sayi(" 42 "))   # 42yaz(sayi("3.25"))  # 3.25

Yerleşik

metin(deger) -> metin

Temel değerleri ve listeleri Soz'un okunabilir metin gösterimine çevirir.

Parametreler

degersayı | metin | mantık | bos | liste
Soz gösterimine dönüştürülecek değer.

Dönüş değeri

Değerin metin gösterimi.

Olası hata

Kullanıcı fonksiyonu veya yerleşik fonksiyon değeri metne dönüştürülemez.

metin.soz
yaz(metin(dogru))   # dogruyaz(metin([1, 2]))  # [1, 2]

Yerleşik

mantik(deger) -> mantik

dogru, "dogru" ve 1 değerlerini dogru; yanlis, "yanlis" ve 0 değerlerini yanlis yapar.

Parametreler

degermantık | metin | sayı
Kesin mantık eşlemesi uygulanacak değer.

Dönüş değeri

dogru veya yanlis.

Olası hata

Belirlenen altı kesin eşleşmenin dışındaki sayı ve metinler dahil diğer değerler reddedilir.

mantik.soz
yaz(mantik("dogru"))  # dogruyaz(mantik(0))        # yanlis

Yerleşik

tur(deger) -> metin

Değerin Soz çalışma zamanı tür adını döndürür.

Parametreler

degerherhangi bir değer
Çalışma zamanı türü sorgulanacak değer.

Dönüş değeri

"sayi", "metin", "mantik", "bos", "liste", "islev" veya "yerlesik_islev".

Olası hata

Yalnızca yanlış argüman sayısı çalışma zamanı hatası üretir.

tur.soz
yaz(tur(1))      # sayiyaz(tur([1, 2])) # liste

Yerleşik

uzunluk(deger) -> sayi

Metinde UTF-8 baytlarını değil Unicode karakterleri; listede elemanları sayar.

Parametreler

degermetin | liste
Uzunluğu hesaplanacak değer.

Dönüş değeri

Unicode karakter veya liste elemanı sayısı.

Olası hata

Metin ve liste dışındaki türler reddedilir.

uzunluk.soz
yaz(uzunluk("Çağrı"))      # 5yaz(uzunluk([10, 20, 30])) # 3

Yerleşik

ekle(liste, deger) -> bos

Değeri paylaşılan listenin sonuna yerinde ekler.

Parametreler

listeliste
Yerinde değiştirilecek liste.
degerherhangi bir değer
Listenin sonuna eklenecek değer.

Dönüş değeri

bos

Olası hata

İlk argüman liste değilse veya işlem doğrudan/dolaylı döngüsel liste oluşturursa hata verir.

ekle.soz
sayilar = [1, 2]ekle(sayilar, 3)yaz(sayilar)  # [1, 2, 3]

Yerleşik

cikar(liste, deger) -> mantik

İlk eşleşen değeri listeden kaldırır.

Parametreler

listeliste
Yerinde değiştirilecek liste.
degerherhangi bir değer
İlk eşleşmesi kaldırılacak değer.

Dönüş değeri

Bulup kaldırırsa dogru, bulunamazsa yanlis.

Olası hata

İlk argüman liste değilse veya argüman sayısı yanlışsa hata verir.

cikar.soz
sayilar = [1, 2, 1]yaz(cikar(sayilar, 1))  # dogruyaz(sayilar)            # [2, 1]

Yerleşik

sil(liste, indeks) -> deger

Belirtilen elemanı yerinde kaldırır ve kaldırılan değeri döndürür.

Parametreler

listeliste
Elemanı kaldırılacak liste.
indeksnegatif olmayan tamsayı
Sıfır tabanlı eleman konumu.

Dönüş değeri

Listeden kaldırılan değer.

Olası hata

Liste olmayan ilk argüman; negatif, ondalık, sonlu olmayan veya sınır dışı indeks hata üretir.

sil.soz
sayilar = [10, 20, 30]yaz(sil(sayilar, 1))  # 20yaz(sayilar)          # [10, 30]

Yerleşik

icerir(koleksiyon, deger) -> mantik

Listede eşit değeri veya metin içinde literal parçayı arar.

Parametreler

koleksiyonliste | metin
Arama yapılacak liste veya metin.
degerherhangi bir değer | metin parçası
Listede değer; metinde literal ve büyük/küçük harfe duyarlı parça.

Dönüş değeri

Eşleşme varsa dogru, yoksa yanlis.

Olası hata

İlk argüman liste/metin değilse veya metin aramasında ikinci argüman metin değilse hata verir.

icerir.soz
yaz(icerir([1, 2], 2))        # dogruyaz(icerir("Merhaba", "haba")) # dogru

Yerleşik

buyuk(metin) -> metin

Rust Unicode eşlemesini kullanarak büyük harfe çevirir.

Parametreler

metinmetin
Büyük harfe dönüştürülecek metin.

Dönüş değeri

Unicode büyük harf dönüşümü uygulanmış yeni metin.

Olası hata

Argüman metin değilse hata verir.

buyuk.soz
yaz(buyuk("çağrı"))  # ÇAĞRI

Yerleşik

kucuk(metin) -> metin

Rust Unicode eşlemesini kullanarak küçük harfe çevirir.

Parametreler

metinmetin
Küçük harfe dönüştürülecek metin.

Dönüş değeri

Unicode küçük harf dönüşümü uygulanmış yeni metin.

Olası hata

Argüman metin değilse hata verir.

kucuk.soz
yaz(kucuk("ÇAĞRI"))  # çağri

Yerleşik

kirp(metin) -> metin

İç boşlukları korur, yalnızca metnin iki ucunu kırpar.

Parametreler

metinmetin
Dış boşlukları kaldırılacak metin.

Dönüş değeri

Baş ve son Unicode boşlukları kaldırılmış yeni metin.

Olası hata

Argüman metin değilse hata verir.

kirp.soz
yaz(kirp("  merhaba \t"))  # merhaba

Yerleşik

bol(metin, ayirici) -> liste

Metni literal ayırıcıyla parçalara böler.

Parametreler

metinmetin
Parçalanacak metin.
ayiriciboş olmayan metin
Literal parçalama ayırıcısı.

Dönüş değeri

Metin parçalarından oluşan liste.

Olası hata

Argümanlar metin değilse veya ayırıcı boşsa hata verir.

bol.soz
yaz(bol("a,b,c", ","))  # ["a", "b", "c"]

Yerleşik

birlestir(liste, ayirici) -> metin

Metin listesini verilen ayırıcıyla birleştirir.

Parametreler

listemetin listesi
Birleştirilecek metin değerleri.
ayiricimetin
Ögeler arasına eklenecek literal metin.

Dönüş değeri

Birleştirilmiş yeni metin; boş liste için boş metin.

Olası hata

İlk argüman liste, ikinci argüman metin değilse veya listede metin olmayan eleman varsa hata verir.

birlestir.soz
yaz(birlestir(["a", "b", "c"], "-"))  # a-b-c

Yerleşik

degistir(metin, eski, yeni) -> metin

Orijinal metni değiştirmeden tüm literal eşleşmeleri yeniler.

Parametreler

metinmetin
Arama yapılacak kaynak metin.
eskimetin
Değiştirilecek literal eşleşme.
yenimetin
Her eşleşmenin yerine gelecek metin.

Dönüş değeri

Tüm eşleşmeleri değiştirilmiş yeni metin.

Olası hata

Üç argümandan herhangi biri metin değilse hata verir.

degistir.soz
yaz(degistir("aba", "a", "x"))  # xbx