Skip to content

Bilang (Bahasa is not a language) adalah sebuah interpreter untuk bahasa pemrograman berbahasa indonesia

License

Notifications You must be signed in to change notification settings

dedisuryadi/bilang

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Go Go Reference

Bilang

Bilang (Bahasa is not a language) adalah sebuah interpreter untuk bahasa pemrograman berbahasa indonesia.

Bilang tidak mengikuti kaidah berbahasa Indonesia yang baik dan benar ketika melakukan terjemahan dari Bahasa Inggris ke Bahasa Indonesia, hal tersebut disengaja agar tidak kehilangan arti aslinya, kita lebih paham World Wide Web (www) daripada Waring Wera Wanua.

Fitur yang sudah bisa digunakan:

  • REPL
    go run .

atau

    cat script.bi | go run .
  • Variabel
var a = "halo dunia"
println(a)

  • Konstanta
konst a = "halo dunia"
println(a)
  • Fungsi adalah First class citizen
var reduce = fn(arr, init, f) {
    var iter = fn(arr, hasil) {
        jika (panjang(arr) == 0) { pilih hasil };
        iter(ekor(arr), f(hasil, awal(arr)))
    }
    iter(arr, init)
}

var sum = arr => reduce(arr, 0, fn(init, nilai){ init+nilai })	
sum([1,2,3,4,5])
  • Pipe operator
var reduce = fn(arr, init, f) {
    var iter = fn(arr, hasil) {
        jika (panjang(arr) == 0) { pilih hasil };
        iter(ekor(arr), f(hasil, arr |> awal))
    }
    iter(arr, init)
}

var sum = arr => reduce(arr, 0, fn(init, nilai){ init+nilai })
var map = fn(arr, f) {
    var iter = fn(arr, akum) {
        jika (panjang(arr) == 0) { pilih akum }
        var hasil = push(akum, arr |> awal |> f)
        iter(arr |> ekor, hasil)
    }
    iter(arr, [])
}

var a = [1,2,3,4,5]
var ganda = x => x*2
map(a, ganda) |> sum

  • Strict typing
$ echo '
 var a = "string"
 a = 10
 ' | go run .
ERROR: perubahan tipe variabel a dari STRING menjadi FLOAT tidak diizinkan
  • Switch statement
var rgb_ke_hsl = fn(arr) {
    var r = arr[0]/255
    var g = arr[1]/255
    var b = arr[2]/255
    var max = math.Max(r, math.Max(g, b))
    var min = math.Min(r, math.Min(g, b))
    var h = 0
    var l = (max+min)/2
    var d = max - min
    var s = jika (l > 1/2) {
        d / (2 - max - min)
    } atau {
        d / (max + min)
    }

    h = pilah max {
        r -> (g - b) / d + jika (g < b) { 6 } atau { 0 }
        g -> (b - r) / d + 2
        b -> (r - g) / d + 4
    }

    pilih [h, s, l]
}

var merah_rgb = [255, 0, 0]
var merah_hsl = rgb_ke_hsl(merah_rgb)

stdout("merah_rgb = ", merah_rgb, "\n")
stdout("merah_hsl = ", merah_hsl, "\n")

  • Dan lainnya

TODO:

  • Komentar
  • Error handling
  • Tipe Data Integer
  • Notasi angka float (dan eksponen)
  • Standard library
  • Testing ala go test
  • Notasi pendek variabel menggunakan := seperti Go
  • Modul sistem (ekspor & impor)

Repo ini pada awalnya dibuat sebagai tempat latihan saat membaca buku Writing An Interpreter In Go maka dari itu akan ada banyak kesamaan struktur kode dengan Monkey Language. Pull request welcome.

About

Bilang (Bahasa is not a language) adalah sebuah interpreter untuk bahasa pemrograman berbahasa indonesia

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages