Catalog · How the catalog works
fplox
Free Pascal implementation of clox bytecode virtual machine from the book Crafting Interpreters
- ★ 9 on GitHub
Anyone may press Interesting, signed in or not. It helps others find this project.
README
fplox
Free Pascal (and Lazarus) implementation of clox bytecode virtual machine from the book Crafting Interpreters (http://craftinginterpreters.com))
Free Pascal and Lazarus: https://www.lazarus-ide.org
Added some of the optimizations:
- nan-boxing
- hash table optimization
- switch statement
- conditional expressions: print x == 5 ? "5" : nil;
- break and continue in loops
- interpolated strings, e.g. "this is $(2*21)."
also added:
- arrow functions, e.g.
fun add(a,b) -> a+b
fun sub(a,b) -> a-b
fun mul(a,b) -> a*b
fun div(a,b) -> a/b
print add(32,10);
print sub(52,10);
print mul(6,7);
print div(84,2);
- anonymous functions
// calculates the integral of a function over the interval a..b in n steps
fun integral(f, a, b, n) {
var sum = 0;
var dt = (b-a)/n;
for (var x = 0; x<n; x=x+1) {
sum = sum + f(a+(x+0.5)*dt);
}
return sum*dt;
}
// using arrow notation
print integral(fun(x)->xx-2x+4, 0, 1, 10000);
print integral(fun(x)->sqrt(1-x*x), -1, 1, 10000); // 1/2 PI
- declarations of local var in if-stmt e.g. if (var x=a; x<6) and while-stmt e.g.
while (var x=0; x<10) {
x=x-1;
print x;
}
- ensure statement to ensure a certain condition is true
- native functions e.g.
print milliseconds();
print pi();
print sqrt(64);
print sqr(8);
print trunc(9.17);
print frac(9.17);
print date();
print time();
print now();
print today();
randomize();
print random();
randLim(20);
print toNum("333");
print length("abcdef");
print toStr(99999);
error();

