Skip to content

Free Pascal implementation of clox bytecode virtual machine from the book Crafting Interpreters

Notifications You must be signed in to change notification settings

jdehaan2014/fplox

Folders and files

NameName
Last commit message
Last commit date

Latest commit

cf1988a · Jan 31, 2022

History

10 Commits
Jan 31, 2022
Jan 31, 2022
Jan 31, 2022
Jan 31, 2022
Jan 31, 2022
Jan 31, 2022
Jan 31, 2022
Jan 31, 2022
Jan 31, 2022
Jan 31, 2022
Jan 31, 2022
Jan 31, 2022
Jan 31, 2022
Jan 31, 2022
Jan 31, 2022
Jan 31, 2022

Repository files navigation

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();

About

Free Pascal implementation of clox bytecode virtual machine from the book Crafting Interpreters

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages