在 YACC 错误消息中打印多字符标记

Printing multi-character tokens in YACC error messages

如果 Yacc 检测到语法错误并且定义了详细错误,则会打印一条错误消息,例如

unexpected '[', expecting BECOMES

有没有办法用错误消息中的实际字符串(例如:=)替换多字符标记的标记名称(例如BECOMES)?我问的原因是解析器的用户可能并不明显 BECOMES 代表 :=.

您可以通过在 %token 定义中的令牌名称后添加引号来定义令牌名称的人类可读版本:

%token BECOMES "':='"

这会将错误消息更改为:

unexpected '[', expecting ':='