首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用menhir的多个错误报告:哪个标记?

使用menhir的多个错误报告:哪个标记?
EN

Stack Overflow用户
提问于 2014-12-08 03:19:57
回答 1查看 960关注 0票数 6

我正在用Menhir + Ocamllex编写一个小型解析器,我有两个似乎不能同时满足的要求

  • 我想在错误之后继续解析(以报告更多的错误)。
  • 我想打印错误所在的标记。

通过使用error令牌,我只能轻松地完成任务。我也只能很容易地使用为这个问题建议的方法。然而,我不知道实现这两种目标的简单方法。

我现在处理错误的方式如下:

代码语言:javascript
复制
pair:
| left = prodA SEPARATOR right = prodA { (* happy case *) }
| error SEPARATOR right = prodA { print_error_report $startpos;
(* would like to continue after the first error, just in case
   there is a second error, so I report both *) }

帮助我的一件事是访问词汇本身,这样我就可以直接得到令牌了。这意味着我传递的不是$startpos,而是类似于$lexbuf的东西,但据我所知,没有官方的方法来访问词汇。1中的解决方案只在调用方到解析器的级别工作,其中调用方本身正在传递语法分析器,而不是在语义操作中。

有人知道它是否真的可用吗?或者一个解决办法?

EN

回答 1

Stack Overflow用户

发布于 2015-01-18 10:37:28

由于Frédéric Bour和Fran ois Pottier的联合工作,出现了一种支持增量解析的新版本Menhir。见12月17日发送的公告电子邮件

这个增量API的思想是反向控制:而不是解析器调用lexer来处理输入,而是有一个较低级别的API,您可以操作解析器状态,它在每个消耗的令牌之后返回一个更新的状态(因为您可以观察到不需要新令牌的内部缩减)。特别是,您可以观察得到的解析器状态是否是一个错误,并选择回溯并提供不同的输入(取决于您的错误恢复开始时间),以进一步推进您的输入。

总体思路是,这将允许在解析器-用户端实现良好的错误恢复和错误报告策略,并慢慢放弃相当不灵活的“错误标记”机制。

这已经是可用的,但是关于这些特性的工作仍在进行中,在接下来的几个月中,您应该期望在其他版本中对这些新特性提供更强大的支持。

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

https://stackoverflow.com/questions/27350899

复制
相关文章

相似问题

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