我正在努力了解Clang的来龙去脉,我对“Sema”库并不是很确定。编译器编译程序所使用的路径中的语义分析是什么?或者它只是由程序员用来分析他/她的代码?
从我收集的内容中,解析器构建了一个AST,然后有“AST使用者”使用AST来做不同的事情。因此,代码生成库将AST转换为IR。语义分析库使用AST来分析代码。这种理解是正确的,还是语义分析器也用于编译?
答案 0 :(得分:3)
语义分析是编译分析过程的一部分,通常在词法和语法分析之后。语义分析器检查使用的数据类型的有效性,类型转换等,并报告错误(如果有的话)。
换句话说,当涉及到语义分析时,编译器已经确定在程序(词法)中使用了有效的单词,并且根据给定的语言语法(语法)正确地构建了句子。只剩下检查这些句子是否有意义 - 检查数据类型,返回值,大小边界,未初始化变量等。
我对编译过程的了解比Clang更普遍而不是具体,但我认为语义分析肯定存在于代码分析中。