深入探索Bison解析器:错误处理与高级特性
1. 精确位置信息报告
在解析过程中,精确报告错误的行号和列号是非常有用的。可以手动重新扫描标记以检查换行符,并将 yycolumn 设置为换行符后的字符数,这样就能准确报告错误位置。即使不需要每个标记和规则的确切列号,在Bison解析器中使用位置信息也是很有必要的。
为了在位置数据中包含文件名,需要进行以下操作:
- 定义自己的 YYLTYPE ,包含指向文件名的指针。
- 重新定义解析器宏 YYLLOC_DEFAULT ,用于在解析器归约规则时合并位置信息。
- 修改词法分析器中 YY_USER_ACTION 的代码,将文件名放入每个标记的 yylloc 中。
- 对代码进行一些小的修改,以记住解析器正在读取的文件名。
以下是具体代码:
%code requires {
char *filename; /* current filename here for the lexer */
typedef struct YYLTYPE {
int first_line;
int first_column;
int last_line;
int last_column;
char *filename;
} YYLTYPE;
# define YYLTYPE_IS_DECL
超级会员免费看
订阅专栏 解锁全文
102

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



