问题描述
如果 Yacc 检测到语法错误并定义了详细错误,则打印错误消息,例如
unexpected '[',expecting BECOMES
有没有办法用错误消息中的实际字符串(例如 BECOMES
)替换多字符标记(例如 :=
)的标记名称?我问的原因是解析器的用户可能不清楚 BECOMES
代表 :=
。
解决方法
您可以通过在 %token
定义中的令牌名称后添加引号来定义令牌名称的人类可读版本:
%token BECOMES "':='"
这会将错误消息更改为:
unexpected '[',expecting ':='