微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

报告与 TatSu 中一样多的不同语法错误

如何解决报告与 TatSu 中一样多的不同语法错误

我正在尝试为首先由 TatSu 解析然后解释的语言实现一个解释器。我想向我的最终用户提供我的解释器一次报告尽可能多的语言源中包含的潜在错误功能包括由底层 TatSu 解析器引发的 FailedParse 错误

我所知道的唯一方法是 TatSu 只生成一个 FailedParse 异常,然后停止解析。

有没有办法包装 TatSu 解析器,使其继续解析源代码并报告源代码中任何进一步的潜在语法错误

解决方法

您需要错误恢复。您可以在网上阅读有关该主题的信息。

TaTsu 不会自行进行错误恢复,仅提供部分支持。

这就是想法。鉴于语法的这一部分:

block = {statement ';'}+
statemtent =
    | if_statement
    | expression
    ;

您更改语法以添加错误恢复规则。

block = {statement ';'}+
statemtent =
    | if_statement
    | expression
    | statement_error
    ;

statement_error = ->&';' ;  # skip until a semicolon is seen

可以在整个语法中应用相同类型的恢复。

然后,在语义定义中,解析器将为每个 xxx_error 规则记录一条错误消息。

还有其他安排规则的方式,“skip” (->) 表达式的放置位置随心所欲。

TatSu 可以为错误恢复提供更多支持,它可能会从解决 #203

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。