A interpreter language implementation in Go
Write an Interpreter in Go source code.
Monkey interpreter language which is implemented Go language. After typing monkey in terminal, you get into the monkey programming language.
$ ./monkey
Hello $Username! This is Monkey programming language!
Feel free to type in commnd
Enter "exit()" or CTRL+C to quit command interface
>>>
using let as keyword, each line ends with ;.
>>>let a = 3;
>>>let b = 1.2;
>>>a+b
4.2
monkey supports all basic arithmetic operation of int and float types. int type is represented by int64 and float type is represented by float64.
>>> let a = 3;
>>> let b = 1.2;
>>> a + b
4.2
>>> a - b
1.8
>>> a * b
3.6
>>> a / b
2.5
monkey contains two builtin containers: array and map.
- array
array is a list which organizes items by linear sequence. But types of items can be different from each other.
>>> let a = [1, 2.3, "array"];
>>> a
[1, 2.3, array]
>>> let b = push(a, "another");
>>> b
[1, 2.3, array, another]
- map
map is treated as key-value container. please attention to that only boolean, int and string types can be used as key.
>>> let a = {"name":"moneky", true:1, 7:"sevent"};
>>> a
{name: monkey, true: 1, 7: seven}
>>> a["name"]
monkey
>>> a[true]
1
>> a[7]
seven
>>>let b = set(a, 8, "eight");
>>> b
{name: moneky, true: 1, 7: sevent, 8: eight}
len
yield the length of builtin containers.
first
yield the first element of array.
last
yield the last element of array.
rest
yield an array which excludes the first element.
push
push an elements into the array.
set
insert key value pair into the map
puts
print literal value of objects.
monkey use fn as the definition of function. Apart from regular function using, monkey also includes high order function.
>>>let add = fn(a, b) { return a + b;};
>>> add(1,2)
3
>>>let addTwo = fn(a,b, f) { return 2 + f(a, b);};
>>>addTwo(1,2, add)
5
monkey supports if-else statements.
>>> let max = fn(a, b) { if (a > b) { return a;} else { return b; } };
>>> max(1, 2)
2
monkey support for-loop statement.
>>> let sum = fn(x) { let i = 1; let sum = 0; for (i < x) { let sum = sum + i; let i = i+1; } return sum; };
>>> sum(100)
4950
To make monkey interpreter language to be more powerfull, it is deserved improving it.
- float type
- unicode literal
- loop branch
- translate into Chinese
- ...