首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Menhir的部分解析与恢复

Menhir的部分解析与恢复
EN

Stack Overflow用户
提问于 2022-02-12 09:38:08
回答 1查看 102关注 0票数 0

有一个很小的Sedlex和Menhir的计算器。现在,我想让计算器能够解析像1+这样的表达式。所以我把parser.mly修改成

代码语言:javascript
复制
... ...
main:
    expr EOL                { $1 }
;
expr [@recovery (E_int 0)]:
    INT                     { E_int $1 }
  | BOOL                    { E_bool $1 }
... ...

但是计算1+仍然返回一个错误Fatal error: exception Parser.MenhirBasics.Error

有人能帮忙吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-12 23:56:29

我的评论的补充摘要:

  • [@recovery ...]是一个特定于Merlin的构造
  • 到目前为止(13/02/2022),仍然可以使用以下特殊的error令牌来定义您自己的错误恢复:
代码语言:javascript
复制
main:
    expr EOL                { $1 }
;
expr [@recovery (E_int 0)]:
    INT                     { E_int $1 }
  | BOOL                    { E_bool $1 }
  | error                   { E_int 0 }

来自门希尔手册

  • 如果使用错误令牌来保存错误并继续解析,则应该选择遗留策略。
  • --strategy strategy.  此开关选择一个错误处理策略,供代码后端、表后端和参考解释器使用。可用的策略是legacysimplified

来自OCaml周刊

  • 新代码后端不能编译使用更复杂的错误标记并因此需要遗留策略的语法。作为一种解决办法,可以切换到表后端(使用--表--策略遗留)或旧代码后端(使用--代码-古)。从长远来看,我们建议放弃使用错误令牌。对错误令牌的支持可能会在将来的某个时候被完全删除。

这种方式很可能在不久的将来行不通,但现在起作用了,这似乎是执行OP要求的最简单的方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71090668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档