VenusParser/README.md

3.6 KiB

venus lua parser

A parser that loads venus files into lua. Written in lua.
The parser reads a venus file and replaces venus syntax by lua syntax.
It can also load and run the result.

features

foreach

The foreach statement will geneate a pairs statement.

local table = {2,1,3,"test"}

foreach el in table {
  print(el)
}

will generate

local table = {2,1,3,"test"}

for _, el in table do
  print(el)
end

comments

for comments --, // and ## can be used if something follows a -- it will always be treated as comment

curly braces

The do,then and end statements can be replaced by curly brace syntax.
They can be used in functions, loops, conditions.
For example:

do {
	local table = {2,1,3,"test","test2",3}

	function findTest(t) {
		repeat {
			local found = false
			local el = table.remove(t)
			if el == "test" {
				found = true
			} else {
				print(el)
			}
		} until found
	}
}

will generate

do
	local table = {2,1,3,"test","test2",3}

	function findTest(t) 
		repeat
			local found = false
			local el = table.remove(t)
			if el == "test" then
				found = true
			else
				print(el)
			end
		until found
	end
end

functions

fn can be used instead of function.

fn test() {
	print("hi")
}

will generate

function test()
	print("hi")
end

lambdas

Lambda syntax (args) => {...} can be used to create functions.

local result
fn store_it(f) {
	result = f(10,6)
}

store_it((a,b) => {
	return (a - b) * 2
})

will generate

local result
function store_it(f)
	result = f(10,6)
end

store_it(function(a,b)
	return (a - b) * 2
end)

incrrement and decrement

++ and -- can be used to in/decrement by 1

local i = 0
local j = 0

i++
j--

will generate

local i = 0
local j = 0

i = i + 1
j = j - 1

-- can also be a comment!
If there is anything behind a -- the -- treated as comment.

assignments

Assignment operators +=, -=, *=, /=, ^= and .= can be used.

local a = 0
-- increment
a += 2
-- decrement
a -= 1
-- multiply
a *= 8
-- divide
a /= 2
-- to the power of
a ^= 3
-- concatenate string
a .= " str"

will generate

local a = 0
-- increment
a = a + 2
-- decrement
a = a - 1
-- multiply
a = a * 8
-- divide
a = a / 2
-- to the power of
a = a ^ 3
-- concatenate string
a = a .. " str"

working with the parser

loading

The init.lua returns a table containing the parser.
In case you have the VenusParser directory within your project's
ways of loding it may be:

-- using require (cached)
local vc = require("VenusParser")
-- using dofile
local vc = dofile("VenusParser/init.lua")

running venus files

vc.dovenus(file) works like dofile(file)
It's argument can be a relative or absolute path to the file that should be run.

loading venus files

vc.loadvenus(file) works like loadfile(file)
It's argument can be a relative or absolute path to the file that should be loaded.
It returns a function that runs the generated lua.

generating lua code

vp.tl_venus_file(file) returns the lua generated from the files contents
It's argument can be a relative or absolute path to the file that should be translated.
It returns the generated lua as string.

vp.tl_venus_string(str) returns the lua generated from the given string
It returns the generated lua as string.

generating lua files

vp.convert_venus_file(venus_file_in,lua_file_out) generates a lua file
It's arguments can be relative or absolute paths.
The venus_file_in will be converted to lua and written to lua_file_out.