The above project is a complete interpreter for glang
. It leverages a custom build lexer and parser implementing the TOP-DOWN Recursive Descent Algorithm for semantic checking.
glang
borrows a lot of it’s syntax from javascript
, along with it’s support for functional programming. You might find some reference to python and haskell as well, but overall it’s what you make it.
An example code is provided below
let x = 51 + 21;
let add = func(a, b) {
a + b
}
let add5 = func(x) {
return add(5,x);
}
You can find more examples in the examples/
directory.
glang
is an dynamically typed language. And supports flexible assignments like javascript
or python
. Except statements like let
or return
, everything is and expression, and everything can produce a value.
This means that the above is completely valid (Implicit Returns).
let fib = func(n) {
if (n == 0) {
0
} elif (n == 1) {
1
} else {
fib(n - 1) + fib(n - 2)
}
}
As you can see return statements are optional, supporting implicit returns.
Like javascript
and (not so) python, ‘;’ are also optional.
NOTE: Comments are not supported yet.
The variables in glang
follow a blocked scope. As such,
let z = 0;
let q = func() {
let o = 1;
}
puts(z) // Accesible
puts(o) // Unknown Identifier Error
Objects are like hashes, which have expressions, mapped to expressions. You can use objects as such.
let two = "two";
let o = {
"one": 10 - 9,
two: 1 + 1,
"thr" + "ee": 6 / 2,
4: 4,
true: 5,
false: 6
}
return [o['one'], o[two], o['three'], o[4], o[true], o[false]]; // [1, 2, 3, 4, 5, 6]
You can download the binary, and directly use it as follows.
./<your-binary-name> <source-file>
Or to start the REPL
, run it without any arguments.
If you decide to download the source code, run npm install
in the directory, then you can do the following.
tsc --build
node dist/index.js <source-file>
Or if you have ts-node
installed, you can simply do
npx ts-node index.ts
Please raise bugs and feature requests in Github Issues Section.
All files and folders are under MIT.