Tag: lua

使用antlr解析特定函数中的lua IF语句

我在java中使用带有antlr的Lua.g语法生成了一个Lua Parser。 我希望解析的我的lua代码基本上是这样的 function uniqueid_some_event (e) if (e:HasString(“string1”)) then — do something end if (e:HasString(“string2”)) then — do something end end 我在不同的文件中有数百个这些事件用于特定的actor绑定。 现在我想解析这些文件并收集每个检查的条件 – 在上面的例子中 – 我想提取“string1”和“string2”作为事件触发器。 (更确切地说,我想创建一个只显示每个文件的触发器的报告) 我收集我需要以某种方式修改Lua.g以在那里添加我自己的逻辑但我失去了因为我没有找到任何关于此的文档 – 我看了LuaEclise基本上做了一些事情,但它对我也不起作用。 那么 – 是否可以向生成的LuaParser添加某种w3c DOM返回值? 或者像getFunctions()这样的东西返回找到的所有函数,并在每个函数getHasStringStatements()中返回条件?

Lua / Java / LuaJ – 处理或中断无限循环和线程

我正在使用LuaJ在Java中运行用户创建的Lua脚本。 但是,运行永不返回的Lua脚本会导致Java线程冻结。 这也使线程不可中断。 我运行Lua脚本: JsePlatform.standardGlobals().loadFile(“badscript.lua”).call(); badscript.lua包含while true do end 。 我希望能够自动终止陷入不屈的循环的脚本,并允许用户在运行时手动终止他们的Lua脚本。 我已经阅读了有关debug.sethook和pcall的内容 ,但我不确定我是如何正确地将它们用于我的目的。 我也听说沙盒是一个更好的选择,虽然这有点超出我的范围。 这个问题也可能仅扩展到Java线程。 我没有找到关于在一段while (true);中断Java线程的任何确切信息while (true); 。 在线Lua演示是非常有前途的,但似乎“坏”脚本的检测和终止是在CGI脚本而不是Lua中完成的。 我是否可以使用Java调用CGI脚本,后者又调用Lua脚本? 不过,我不确定是否允许用户手动终止他们的脚本。 我丢失了Lua演示源代码的链接,但我手头有它。 这是神奇的路线: tee -a $LOG | (ulimit -t 1 ; $LUA demo.lua 2>&1 | head -c 8k) 有人能指出我正确的方向吗? 一些来源: 嵌入式Lua – 超时流氓脚本(例如无限循环) – 任何人的例子? 防止Lua无限循环 嵌入式Lua – 超时流氓脚本(例如无限循环) – 任何人的例子? 当一些循环执行长任务时如何中断线程? 在Java中指定的时间限制后杀死线程

Java:用于嵌入Java桌面应用程序的脚本语言(宏)

我正在用Java编写图形应用程序。 最终我想用脚本语言构建,所以事情是可编程的。 你推荐哪种语言库? 可能的嫌疑人是: 犀牛 (JavaScript) JRuby (Ruby) Jython (Python) 不太可能的候选人是: 使用JavaCC掀起我自己的语言 LuaJava (Lua) Groovy的 JavaFX的 脚本富 目标受众可能不是硬核程序员,因此不太喜欢使用较为神秘的语言。 我的猜测是JavaScript更容易被他们接受,即使它的怪癖只是因为他们已经看到了更多。 Lua似乎在C / C ++中很受欢迎,但至少LuaJava需要额外的.dll / .so,这使部署变得复杂。 编辑: PhiLho写道,有一个叫做kahlua的Lua的Java实现。 相关问题: 在现有代码库中支持哪种脚本语言? (在C / C ++中) 将脚本function添加到.net应用程序 什么是嵌入C#桌面应用程序的最佳脚本语言。

如何将对象传递给公开的luaj函数?

我正在尝试使用Luaj + java构建一个控制器。 我有以下java类 public class Duck { public void talk() { System.out.println(“Duck quacks!”); } public void walk() { System.out.println(“Duck walks!”); } } public class Person { public void talk() { System.out.println(“Person talks!”); } public void walk() { System.out.println(“Person walks!”); } } 以及控制器的以下lua脚本: onTalk(obj) obj:talk(); end onWalk(obj) obj:walk(); end 理想情况下,我想定义一个控制器(用lua编写),我将保留所有程序的逻辑,并且我希望将该控制器的API公开给我的java代码。 我试图使用以下方法: ScriptEngineManager sem = new […]