我正在尝试为一种先由TatSu解析然后再解释的语言实现一个解释器。我希望向我的最终用户提供这样一种功能,即我的解释器可以同时报告语言源代码中包含的尽可能多的潜在错误,包括底层TatSu解析器引发的FailedParse错误。
据我所知,唯一的方法是TatSu只生成一个FailedParse异常,然后停止解析。
有没有一种方法可以包装TatSu解析器,使其恢复对源代码的解析并报告源代码中任何进一步的潜在语法错误?
发布于 2021-04-03 21:48:35
你需要错误恢复。您可以在Web上阅读有关该主题的内容。
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开始
https://stackoverflow.com/questions/66916662
复制相似问题