C编译器语法错误检测

时间:2013-10-24 14:46:06

标签: c compiler-construction

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

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

2 个答案:

答案 0 :(得分:1)

  

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

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

  

用于检测缺少分号等错误?

检测语法错误;在检测并删除语法错误之后

解析期间,在遇到不是当前状态的有效延续的令牌时检测到语法错误。这是一个很大的主题。 Don Knuth正在写一本怪物书,已经有20年了;-),但已经存在很多。

答案 1 :(得分:0)

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

无论如何,为了让编译器确切地弄清楚什么是错误的,需要更多的智能。例如,编译器可能会在解析中断的情况下尝试插入分号,看看是否会修复语法错误。如果是这样,可能表示错误消息中缺少分号。

注意,标准很好地定义了C语法,而像“缺少分号”这样的错误消息是编译器的友好添加。