有一个很小的Sedlex和Menhir的计算器。现在,我想让计算器能够解析像1+这样的表达式。所以我把parser.mly修改成
... ...
main:
expr EOL { $1 }
;
expr [@recovery (E_int 0)]:
INT { E_int $1 }
| BOOL { E_bool $1 }
... ...但是计算1+仍然返回一个错误Fatal error: exception Parser.MenhirBasics.Error。
有人能帮忙吗?
发布于 2022-02-12 23:56:29
我的评论的补充摘要:
[@recovery ...]是一个特定于Merlin的构造error令牌来定义您自己的错误恢复:main:
expr EOL { $1 }
;
expr [@recovery (E_int 0)]:
INT { E_int $1 }
| BOOL { E_bool $1 }
| error { E_int 0 }来自门希尔手册
--strategy strategy. 此开关选择一个错误处理策略,供代码后端、表后端和参考解释器使用。可用的策略是legacy和simplified。来自OCaml周刊
这种方式很可能在不久的将来行不通,但现在起作用了,这似乎是执行OP要求的最简单的方法。
https://stackoverflow.com/questions/71090668
复制相似问题