1

来自初级程序员 - C 编译器是否构建了一个具体的语法树来检测缺少分号等错误?

或者更一般地说,C 编译器如何检测语法错误?

4

2 回答 2

1

C 编译器是否构建了具体的语法树

是的,或者更确切地说是“抽象语法树”,至少在概念上是这样。

用于检测缺少分号之类的错误?

用于检测语法错误;检测和删除语法错误之后。

解析过程中,遇到不是当前状态的有效延续的标记时会检测到语法错误。这是一个很大的话题。Don Knuth 在上面写了一本怪物巨著,已经有 20 年了;-),但是已经有很多存在了。

于 2013-10-25T01:20:40.867 回答
0

简短的回答是肯定的,每个编译器都会尝试从输入文件构建解析树,并在失败时生成语法错误。

无论如何,为了让编译器准确地找出问题所在,需要更多的智能。例如,编译器可能会尝试在解析中断的地方插入分号,看看这是否能修复语法错误。如果是这样,则可能表明错误消息中缺少分号。

需要注意的是,标准对 C 语法进行了很好的定义,而诸如“缺少分号”之类的错误消息是编译器的友好添加。

于 2013-10-24T14:59:57.713 回答