深入解析Bison的错误处理与高级特性
1. 精确错误报告:行号与列号
在解析器中实现精确的错误报告,关键在于准确记录每个标记的行号和列号。由于换行符的存在,需要手动重新扫描标记以检查换行情况,并将 yycolumn 设置为换行符后的字符数。这样,就能在报告错误时提供精确的行号和列号信息。即便不需要每个标记和规则的确切列号,在Bison解析器中使用位置信息也是很有必要的,因为实现起来并不复杂。
2. 包含文件名的复杂位置信息
许多解析器可以处理多个输入文件,为了在位置数据中包含文件名,需要进行以下操作:
- 自定义 YYLTYPE :定义一个包含文件名指针的 YYLTYPE 结构体。
typedef struct YYLTYPE {
int first_line;
int first_column;
int last_line;
int last_column;
char *filename;
} YYLTYPE;
- 重新定义
YYLLOC_DEFAULT宏 :该宏用于在解析器归约规则时合并位置信息。
# define YYLLOC_DEFAULT(Current, Rhs, N) \
超级会员免费看
订阅专栏 解锁全文
63

被折叠的 条评论
为什么被折叠?



