0

我知道这可能是一个广泛的问题(没有具体的代码供您查看),但我希望我能对要做什么或如何解决问题有所了解。

为简单起见,假设我正在编写的编译器执行以下三个步骤:

  • 解析(并绑定所有变量)
  • 类型检查
  • 代码生成器

此外,我正在为其构建编译器的语言希望支持后期分析/后期绑定(即,它有一个接受字符串的函数,该函数将在运行时作为一段源代码编译和执行)。

现在在解析阶段,为了上述函数的唯一好处,我需要保留一段上下文直到运行时(因为它需要在该上下文中解析和类型检查它的参数)。

那么问题来了,我该怎么做呢?其他编译器是做什么的?我是否应该将上下文对象序列化到磁盘(它的代码生成)并在运行时恢复它或其他什么?

谢谢

4

1 回答 1

0

是的,您需要在对象/可执行文件中发出类型信息(或其他上下文,您不是很具体),以便您eval可以在运行时读取它。您可能会查看Java 的.class文件格式以获得灵感;Java 没有eval这样的功能,但您可以在运行时动态旋转必须以类型安全方式链接的新字节码。大卫康拉德的评论很到位:如果你的语言有这样的特性,这个信息也可以用来实现反射。

在没有更多细节的情况下,我能帮助你的就这么多。

于 2014-05-22T09:41:47.433 回答