理解 menhir 生成的 .messages 文件

Understand .messages file generated by menhir

我正在尝试理解由 menhir 生成的 .messages 文件。

来自 this sample, we could use menhir parser.mly --list-errors > parser.messages to generate parser.messages。报错如下:

main: INT MINUS TIMES
##
## Ends in an error in state: 12.
##
## expr -> expr MINUS . expr [ TIMES RPAREN PLUS MINUS EOF DIV ]
##
## The known suffix of the stack is as follows:
## expr MINUS
##

<YOUR SYNTAX ERROR MESSAGE HERE>

通常,--list-errors 应该计算所有可能导致错误的方式。但我不明白为什么像 main: INT PLUS DIVmain: INT MINUS DIV 这样的方式没有包含在 parser.messages 中(但是,像 5+/ 这样的表达式仍然正确地引发错误)。有谁知道原因吗?

通常,(错误)导数集是无限的,因此无法显示或计算它。 Menhir 试探性地尝试输出有用的错误消息,但不能保证它们会详尽无遗甚至有用。