renamed repository

This commit is contained in:
theFox6 2020-03-11 08:55:08 +01:00
parent 39d2cfde49
commit a2d6c44980
Signed by: theFox6
GPG Key ID: C884FE8D3BCE128A
9 changed files with 85 additions and 85 deletions

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>VenusParser</name>
<name>LuaVenusCompiler</name>
<comment></comment>
<projects>
</projects>

View File

@ -1,7 +1,7 @@
local local_path = VenusParser.path or ""
local vp_util = dofile(local_path.."vp_util.lua")
local local_path = LuaVenusCompiler.path or ""
local vp_util = dofile(local_path.."vc_util.lua")
local parser = {}
local compiler = {}
local elements = {
names = "^(%a%w*)$",
@ -14,8 +14,8 @@ local elements = {
local non_space_elements = {elements.special_combined,elements.special,elements.strings}
function parser.warn(msg)
print("VenusParser warning: " .. msg)
function compiler.warn(msg)
print("LuaVenusCompiler warning: " .. msg)
end
--TODO: check if spaces before a curly brace were already added
@ -61,7 +61,7 @@ local function parse_element(el,pc)
if el == "=>" then
if not pc.lambargs then
parser.warn(("invalid lambda in line %i"):format(pc.line))
compiler.warn(("invalid lambda in line %i"):format(pc.line))
return el
end
local larg = pc.lambargs
@ -72,7 +72,7 @@ local function parse_element(el,pc)
return "function" .. larg .. " "
elseif pc.lambend then
if prefix then
parser.warn(("end statement and lambda match end may be mixed in line %i"):format(pc.line))
compiler.warn(("end statement and lambda match end may be mixed in line %i"):format(pc.line))
prefix = pc.lambargs .. prefix
else
prefix = pc.lambargs
@ -154,7 +154,7 @@ local function parse_element(el,pc)
pc.ifend = "end"
return "",prefix
else
parser.warn(("closing curly bracket in line %i could not be matched to an opening one"):format(pc.line))
compiler.warn(("closing curly bracket in line %i could not be matched to an opening one"):format(pc.line))
return el,prefix
end
elseif el == "foreach" then
@ -220,7 +220,7 @@ local function parse_element(el,pc)
pc.optassign = false
return " = " .. nam .. " + 1"
else
parser.warn(("empty increment in line %i"):format(pc.line))
compiler.warn(("empty increment in line %i"):format(pc.line))
return el, prefix
end
elseif el == "+=" then
@ -229,7 +229,7 @@ local function parse_element(el,pc)
pc.optassign = false
return "= " .. nam .. "+"
else
parser.warn(("empty increment assignment in line %i"):format(pc.line))
compiler.warn(("empty increment assignment in line %i"):format(pc.line))
end
elseif el == "-=" then
if pc.optassign then
@ -237,7 +237,7 @@ local function parse_element(el,pc)
pc.optassign = false
return "= " .. nam .. "-"
else
parser.warn(("empty decrement assignment in line %i"):format(pc.line))
compiler.warn(("empty decrement assignment in line %i"):format(pc.line))
end
elseif el == "*=" then
if pc.optassign then
@ -245,7 +245,7 @@ local function parse_element(el,pc)
pc.optassign = false
return "= " .. nam .. "*"
else
parser.warn(("empty multiply assignment in line %i"):format(pc.line))
compiler.warn(("empty multiply assignment in line %i"):format(pc.line))
end
elseif el == "/=" then
if pc.optassign then
@ -253,7 +253,7 @@ local function parse_element(el,pc)
pc.optassign = false
return "= " .. nam .. "/"
else
parser.warn(("empty divide assignment in line %i"):format(pc.line))
compiler.warn(("empty divide assignment in line %i"):format(pc.line))
end
elseif el == "^=" then
if pc.optassign then
@ -261,7 +261,7 @@ local function parse_element(el,pc)
pc.optassign = false
return "= " .. nam .. "^"
else
parser.warn(("empty power assignment in line %i"):format(pc.line))
compiler.warn(("empty power assignment in line %i"):format(pc.line))
end
elseif el == ".=" then
if pc.optassign then
@ -269,7 +269,7 @@ local function parse_element(el,pc)
pc.optassign = false
return "= " .. nam .. ".."
else
parser.warn(("empty concatenation assignment in line %i"):format(pc.line))
compiler.warn(("empty concatenation assignment in line %i"):format(pc.line))
end
end
--print(el,pc.instring and "in string" or "")
@ -441,7 +441,7 @@ local function handle_lineend_lambargs(pc)
return ""
end
function parser.tl_venus_string(str)
function compiler.tl_venus_string(str)
local fc = ""
local pc = {instring = false, opencurly = {}, line = 0}
for l,e in vp_util.optmatch(str,"\n") do
@ -460,20 +460,20 @@ function parser.tl_venus_string(str)
end
end
if (#pc.opencurly > 0) then
parser.warn("not all curly brackets were closed")
compiler.warn("not all curly brackets were closed")
end
return fc
end
function parser.tl_venus_file(file)
function compiler.tl_venus_file(file)
local f = io.open(file)
local ret = parser.tl_venus_string(f:read("*a"))
local ret = compiler.tl_venus_string(f:read("*a"))
f:close()
return ret
end
function parser.loadvenus(file,env)
local fc = parser.tl_venus_file(file)
function compiler.loadvenus(file,env)
local fc = compiler.tl_venus_file(file)
if env then
return loadstring(fc,"@"..file,"t",env)
else
@ -481,19 +481,19 @@ function parser.loadvenus(file,env)
end
end
function parser.dovenus(file)
local ff, err = parser.loadvenus(file)
function compiler.dovenus(file)
local ff, err = compiler.loadvenus(file)
if ff == nil then
error(err,2)
end
return ff()
end
function parser.convert_venus_file(venus_file_in,lua_file_out)
local s = parser.tl_venus_file(venus_file_in)
function compiler.convert_venus_file(venus_file_in,lua_file_out)
local s = compiler.tl_venus_file(venus_file_in)
local f = io.open(lua_file_out,"w")
f:write(s)
f:close()
end
return parser
return compiler

View File

@ -1,7 +1,7 @@
# venus lua parser
# LuaVenusCompiler
[![luacheck][luacheck badge]][luacheck workflow]
A parser that loads venus files into lua. Written in lua.
The parser reads a venus file and replaces venus syntax by lua syntax.
A compiler that translates venus files into lua. Written in lua.
The compiler reads a venus file and replaces venus syntax by lua syntax.
It can also load and run the result.
## features
@ -132,15 +132,15 @@ Assignment operators `+=`, `-=`, `*=`, `/=`, `^=` and `.=` can be used.
local a = 0
-- increment
a += 2
-- decrement
// decrement
a -= 1
-- multiply
## multiply
a *= 8
-- divide
// divide
a /= 2
-- to the power of
a ^= 3
-- concatenate string
// concatenate string
a .= " str"
```
will generate
@ -160,21 +160,21 @@ a = a ^ 3
a = a .. " str"
```
## working with the parser
## working with the compiler
### loading
The init.lua returns a function for loading the parser.
The init.lua returns a function for loading the compiler.
You have to call it with the path to the script itself as argument.
In case you have the VenusParser directory within your project's
In case you have the LuaVenusCompiler directory within your project's
ways of loding it may be:
```lua
--in case your project is run within it's own folder
local vc = dofile("VenusParser/init.lua")("VenusParser/")
local vc = dofile("LuaVenusCompiler/init.lua")("LuaVenusCompiler/")
--in case you have a variable called project_loc containing the path to your projects folder
local vc = dofile(project_loc.."/VenusParser/init.lua")(project_loc.."/VenusParser/")
local vc = dofile(project_loc.."/LuaVenusCompiler/init.lua")(project_loc.."/LuaVenusCompiler/")
--using require
local vc = require("VenusParser")("VenusParser/")
local vc = require("LuaVenusCompiler")("LuaVenusCompiler/")
```
When it is loaded it can also be accessed with the global called "VenusParser".
When it is loaded it can also be accessed with the global called "LuaVenusCompiler".
### running venus files
`vc.dovenus(file)` works like `dofile(file)`
@ -186,17 +186,17 @@ It's argument can be a relative or absolute path to the file that should be load
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
`vc.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
`vc.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
`vc.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.
[luacheck badge]: https://github.com/theFox6/VenusParser/workflows/luacheck/badge.svg
[luacheck workflow]: https://github.com/theFox6/VenusParser/actions?query=workflow%3Aluacheck
[luacheck badge]: https://github.com/theFox6/LuaVenusCompiler/workflows/luacheck/badge.svg
[luacheck workflow]: https://github.com/theFox6/LuaVenusCompiler/actions?query=workflow%3Aluacheck

View File

@ -1,16 +1,16 @@
if VenusParser then
print("VenusParser warning: already initialized")
if rawget(_G,"LuaVenusCompiler") then
print("LuaVenusCompiler warning: already initialized")
else
VenusParser = {}
LuaVenusCompiler = {}
end
function VenusParser.loadFromPath(path)
VenusParser.path = path
local ret = dofile(path.."VenusParser.lua")
function LuaVenusCompiler.loadFromPath(path)
LuaVenusCompiler.path = path
local ret = dofile(path.."LuaVenusCompiler.lua")
for i,v in pairs(ret) do
VenusParser[i] = v
LuaVenusCompiler[i] = v
end
return ret
end
return VenusParser.loadFromPath
return LuaVenusCompiler.loadFromPath

View File

@ -1,3 +1,3 @@
local vp = dofile("init.lua")("")
local vc = dofile("init.lua")("")
vp.dovenus("test.venus")
vc.dovenus("test.venus")

View File

@ -1,6 +1,6 @@
print("running venus test script")
local vp_util = dofile("vp_util.lua")
local vp_util = dofile("vc_util.lua")
local function for_range_test()
local a = 0

View File

@ -1,6 +1,6 @@
print("running venus test script")
local vp_util = dofile("vp_util.lua")
local vp_util = dofile("vc_util.lua")
local function for_range_test()
local a = 0

View File

@ -1,6 +1,6 @@
local vp = dofile("init.lua")("")
local vc = dofile("init.lua")("")
local o = "testout/test.lua"
vp.convert_venus_file("test.venus",o)
vc.convert_venus_file("test.venus",o)
dofile(o)

View File

@ -1,8 +1,8 @@
---
--A module with lots of helpers for the VenusParser.
--A module with lots of helpers for the LuaVenusCompiler.
--
--@module vp_util
local vp_util = {}
--@module vc_util
local vc_util = {}
---
--Find the first match of a set of patterns within a string.
@ -10,11 +10,11 @@ local vp_util = {}
--The pattern, that can be found at the earliest position within the string is used to match.
--If two patterns are at the same position the shorter match is returned.
--
--@function [parent=#vp_util] find_min_match
--@function [parent=#vc_util] find_min_match
--@param #string str the string to be searched for the patterns
--@param patterns the pattern or patterns that are searched within the string
--@return the starting and the end position of the match
function vp_util.find_min_match(str,patterns)
function vc_util.find_min_match(str,patterns)
local pats
local patt = type(patterns)
if patt == "string" then
@ -55,15 +55,15 @@ end
--Every sequence given to the iteration is removed from the iterator.
--Like this it will traverse the string splitting it into the matches and non-matches.
--
--@function [parent=#vp_util] optmatch
--@function [parent=#vc_util] optmatch
--@param #string str the string to search for matches
--@param patterns the pattern or patterns to split by
--@return #function the iterator for a loop
function vp_util.optmatch(str,patterns)
function vc_util.optmatch(str,patterns)
local cutstr = str
return function()
if not cutstr then return end
local spos, epos = vp_util.find_min_match(cutstr,patterns)
local spos, epos = vc_util.find_min_match(cutstr,patterns)
local match
local found = (spos == 1)
if found then
@ -90,10 +90,10 @@ end
---
--A function generating a table from an iterator.
--
--@function [parent=#vp_util] gen_table
--@function [parent=#vc_util] gen_table
--@param #function it the iterator to use in a for loop
--@return #table the table containing the returns of the iterator
function vp_util.gen_table(it)
function vc_util.gen_table(it)
local tab = {}
for el in it do
table.insert(tab,el)
@ -108,11 +108,11 @@ end
--
--It iterates over both tables checking if the other contains the same elements.
--
--@function [parent=#vp_util] dftc
--@function [parent=#vc_util] dftc
--@param #table t1 the table to compare with t2
--@param #table t2 the table to compare with t1
--@return #boolean whether the tables contents are the same
function vp_util.dftc(t1,t2)
function vc_util.dftc(t1,t2)
for i,el in pairs(t1) do
if t2[i] ~= el then
return false
@ -130,13 +130,13 @@ end
--concatenate strings
--if one string is nil the other is returned
--
--@function [parent=#vp_util] concat_optnil
--@function [parent=#vc_util] concat_optnil
--@param #string fstr the first string to be concatenated
--@param #string lstr the second string to be concatenated
--@param #string sep the seperator to be added between the strings if both are present
--@param #string retstr The string returned if both strings are empty.
-- Can be true to return an empty string.
function vp_util.concat_optnil(fstr,lstr,sep,retstr)
function vc_util.concat_optnil(fstr,lstr,sep,retstr)
if fstr then
if lstr then
if sep then
@ -167,20 +167,20 @@ function vp_util.concat_optnil(fstr,lstr,sep,retstr)
end
---
--The unit tests for the vp utilities.
--The unit tests for the vc utilities.
local function tests()
assert(vp_util.dftc({},{}))
assert(vp_util.dftc({1},{1}))
assert(not vp_util.dftc({1},{2}))
assert(vp_util.dftc({1,"2",true},{1,"2",true}))
assert(not vp_util.dftc({true,"1",1},{1,1,1}))
assert(vc_util.dftc({},{}))
assert(vc_util.dftc({1},{1}))
assert(not vc_util.dftc({1},{2}))
assert(vc_util.dftc({1,"2",true},{1,"2",true}))
assert(not vc_util.dftc({true,"1",1},{1,1,1}))
assert(vp_util.dftc(vp_util.gen_table(vp_util.optmatch("123","123")),{"123"}))
assert(vp_util.dftc(vp_util.gen_table(vp_util.optmatch("123","321")),{"123"}))
assert(vp_util.dftc(vp_util.gen_table(vp_util.optmatch("123", "1")), {"1","23"}))
assert(vp_util.dftc(vp_util.gen_table(vp_util.optmatch("123", "2")), {"1","2","3"}))
assert(vc_util.dftc(vc_util.gen_table(vc_util.optmatch("123","123")),{"123"}))
assert(vc_util.dftc(vc_util.gen_table(vc_util.optmatch("123","321")),{"123"}))
assert(vc_util.dftc(vc_util.gen_table(vc_util.optmatch("123", "1")), {"1","23"}))
assert(vc_util.dftc(vc_util.gen_table(vc_util.optmatch("123", "2")), {"1","2","3"}))
end
tests()
return vp_util
return vc_util