Aiko adalah bahasa pemrograman eksperimental yang ditulis dengan C++ dan LLVM-14.
Bahasa ini dirancang untuk eksplorasi konsep compiler, interpreter, dan sistem tipe, dengan sintaks sederhana yang menggabungkan fitur statis dan dinamis.
-
Tipe Data
- Primitif:
i32,i64,f32,f64,bool,str,none - Kompleks:
array(1D & 2D, dinamis & statis),struct
- Primitif:
-
Variabel
- Deklarasi dengan atau tanpa initializer
- Tipe statis atau dinamis
- Shadowing variabel dalam scope
- Assignment dan operator assignment:
=,+=,-=,*=,/=,%=
-
Operator
- Unary:
-,! - Binary:
+,-,*,/,% - Perbandingan & logika (==, !=, <, <=, >, >=, &&, ||)
- Unary:
-
Kontrol Alur
forloop dengan rangeif,elif,elsebreak,continue
-
Fungsi
- Fungsi dengan return dan procedure (
-> none) - Parameter eksplisit dengan tipe data
- Shadowing dalam fungsi
- Support return type
i32,f64,str,bool,none
- Fungsi dengan return dan procedure (
-
Struct
- Deklarasi & inisialisasi struct
- Akses member struct
- Array of struct
- Static struct array (eksperimental)
-
Array
- Array dinamis 1D & 2D
- Array statis dengan ukuran eksplisit (
i32[5]) - Array of struct
- Assignment & akses elemen dengan index
-
Input & Output
print(expr)input(prompt, type)→ input dengan tipe eksplisit
-
Fitur Tambahan
typeof(var)untuk mendapatkan tipe variabel- Error handling dasar (array out of bounds, tipe tidak cocok, dll.)
- Kalkulator sederhana berbasis input
Clone repo:
git clone https://github.com/username/aiko-lang.git
cd aiko-lang
mkdir out/
nano run.sh # isi run.sh untuk mengcompile, bisa juga dengan makefile atau cmake
./run.sh # bisa juga pakai cmake atau makefile- Variable & Print
print(-10);
print(10.566);
print(false);
print("hello");
var x = 99;
print(x);- Operator
var angka = 10 + 7 - 5 * 4 / 2;
print(angka);
var val = 10;
val += 5;
print(val);- Control Flow
for i = 0 .. 5 {
if(i == 2) continue;
if(i == 4) break;
print(i);
}
var y = 10;
if(y <= 4) {
print("<= 4");
}
elif(y <= 8) {
print("<= 8");
}
else {
print("> 8");
}- Function
fun add(x: i32, y: i32) -> i32 {
return x + y;
}
var result = add(10, 20);
print(result);
fun displayX(x: i32) -> none {
print(x);
}
displayX(5);- Struct
struct Person {
name: str,
age: i32
};
var p = Person{name: "Asep", age: 30};
print(p.name);
p.name = "Yuri";
print(p.name);- Array
var arr = [1, 2, 3];
arr[1] = 99;
print(arr);
var matrix = [[1,2],[3,4]];
print(matrix[0][1]);
var staticArr: i32[5] = [2,4,6,8,10];
staticArr[1] = 999;
print(staticArr);- Array of Struct
struct Student {
name: str,
nim: i32
};
var students = [
Student{name: "hammpa", nim: 121},
Student{name: "bluebird", nim: 125}
];
print(students[0].name);
students[0].name = "didigaw";
print(students[0].name);- Struct with Explicit Type
struct Student {
name: str,
nim: i32,
age: i32
};
var s1: Student = Student{
name: "Asep",
nim: 12345,
age: 19
};- Array of Struct with Explicit Type
var staticArrStruct4: Car[2];
staticArrStruct4[0] = Car{name: "lamborghini"};
staticArrStruct4[1] = Car{name: "mazda"};
print("Static struct array 4 index 0 dan 1 name:");
print(staticArrStruct4[0].name);
print(staticArrStruct4[1].name);Bahasa ini masih dalam tahap pengembangan; beberapa fitur seperti assignment dan array 2D belum sepenuhnya stabil. Dirancang untuk pembelajaran compiler, interpretasi, dan eksperimen dengan LLVM.