Kriolu is an interpreter written in C with syntax in the unofficial language of Cape Verde Island, Kriolu. To facilitate learning and familiarity, the syntax is simple and has almost direct relationships with other popular languages such as C, Java, Javascript, C#, etc.
- Fix typos and grammar errors.
- code snipet with syntax highlited link
TBD
-
Booleans. You can't code without logic and you can't logic without Boolean.
verdadi falsu; -
Numbers.
9876; 98.76; -
Strings.
"Abo mi"; ""; -
Null. A
nulorepresents "no value". In other popular languages such as Java and C, It's callednull.nulo;
To store and keep track of all the data in our program, we use variables to create names to which data can be assigned.
mimoria nome;
imprimi nome; // nil
mimoria cidade = "Praia";
imprimi cidade; // Praia
// Nota: [obrigatorio]
mimoria Pessoa {
[nome] = "", // Default value '""'
cidade = "",
idade = 0
};
mimoria v2 = {
x = 0,
y = 0
};
mimoria p1 = Pessoa{ nome = "Joao" };
p1.cidade = "Sao Vicente'
p1.idade = 27;
mimoria p2 = Pessoa{nome = "Joana", cidade = "Boavista"};
mimoria p3 = Pessoa{nome = "Djon", cidade = "Praia"};
mimoria data = [1, "2"];
data.push(10);
data.push(p1);
mimoria encontro = Pessoa[];
{
encontro.poi(p1);
encontro.poi(p2);
encontro.poi(p3);
encontro.poi("Ana"); // erro: aceita so Pessoa
// or
encontro[..., p1, p2, p3];
encontro[p1, p2, p3, ...];
encontro[p1, p2, ..., p3];
}
encontro.tra(p1);
With ways to create and store data in our program, expressions are actions we can perform on them leaving as a side effect a new value.
Expressions are actions we can perform on data, which produces a value as a result.
Arithmetic
kriolu supports basic arithmetic operations such as:
Binary operations
// Numbers
1 + 1; // = 2 Addition
9 - 1; // = 8 Subtraction
4 * 1; // = 4 Multiplication
5 / 1; // = 5 Division
// Strings
"Oi " + "mundo."; // "Oi mundo."
Unary operation on number
-9; // Negation
Comparison
Comparing 2(two) values yields a logical value verdadi or falsu;
// Magnitude
19 < 45; // 19 minor ki 45 -> verdadi
19 <= 45; // 19 minor ki ou igual a 45 -> verdadi
5 > 7; // 5 maior ki 7 -> falsu
5 >= 7; // 5 maior ki ou igual a 7 -> falsu
// Equality and Inequality
1 == 2; // falsu
"seti" == 7; // falsu
7 == 7; // verdadi
"seti" == "seti"; // verdadi
"cidade" =/= "velha"; // verdadi
7 =/= 7 // falsu
2 =/= 3 // verdadi
Logical operators
// ka
ka verdadi; // falsu
ka falsu; // verdadi
// e
verdadi e falsu; // falsu
verdadi e verdadi; // verdadi
// ou
falsu ou falsu; // falsu
verdai ou falsu; // verdadi
Precedence and grouping
You can change the operators precedence and associativity by using () to group particular operations in a expression.
mimoria media = (19 + 45) / 2;
Statements are commands to be performed when the program is run. By definition, it doesn't produce and value, only an effect.
imprimi "Oi, mundo!";
"expression";
{
imprimi "Santiago";
imprimi "Fogo";
imprimi "Mindelo";
imprimi "Brava";
}
Control flow gives you the ability to change program's execution order which is sequential and top to bottom.
Given a condition, an if statement executes only the portion of code that pass the condition.
mimoria ano = 1945;
si (ano == 1945) {
imprimi "sim";
} sinau {
imprimi "nao";
}
si (ano == 1900)
{
imprimi "Ano 1900.";
} sinau si (ano == 1950) {
imprimi "Ano 1950.";
} sinau si (ano == 1945) {
imprimi "Ano 1945.";
} sinau {
imprimi "ka sabi.";
}
A timenti and di loop executes som code more than once.
mimoria a = 1;
timenti (a < 10) {
imprimi a;
a = a + 1;
}
di (mimoria i = 1; i < 10; i = i + 1) {
imprimi i;
}
di (5 ti 10) {
imprimi i;
}
TODO: rename to 'operacao'
operacao produto(a, b) {
imprimi a + b;
}
produto(1, 2); // '()' -> significa Avaliar
// Declaration
funson produto(a, b) {
imprimi a * b;
}
// Call
produto(2, 3); // 6
Closures
// example 1
funson soma(a, b) {
divolvi a + b;
}
funson identidade(a) {
divolvi a;
}
imprimi identidade(soma)(2, 3); // prints 6
// example 2
funson mensagem() {
mimoria texto = "5 di julho di 1945.";
fn imprimiTexto() {
imprimi texto;
}
divolvi imprimiTexto;
}
mimoria texto = mensagem();
texto(); // "5 di julho di 1945."
Class declaration
klasi Quadrilateru {
area() {
divolvi keli.base * keli.altura;
}
perimetru() {
divolvi 2 * (keli.base + keli.altura);
}
}
Classes in kriolu are first class
mimoria temp = Quadrilateru;
qualquerFunson(Quadrilateru);
Instantiation
mimoria quadrado = Quadrilateru();
imprimi quadrado; // "Quadrilateru instance"
quadrado.base = 10;
quadrado.altura = 10;
imprimi quadrado.area(); // 100
Initialization
Ensures the object is in a valid state upon creation. By declaring a method named init(), it will be executed when the objet is constructed.
klasi Quadrilateru {
init(x, y, base, altura, cor) {
keli.x = x;
keli.y = y;
keli.base = base;
keli.altura = altura;
keli.cor = cor;
}
area() {
divolvi keli.base * keli.altura;
}
perimetru() {
divolvi 2 * (keli.base + keli.altura);
}
}
mimoria retangulo = new Quadrilateru(0, 0, 10, 20, "burmedjo");
mimoria quadradu = new Quadrilateru(0, 0, 10, 10, "berdi");
imprimi retangulo.area(); // 200
imprimi quadradu.area(); // 100
Inheritance
klasi Animal {
init(nomi) {
keli.nomi = nomi;
}
cume() {
imprimi "N'ta cume."
}
durmi() {
imprimi "N'ta durmi."
}
}
klasi Catxor : Animal {
init(nomi) {
super.init(nomi);
}
ladra() {
imprimi "N'ta ladra.";
}
}
mimoria labrador = Catxor("bobi");
labrador.ladra();