在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规则记录一条错误消息。

还有其他方式来安排规则,以及在哪里放置"跳过">(->(表达符合口味。

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

最新更新