从软件工程角度看,词法分析和语法分析的分离有如下好处
语法分析器对编译器的错误处理做一个概述
- 词法错误,如标识符、关键字或运算符的拼写错误
- 语法错误,如算数表达式的括号不匹配
- 语义错误:如算符作用于不相容的运算对象
- 编辑错误:如无穷的递归调用
语法分析器对错误处理的基本目标
- 清楚而准确地报告错误的出现,并尽量少出现伪错误
- 迅速地从每个错误中恢复过来,以便诊断后面的错误
- 它不应该使正确程序的处理速度降低太多
分析器的生成器
为了C编译器能准确报告yylex函数中错误的位置,需要在生成的程序y.tab.c中使用编译命令#line来记录行号