我正在为我在C中创建的语言编写解释器。目前它可以将源代码放入令牌中,然后将这些令牌解析为AST。在做了一些阅读之后,我得出的结论是,由于遍历树所需的递归量,使用字节码比仅仅遍历AST更快。
所以给定一个AST,我该如何将其转换为字节码?更具体地说,实际存储的函数,变量和常量在哪里?它们是存储在字节码本身中,还是存在专用于存储这些存储器的单独存储区域?
我的AST实施方式的简化视图:
1 + 2
我的程序目前需要一些源代码,例如
{
type: AST_NODE_ADD,
as_add: {
left: {
type: AST_NODE_INT,
as_int: 1
},
right: {
type: AST_NODE_INT,
as_int: 2
}
}
}
并生成一个AST(这不是C,只是一种表示)
ansGiven
答案 0 :(得分:1)
函数变量和常量(至少它们的名称以及将其转换为值所需的任何查找信息)通常存储在符号表中。
在函数调用的情况下,你会将很多args推到一个评估堆栈上,然后有一个调用该函数的字节代码的调用指令。
我建议获得编译器:原理,技术和工具(第2版):Alfred V Aho(又名“龙书”),即使它被命名 “编制者”材料可直接适用。