编译原理讲义 (第九章出错处理) 南京大学计算机系 赵建华
编译原理讲义 (第九章 出错处理) 南京大学计算机系 赵建华
错误种类 ·词法错误:在词法分析阶段就可以发现的错误。 ·语法错误:程序的书写不符合语法规则。 语义错误: 静态语乂错误:编译程序可以发现。 动态语乂错误:源程序虽然能够被编译和执行,但是结 果不对。一般是逻辑上的错误。 违反环境限制的错误:由于实现方面的问题,有些 编译器不接受语言的全集。同时语言本身也有限制。 比如:函数说明嵌套的深度,数组的最大层数
错误种类 • 词法错误:在词法分析阶段就可以发现的错误。 • 语法错误:程序的书写不符合语法规则。 • 语义错误: – 静态语义错误:编译程序可以发现。 – 动态语义错误:源程序虽然能够被编译和执行,但是结 果不对。一般是逻辑上的错误。 • 违反环境限制的错误:由于实现方面的问题,有些 编译器不接受语言的全集。同时语言本身也有限制。 比如:函数说明嵌套的深度,数组的最大层数
错误复原 编写程序的过程中,出现错误是不可避免的 编译程序在进行编译的时候,需要检査出程序 的错误。并且给出提示 ·当编译程序碰到源程序中的错误的时候,应该 设法从错误中复原,并继续扫描程序以给出更 多的提示信息、。更多的信息使得程序员能够更 加方便地修改程序 ·可能复原是错误的。所以一般来讲,编译程序 给出的第一个错误是可靠的,而其他的错误信 息可能是不准确的
错误复原 • 编写程序的过程中,出现错误是不可避免的。 • 编译程序在进行编译的时候,需要检查出程序 的错误。并且给出提示。 • 当编译程序碰到源程序中的错误的时候,应该 设法从错误中复原,并继续扫描程序以给出更 多的提示信息。更多的信息使得程序员能够更 加方便地修改程序。 • 可能复原是错误的。所以一般来讲,编译程序 给出的第一个错误是可靠的,而其他的错误信 息可能是不准确的
错误复原的要点 株连信息的遏制 株连信息是指由于源程序中的一个错误而导 致编译程序向用户报告很多相关的出错信息。 而这些信息是不真实的。 重复信息的遏制 是指源程序中的一个错误而反映在源程序的 多处
错误复原的要点 • 株连信息的遏制 – 株连信息是指由于源程序中的一个错误而导 致编译程序向用户报告很多相关的出错信息。 而这些信息是不真实的。 • 重复信息的遏制 – 是指源程序中的一个错误而反映在源程序的 多处
株连信息的例子 已经说明过程p(inta,intb);在使用的时 候写成了pab) 编译程序扫描的时候,首先发现“.”是 错误的,应为a不是结构类型的变量。然 后,发现b是错误的。最后发现p的参数 个数不同 ·这些信息都是由于将‘,’误写做‘而 引起的
株连信息的例子 • 已经说明过程p(int a, int b);在使用的时 候写成了p(a.b)。 • 编译程序扫描的时候,首先发现“.”是 错误的,应为a不是结构类型的变量。然 后,发现b是错误的。最后发现p的参数 个数不同。 • 这些信息都是由于将‘,’误写做‘.’而 引起的