Skip to content

26597925/fakescript

 
 

Repository files navigation

#fakescript

Author PlatformScript License

Lightweight embedded scripting language

Brief introduction [中文] (./README_CN.md)

fakescript is a lightweight embedded scripting language , using c ++ language, grammar lessons from lua, golang, erlang, based on flex, bison generative grammar tree , compiled into byte code interpreted. Compared with lua, comparable speed , easier to use , more readable source code fakescript for Java

Script feature

  • The syntax is similar to lua
  • All function
  • Support array, map, unlimited nested
  • Support generating routine like fake testfunc (param1), to achieve the effect of multithreading
  • Support binding C functions and class member functions
  • With interpreter, JIT part support
  • Support multi return value
  • Support profile, can get the script running time of each function
  • Support hot update
  • Support Int64
  • Support const definitions
  • Support Package
  • Support struct
  • Support packaged bin file or executable file
  • Own command line style debugger like gdb, and vs style debugging ide
  • Can start a command-line debugging in C through the interface call

In Production

     

Standard Library

  • File
  • Network
  • String
  • Xml
  • Template
  • Json

Sample

#!lua


-- Current package name
package mypackage.test

-- include file
include "common.fk"

-- struct define
struct teststruct
	sample_a
	sample_b
	sample_c
end

-- const define
const hellostring = "hello"
const helloint = 1234
const hellomap = {1 : "a" 2 : "b" 3 : [1 2 3]}

-- func1 comment
func myfunc1(arg1, arg2)
	
	-- C function calls and class member functions
	arg3 := cfunc1(helloint) + arg2:memfunc1(arg1)
	
	-- Branch
	if arg1 < arg2 then	
		-- create routine
		fake myfunc2(arg1, arg2)
	elseif arg1 == arg2 then	
		print("elseif")
	else
		print("else")
	end
	
	-- for loop
	for var i = 0, i < arg2, i++ then
		print("i = ", i)
	end
	
	-- array use
	var a = array()
	a[1] = 3
	
	-- map use
	var b = map()
	b[a] = 1
	b[1] = a
	
	-- Int64
	var uid = 1241515236123614u
	log("uid = ", uid)

	-- sub func call
	var ret1, var ret2 = myfunc2()

	-- other package call
	ret1 = otherpackage.test.myfunc1(arg1, arg2)
	
	-- struct use
	var tt = teststruct()
	tt->sample_a = 1
	tt->sample_b = teststruct()
	tt->sample_b->sample_a = 10

	-- switch branch
	switch arg1
		case 1 then
			print("1")
		case "a" then
			print("a")
		default
			print("default")
	end

	-- multi return value
	return arg1, arg3
	
end

C++ Sample

#!c++
// create instance
fake * fk = newfake();
// regist global func
fkreg(fk, "cfunc1", cfunc1);
// regist class mem func, diffent class type can regist the same name
fkreg(fk, "memfunc1", &class1::memfunc1);
// parse script file
fkparse(fk, argv[1]);
// run script func myfunc1, put in two param 1 and 2
ret = fkrun<int>(fk, "myfunc1", 1, 2);
// delete instance
delfake(fk);

Debugging environment

  • IDE

QQ图片20150819174501.png

  • Command-line

QQ图片20150819175022.png

Welcome to donate

donation.png

Donated money will be used to improve performance and subsequent continuous optimization fakescript

About

Lightweight embedded scripting language

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Lua 94.5%
  • C++ 3.2%
  • C 2.2%
  • Yacc 0.1%
  • Lex 0.0%
  • CMake 0.0%