从软件工程角度看,词法分析和语法分析的分离有如下好处
- 简化设计
- 编译器的效率会改进(词法分析器主要处理字符流)
- 编译器的可移植性加强(例如:向上的箭头,不同的分析器可以用不同的字符,这个只涉及到词法,降低了耦合性)
- 便于编译器前端的模块划分
语法分析器对编译器的错误处理做一个概述
- 词法错误,如标识符、关键字或运算符的拼写错误
- 语法错误,如算数表达式的括号不匹配
- 语义错误:如算符作用于不相容的运算对象
- 编辑错误:如无穷的递归调用
语法分析器对错误处理的基本目标
- 清楚而准确地报告错误的出现,并尽量少出现伪错误
- 迅速地从每个错误中恢复过来,以便诊断后面的错误
- 它不应该使正确程序的处理速度降低太多
分析器的生成器
为了C编译器能准确报告yylex函数中错误的位置,需要在生成的程序y.tab.c中使用编译命令#line来记录行号