gpt4 book ai didi

ocaml - 使用 menhir : which token? 报告多个错误

转载 作者:行者123 更新时间:2023-12-04 20:04:34 24 4
gpt4 key购买 nike

我正在用 Menhir + Ocamllex 编写一个小型解析器,但我似乎无法同时满足两个要求

  • 我想在出错后继续解析(报告更多错误)。
  • 我想打印发生错误的 token 。

  • 通过使用 error,我只能轻松完成 1) token 。我也只能做 2)
    很容易,使用为 this question 建议的方法.但是,我不知道实现两者的简单方法。

    我现在处理错误的方式是这样的:
    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 *) }

    对我有帮助的一件事是访问 lexbuf 本身,这样我就可以直接获取 token 。这将意味着而不是 $startpos我通过了类似 $lexbuf 的东西但据我所知,没有访问 lexbuf 的官方方法。 1中的解决方案仅在解析器的调用者级别工作,其中调用者本身将 lexbuf 传递给解析器,但不在语义操作中。

    有谁知道它是否真的以某种方式可用?或者可能是一种解决方法?

    最佳答案

    由于 Frédéric Bour 和 François Pottier 的联合工作,有一个新版本的 Menhir 可用,支持增量解析。见 announcement email 12 月 17 日寄出。

    这个增量 API 的想法是反向控制:而不是解析器调用词法分析器来处理输入,您有一个较低级别的 API,您可以在其中操作解析器状态,该状态在每个消耗 token 后返回更新的状态(在这有点更细粒度,因为您可以观察到不需要新 token 的内部减少)。特别是,您可以观察结果解析器状态是否为错误,并选择回溯并提供不同的输入(取决于您的错误恢复策略)以在您的输入中走得更远。

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

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

    关于ocaml - 使用 menhir : which token? 报告多个错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27350899/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com