此文已由作者赵昕授权网易云社区发布。

欢迎访问网易云社区,了解更多网易技术产品运营经验。

fakescript

轻量级嵌入式脚本语言

https://github.com/esrrhs/fakescript-java

简介

fakescript是一款轻量级的嵌入式脚本语言,使用Java语言编写,语法吸取自lua、golang、erlang,基于jflex、cup生成语法树,编译成字节码解释执行。 C/C++版本fakescript

脚本特性

  • 语法类似lua

  • 全部为函数

  • 支持array,map,可以无限嵌套

  • 支持fake testfunc(param1)产生routine,实现假多线程效果

  • 支持Java静态函数和Java类成员函数的绑定

  • 自带解释器

  • 支持多返回值

  • 自带profile,可获取脚本各个函数运行时间

  • 支持热更新

  • 支持Int64

  • 支持const定义

  • 支持包

  • 支持struct

示例

-- 当前包名
package mypackage.test -- 引入的文件
include "common.fk" -- 结构体定义
struct teststruct
    sample_a
    sample_b
    sample_c
end -- 常量值
const hellostring = "hello"
const helloint = 1234
const hellomap = {1 : "a" 2 : "b" 3 : [1 2 3]} -- func1 comment
func myfunc1(arg1, arg2)     -- Java静态函数和类成员函数的调用
    arg3 := cfunc1(helloint) + arg2:memfunc1(arg1)     -- 分支
    if arg1 < arg2 then 
        -- 创建一个协程
        fake myfunc2(arg1, arg2)
    elseif arg1 == arg2 then    
        print("elseif")
    else
        print("else")
    end     -- for循环
    for var i = 0, i < arg2, i++ then
        print("i = ", i)
    end     -- 数组
    var a = array()
    a[1] = 3     -- 集合
    var b = map()
    b[a] = 1
    b[1] = a     -- Int64
    var uid = 1241515236123614u
    log("uid = ", uid)     -- 子函数调用
    var ret1, var ret2 = myfunc2()     -- 其他包的函数调用
    ret1 = otherpackage.test.myfunc1(arg1, arg2)     -- 结构体
    var tt = teststruct()
    tt->sample_a = 1
    tt->sample_b = teststruct()
    tt->sample_b->sample_a = 10     -- 分支
    switch arg1
        case 1 then
            print("1")
        case "a" then
            print("a")
        default
            print("default")
    end     -- 多返回值
    return arg1, arg3 end

Java示例

#!java
// 创建一个实例
fake f = fk.newfake(null);
// 注册包里全部标记@fakescript的函数
fk.reg(f, "com.test");
// 解析fake脚本文件
fk.parse(f, "test.fk");
// 执行myfunc1函数,传入两个参数分别为1和2
double ret = (double)fk.run(f, "myfunc1", 1, 2);

免费领取验证码、内容安全、短信发送、直播点播体验包及云服务器等套餐

更多网易技术、产品、运营经验分享请点击

相关文章:
【推荐】 网易容器云平台的微服务化实践(一)
【推荐】 四两拨千斤式的攻击!如何应对Memcache服务器漏洞所带来的DDoS攻击?
【推荐】 wireshark抓包分析——TCP/IP协议

适用于Java的嵌入式脚本语言的更多相关文章

  1. 适合学习C语言开源项目——嵌入式脚本语言 Berry

    嵌入式脚本语言 Berry github网址 :https://github.com/Skiars/berry Berry 是一款面向小型嵌入式系统的脚本语言,目前发布了 0.1.0 版本.相比于其他 ...

  2. Java动态调用脚本语言Groovy

    Java动态调用脚本语言Groovy 2019-05-15 目录 0. pom.xml添加依赖1. 使用GroovyShell计算表达式2. 使用GroovyScriptEngine脚本引擎加载Gro ...

  3. [Java面试九]脚本语言知识总结.

    核心内容概述 1.JavaScript加强,涉及到ECMAScript语法.BOM对象.DOM对象以及事件. 2.Ajax传统编程. 3.jQuery框架,九种选择器为核心学习内容 4.JQuery ...

  4. Java学习笔记--脚本语言支持API

    Java语言的动态性之脚本语言支持API 随着Java平台的流行,很多的脚本语言(scripting language)都可以运行在Java虚拟机啊上,其中比较流行的有JavaScript.JRuby ...

  5. java调用js脚本语言

    在我们开发的过程中,可能有这么一种情况,在java中需要取调用js方法完成一些事情.那么什么时候可能出现这种情况呢.比如我们使用爬虫模拟登录别的网站,但有些网站前台使用js对密码进行了加密处理,那么就 ...

  6. Java SE 6 新特性: 对脚本语言的支持

    2006 年底,Sun 公司发布了 Java Standard Edition 6(Java SE 6)的最终正式版,代号 Mustang(野马).跟 Tiger(Java SE 5)相比,Musta ...

  7. ECMAScript进化史(1):​话说Web脚本语言王者JavaScript的加冕历史

    互联网起火-Web时代的来临 在行文之前,反手就安利一下<浏览器史话中chrome霸主地位的奠定与国产浏览器的割据混战>. 浏览器始祖NCSA Mosaic在1993年1月发布(于1992 ...

  8. 深入LUA脚本语言,让你彻底明白调试原理

    这是道哥的第008篇原创 一.前言 上篇文章我们聊了gdb的底层调试机制,明白了gdb是利用操作系统提供的系统信号来调试目标程序的.很多朋友私下留言了,看到能帮助到大家,我心里还是很开心的,其实这也是 ...

  9. C#最良心脚本语言C#Light/Evil,Xamarin\WP8\Unity热更新最良心方案,再次进化.

    C#Light的定位是嵌入式脚本语言,一段C#Light脚本是一个函数 C#Evil定位为书写项目的脚本语言,多脚本文件合作,可以完全用脚本承载项目. C#Light/Evil 使用完全C#一致性语法 ...

随机推荐

  1. ffmpeg编译选项汇总

    编译禁用“jack” 和 “crystalhd” : --disable-crystalhd--disable-indev=jack ================================= ...

  2. javascript常见方法汇总之一——数组字符串相关

    (转载至慕课网) 原文链接:https://www.imooc.com/article/46933 github地址:https://github.com/dorseysen/notes-about- ...

  3. Kibana安装(图文详解)(多节点的ELK集群安装在一个节点就好)

    对于Kibana ,我们知道,是Elasticsearch/Logstash/Kibana的必不可少成员. 前提: Elasticsearch-2.4.3的下载(图文详解) Elasticsearch ...

  4. 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 17—Large Scale Machine Learning 大规模机器学习

    Lecture17 Large Scale Machine Learning大规模机器学习 17.1 大型数据集的学习 Learning With Large Datasets 如果有一个低方差的模型 ...

  5. Linux实战教学笔记47:JAVA企业级应用服务器之TOMCAT实战

    第一章 Tomcat简介 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由Apache,Sun和其他一些公司及个人共 ...

  6. 新手C#ListView使用记录2018.08.03

    在使用C#的ListView时,感觉有一些部分需要自己注意. ListView1.Clear()这条指令在使用时,用于Click后在ListView中显示数据,应该放在输入数据的前面. 在ListVi ...

  7. C++版修真小说

    终有一天我手中的编译器将成为我灵魂的一部分,这世界在我的眼中将被代码重构,我将看到山川无尽银河无垠都汇成二进制的数字河流,过往英雄都在我脑海眼前一一浮现,而我听到无数码农跪倒在我的程序面前呼喊. 他们 ...

  8. Log4J的配置文件详解

    来自: http://www.blogjava.net/zJun/archive/2006/06/28/55511.html Log4J的配置文件(Configuration File)就是用来设置记 ...

  9. 270. Closest Binary Search Tree Value 二叉搜索树中,距离目标值最近的节点

    [抄题]: Given a non-empty binary search tree and a target value, find the value in the BST that is clo ...

  10. Github 使用的Markdown语言

    简介 官方站点:http://daringfireball.net/projects/markdown/syntax 中文介绍:http://www.worldhello.net/gotgithub/ ...