gpt4 book ai didi

java - Java 和 Android 的代码解释器和运行器

转载 作者:太空宇宙 更新时间:2023-11-04 12:45:51 26 4
gpt4 key购买 nike

关闭。这个问题需要更多 focused .它目前不接受答案。












想改进这个问题?更新问题,使其仅关注一个问题 editing this post .

5年前关闭。




Improve this question




问题:

我们正在寻找一种在运行时解释和执行源代码的方法。我想要建议。

我们正在开发一款游戏,用户必须编写源代码才能完成挑战,例如 CodinGame .

游戏目标是帮助开始学习编程学科的学生。

要求:

  • 游戏由 LibGDX 开发(适用于 Java 桌面和 Android)
  • 学生将拥有一组有限的可以调用的方法,例如 turnLeft() , turnRight() , go() , 和别的。
  • 应该可以使用 IF/ELSE 之类的语句。 , FORWHILE .
  • 如果你能在学生写的代码中显示错误,那就太好了。

  • 于是我们开始寻找实现的方法。

    一开始我们想用“面向切面编程”,但是没有找到可以动态读取同学们源代码的东西。

    InstantJ 编译器不是一个选项,因为它使用 JAVAC,因此无法在 Android 中构建。

    所以我们想到了一些东西来读取用户输入的源代码并“在内存中运行”,通过反射调用方法。或类似的东西。

    也有人建议使用 LISP 或 LOGO 解释器,但这种情况下的问题是语法。我们希望学生学习一门可以在 future 使用的语言。

    我们现在正在寻找的解决方案是 JavaParser .但是这个库从字面上制作代码解析器并且不解释指令。在这里,我们必须手动通过反射执行调用。并且很难解释 IF、FOR 等条件。

    问题:

    我们的目标是用户可以编写应该​​调用预定义方法的 Java(或 JavaScript)代码。这些方法已经在游戏类中实现。我们不是专门寻找图书馆,我们希望对研究提出建议。

    对于我们可以寻找的东西有什么建议吗?

    最佳答案

    经过大量搜索和与 friend 交谈,我相信我得到了一个非常好的解决方案!

    在搜索过程中,我找到了 Rhino库,有了它,我可以使用 JavaScript 编写脚本而无需编译。

    private void executeScript() {
    String source = "" +
    "game.walk();\n" +
    "game.walk();\n" +
    "var jumps = 10;\n" +
    "for (var i = 0; i < jumps; i++) {\n" +
    " game.jump(i + 1);\n" +
    "}";


    org.mozilla.javascript.Context cx = org.mozilla.javascript.Context.enter();
    cx.setOptimizationLevel(-1); // disable compilation
    Scriptable scope = cx.initStandardObjects();
    Object wrappedOut = cx.javaToJS(this, scope);
    ScriptableObject.putProperty(scope, "game", wrappedOut);
    Object result = cx.evaluateString(scope, source, "<cmd>", 1, null);

    }

    public void walk() {
    System.out.println("Walking!");
    }

    public void jump(int count) {
    System.out.println("Jumping! " + count);
    }

    输出:
    System.out: Walking!
    System.out: Walking!
    System.out: Jumping! 1
    System.out: Jumping! 2
    System.out: Jumping! 3
    System.out: Jumping! 4
    System.out: Jumping! 5
    System.out: Jumping! 6
    System.out: Jumping! 7
    System.out: Jumping! 8
    System.out: Jumping! 9
    System.out: Jumping! 10

    完美的!

    关于java - Java 和 Android 的代码解释器和运行器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36332674/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com