Skip to content
/ Zarf Public

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

Notifications You must be signed in to change notification settings

a1usha/Zarf

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.

About

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

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published