gpt4 book ai didi

compiler-construction - Mindustry Game CPU 架构的最简单编译器

转载 作者:行者123 更新时间:2023-12-03 18:57:45 27 4
gpt4 key购买 nike

我玩了一个很棒的沙盒塔防游戏 Mindustry .
很酷的事情是您可以使用游戏嵌入式处理器块来控制单元。你可以命令他们 build 积木、在 map 上巡逻、包围最弱的敌人、治疗 friend 并将弹药带到炮塔。
有一些示例如何对此类块进行“编程”:

  • https://www.youtube.com/watch?v=6v8Fnt1NEs8
  • https://www.youtube.com/watch?v=ldkwofrGxyE
  • https://www.youtube.com/watch?v=UFK5m6qKT6U

  • 一些“文档”可以在这里找到:
  • https://www.reddit.com/r/Mindustry/comments/ic9wrm/logic_in_60/
  • https://mindustrygame.github.io/wiki/logic/3-variables/
  • https://www.youtube.com/watch?v=EDfv_oM_TbE

  • 问题是处理器“语言”非常原始。
    只有一个控制语句: jump-to-line-if-statement-is-true .
    没有 if/else 语句,没有 for 循环,没有函数和类。因此,使用这些指令编写任何复杂的东西几乎是不可能的。
    所以我的想法是让我自己的简单编译器从“真正的”编程语言(带有 if、else、for、function、struct/class)到这些原始指令,然后将其导出到游戏中。
    我的第一个想法是在 Mindustry 中实现 JVM 或 LLVM-IR VirtualMachine 来运行编译后的字节码,但它看起来很复杂。这些字节码中有很多指令。
    然后我考虑实现 Lua 或简化的 Python 解释器,它看起来是可能的,但无论如何这是一项艰巨的工作:-)
    我很好奇最简单的方法:-)
    也许有基于 ~10 条指令或一些示例项目的简化 JVM/LLVM 字节码,或者在 Brainfuck 或一些有限的架构上运行 Lua/Python :-)

    ====嵌入式CPU语言====
    所以控制指令集是:
  • read - 从 PermanentStorage 地址读取数据到变量
  • write - 将数据从变量写入到 PermanentStorage
  • set - 设置变量数据
  • 链接 - 从数组中获取第 i 个元素
  • 运算符(operator) op add result x y ~ result=x+y - 将变量设置为 arifmethics 操作的结果 + - */< > % == min max 等
  • 特殊变量 @counter这是执行行的一行,您还可以设置此变量的值以跳转到任何特定行
  • jump cond lineNo - 跳转到行 lineNo如果 cond是真的

  • 也可以执行某种可重用的程序,例如
    op add retAddr @counter 1 # Save where we will continue after the function returns by adding 1 to the counter
    set @counter myFunc # Jump to the line representing myFunc
    ...
    set @counter retAddr # Return to the line set earlier after the function is called

    最佳答案

    不可能为任何语言实现完整的编译器,因为动态内存管理实际上是不可能的。然而,https://pypi.org/project/minpiler/是一个好的开始。
    请注意该站点的空洞:

    You won't be able to use most of the Python. All the restrictions arise from Mindustryprocessor architecture:

    1. There's no data structures, only scalar values are allowed (floats or opaque objects). The only exception are Memory cells that behave as fixed-size arrays of floats.
    2. You can't access variables indirectly, there're no pointers, no getattr.
    3. Subsequence of former, it's impossible to implement dynamic memory/stack (at least without Memory cells). This makes lists, iterators, classes, closures and other things impossible.
    4. Set of builtins is very restricted, you can only call what you have available in game (M.print, M.draw.clear, etc)

    关于compiler-construction - Mindustry Game CPU 架构的最简单编译器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65456889/

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