我已经开发自己的语言大约一年了,我主要专注于接触所有不同的方法。我的语言是软件解释的,所以我花了很多时间熟悉新的和更低级别的方法来解释代码,但现在我被困住了。我已经从原始解释逐行转到语法树等等,并且我已经将其归结为字节码阶段。
我似乎无法在网上找到任何关于更多处理的内容,然后是不仅仅是创建可执行文件的字节码。
我的语言也可以编译,所以我有可以生成和工作的机器代码,所以无论如何都会注入要在数据包或其他东西中执行的代码吗?
几个月来,我一直坚持执行字节码,而龙书在这方面没有帮助。
我已经开发自己的语言大约一年了,我主要专注于接触所有不同的方法。我的语言是软件解释的,所以我花了很多时间熟悉新的和更低级别的方法来解释代码,但现在我被困住了。我已经从原始解释逐行转到语法树等等,并且我已经将其归结为字节码阶段。
我似乎无法在网上找到任何关于更多处理的内容,然后是不仅仅是创建可执行文件的字节码。
我的语言也可以编译,所以我有可以生成和工作的机器代码,所以无论如何都会注入要在数据包或其他东西中执行的代码吗?
几个月来,我一直坚持执行字节码,而龙书在这方面没有帮助。
您需要创建一个虚拟机来执行您的字节码,类似于Java
JVM。
除了简单的字节码解释(在您的情况下可能是一个巨大的switch
语句或类似的东西)之外,下一步仍然可以将您的字节码转换为直接线程代码,它仍然可以被称为“解释”而不是“编译”。
这种技术的一个令人印象深刻的例子是 OCaml 字节码解释器,请参见此处的代码。请注意宏的不同可能定义Instruct(...)
- 它用于临时switch
实现和优化的线程代码实现,具体取决于计算的 goto扩展的可用性。
我怀疑您可以比这更进一步,任何较低级别的都将是“编译”而不是“解释”。当然,您可以设计一个较低级别的虚拟机,定义从高级虚拟机到低级但抽象的一系列转换等。