İçeriğe geç
LexerLangv0.1.0

Sözdizimi

Dosya düzeni, isim yazımı, bloklar, switch ve işleçler.

Her dosya aynı sırayı izler:

LexerLang
package <ad>          # zorunlu, ilk satır
use <modül>, ...      # package'tan hemen sonra
<gövde>
LexerLang
package merhaba

use http_server, html_document

$app = new http_server

Uzantılar: .lexer giriş dosyası, .lx sayfa ve kütüphane dosyası.

İsim yazımı#

Bir isim ya baştan sona küçük harf ya da baştan sona büyük harf olmalıdır:

LexerLang
http_request   form_data   a1        # geçerli — normal isimler
POST   GET   MAX_SIZE                # geçerli — sabitler
Person   HttpClient                  # geçerli — sınıf adları
LexerLang
myVar   formData   $Ad               # geçersiz — karışık yazım

Büyük harfle başlamak yalnızca sınıf adlarında geçerlidir. Küçük harfle başlayıp içinde büyük harf geçen yazım her yerde geçersizdir.

Rakam ve _ her iki biçimde de serbesttir. Keyword'ler yalnızca küçük harfle yazılır; IF yazmak hatadır.

Bloklar#

Blok açan her yapı end <keyword> ile kapanır; süslü parantez yoktur ve girinti anlamlıdır.

LexerLang
if $a == 10 then
    out("10")
else
    out("diğer")
end if

for $dil in $diller
    out($dil)
end for

while $i > 0
    $i = $i - 1
end while

func topla($a, $b) as int32
    return $a + $b
end func

with $app
    .document.add($doc)
end with

with bloğunda nokta ile başlayan satırlar bloğun konusuna uygulanır: .document.add($doc) yazımı $app.document.add($doc) demektir.

Tek satır#

: tek satırlık yazım için deyim ayırıcıdır:

LexerLang
if $a == 10 then: out("10"): end if
func kisa($x): return $x * 2: end func

switch#

Tek bir değeri birden fazla ihtimale karşı ölçer:

LexerLang
switch $req.path
    case "/giris", "/kayit"
        $app.layout($kimlik_duzeni)
    case in $yonetim_yollari
        $app.layout($yonetim_duzeni)
    default
        $app.layout($magaza_duzeni)
end switch
YazımAnlamı
case "a", "b"değerlerden herhangi biri eşleşirse
case in $dizikonu dizinin içindeyse
defaulthiçbiri eşleşmezse; son dal olmalıdır

Konu bir kez ölçülür: yan etkili bir çağrı her dalda yeniden çalışsaydı sürpriz olurdu.

Eşleşen ilk dal çalışır ve switch biter — alt dala düşme yoktur. C'deki davranış, break yazmayı unutunca sessizce yanlış dalı da çalıştırırdı.

Hiçbir dal eşleşmez ve default yoksa hiçbir şey olmaz. Dallar arasında serbest deyim yazılamaz: yalnızca case ve default.

İşleçler#

and / or yerine && / || yazılabilir; aynı işleçlerdir, yazım tercihidir. Olumsuzlama yalnızca not.

LexerLang
if $stok > 0 && $urun.aktif then: out("satılabilir"): end if
if $rol == "admin" || $rol == "editor" then: out("yetkili"): end if
if not $sepet then: out("sepet boş"): end if

Tek & ve tek | yoktur. Dilde bit işlemleri bulunmadığı için tek işaret yazan kişi neredeyse her zaman ikincisini unutmuştur; ona sessizce başka bir anlam yüklemek yanlış olurdu.

İsimsiz fonksiyon#

func bir ifade olarak da yazılabilir. Tanımlandığı yerdeki değişkenleri görür:

LexerLang
$carpan = 3
$carp = func($x) as int32
    return $x * $carpan
end func

out($carp(5))              # 15

Yönlendirme tabloları ve session.with_lock bunu kullanır.

Nesnede virgül#

Nesne değişmezinde virgül zorunlu değildir; yeni bir alanın başladığı ad: yazımından anlaşılır. Değeri blok olan tablolarda her end func satırının sonuna virgül koymak gerekmesin diye:

LexerLang
{
    "/": func($req, $res) as void
        $res.send("a")
    end func

    "/b": func($req, $res) as void
        $res.send("b")
    end func
}

Yorumlar#

LexerLang
# tek satır

###
Birden çok satır.
###

Sırada#

Tipler ve değişkenler.