如何使用我正在编写的脚本语言处理标签?

Mat*_*ard 3 c scripting

因此,我一直在思考这个问题.这是一个代码示例,然后我将解释它.

:main
    dostuff
    otherlabel

:otherlabel
    dostuff
Run Code Online (Sandbox Code Playgroud)

好吧,在这个例子中,main是代码开始的地方,它"调用"标签'otherlabel'.这实际上只是跳转命令的快捷方式,可以将执行更改为内存中的其他位置.我的问题是,我如何处理这些标签,以便在调用它们之前不必声明它们?

目前,我正在直接从源代码执行单步编译,并输出字节码.我只是处理标签并在找到它们时将它们添加到字典中.然后我用跳转命令将'otherlabel'替换为代码中的正确位置.但在这种情况下,代码将无法编译.

我想过几种方法可以做到这一点:

首先是在其他任何事情之前处理标签,但这需要我分两步完成所有事情,我必须两次处理相同的代码,这会减慢过程并且看起来像是一团糟.

第二个是排队标签调用,直到我完成整个文件并编译其他所有内容然后处理它们,这看起来更清晰.

我在C中写这个,所以我宁愿不实现复杂的数据结构,我正在寻找最直接的方法来处理这个问题.

orl*_*rlp 5

使用多个通行证.一次通过对于脚本语言来说是不够的,特别是当您进入更复杂的结构时.

在第一遍中,在编译之前,构建您的标签字典.在稍后的传递中,当编译发生时,只需使用该字典.