Skip to content

Latest commit

 

History

History
72 lines (54 loc) · 1.77 KB

README.md

File metadata and controls

72 lines (54 loc) · 1.77 KB

Zarf programming lanuage

Toy programming language compiled to Java bytecode and JIT-compiled during execution as regular Java programs to improve performance.

Why zarf?

Just because the word sounds cool.

A zarf (plural: zarfs, zuruuf, zarves) is a holder, usually of ornamental metal, for a coffee cup without a handle. Wikipedia

Programming is always about writing some kind of wrappers over objects in the real world, so this name suits is more than anything.

What can Zarf do?

  • Work with integers and strings
  • Print them to the console
  • Concat strings
  • Conditional operators if...else...
  • Goto
  • Arithmetic expressions

Hello world program

say "Hello World!"

Compute factorial

let num = 6
let fact = 1
let i = 1

!loop
fact = fact * i
i = i + 1
if i <= num {
    goto loop
}

say "Factorial of"
say num
say "is"
say fact

Check if number is even or odd

let num = 4

if (num % 2 == 0) {
    say "Even"
} else {
    say "Odd"
}

More examples can be found here

How to use and compile?

Just run gradle jar in cloned repo to create Zarf compiler. After that, pass .zf file to zarf.jar. It will generate the bytecode and give you a .class file that can be run later.

> java -jar .\build\libs\zarf.jar .\ZarfExamples\Arithm.zf
> java Arithm

How is it done?

The grammar and creation of an abstract syntax tree is done using Antlr, bytecode generation is done using ASM library.