给编译器一张人话嘴
早期奇语的语法错误长这样:
解析错误: General("UnrecognizedToken { token: (3206,
Token(110, \"结果\"), 3212), expected: [...] }")没行号、没源码、看不懂。现在换成 rustc 风格:
语法错误:意外的标记 `结果`
--> 第 3 行第 8 列
3 | 变量 结果: 整数 = 1;
^^^^^^
期望:<标识符> / 长度
提示:`结果` 是 qi 的保留字,不能作为标识符名。换个别名(如 `结果值`)关键改动
- 把 LALRPOP 的
ParseError翻译成带 1-based 行/列的友好消息 - 源码行 + caret 高亮出错位置
- 智能提示:期望
;→ 「上一行可能漏写分号」;token 是保留字 → 「换个别名」
错误信息的质量,往往决定一门新语言「能不能用得下去」。