提问人:DisplayName 提问时间:11/15/2023 更新时间:11/15/2023 访问量:44
在编译器构造中实现类型系统
Implementation of a type system in compiler construction
问:
我正在研究一个愚蠢的小编译器。我现在在 AST 创建步骤中,我无法弄清楚如何处理类型检查。
编译器将代码“分解”为基本类型,如整数和浮点数。所有不是基本类型的内容都被视为基本类型/其他自定义类型的聚合,我从各种书籍中得到这部分。
但是,我能够找到并理解的所有关于类型检查的信息都非常模糊,并且仅涵盖基本情况,例如“如果允许左类型是 int 并且允许右类型是 int 操作,否则尝试强制转换类型,如果强制转换失败抛出错误”。
那么,应该如何存储有关类型的信息呢?
假设有代码(C族语法)
struct thing
{
int a;
short int b;
some_struct * st;
}
AST 形式的结构声明应包含类似内容的内容,省略技术细节,如源位置、行号等。
name:thing
type:struct
fields:[{name:a, type:int}, {name:b, type:short int},{name:st, type:some_struct*}]
但。。。接下来呢?有关字段和函数的信息应该放在某个不同的、单独的容器中吗?或者它应该是符号表的一部分?
如果 struct 继承自其他结构,如何处理这种情况?引用类型?还是应该参考父母的声明?
我试着读《龙书》。对我来说太复杂了。
谷歌搜索只返回非常基本的信息
答: 暂无答案
评论
type
int
float
type