来自初级程序员 - C编译器是否构建了一个具体的语法树来检测缺少分号等错误?
或者更一般地说,C编译器如何检测语法错误?
答案 0 :(得分:1)
C编译器是否构建了具体的语法树
是的,或者更确切地说是“抽象语法树”,至少在概念上是这样。
用于检测缺少分号等错误?
检测语法错误;在检测并删除语法错误之后。
在解析期间,在遇到不是当前状态的有效延续的令牌时检测到语法错误。这是一个很大的主题。 Don Knuth正在写一本怪物书,已经有20年了;-),但已经存在很多。
答案 1 :(得分:0)
简短的回答是肯定的,每个编译器都会尝试从输入文件构建一个解析树,并在失败时生成语法错误。
无论如何,为了让编译器确切地弄清楚什么是错误的,需要更多的智能。例如,编译器可能会在解析中断的情况下尝试插入分号,看看是否会修复语法错误。如果是这样,可能表示错误消息中缺少分号。
注意,标准很好地定义了C语法,而像“缺少分号”这样的错误消息是编译器的友好添加。