当使用特定语法解析文件时,如果解析失败,我会得到一条相应的错误消息,其中包含源文件中违反语法的位置。
在这些情况下,我想要查看的是此时处于活动状态的语法规则的列表,类似于语法规则“堆栈跟踪”,或者到目前为止已经匹配的规则。这在Rascal中是可能的吗?
因此,对于一个非常简单的示例,使用文档中的EXP语言,如果我尝试解析"2 + foo“,我可以得到如下内容
Exp
=> left Exp "+" Exp
=> left IntegerLiteral "+" Exp
=> left IntegerLiteral "+" <?>
No derivation of "foo" from rule 'Exp'另一种说法是查看不完整的解析树,因为它是解析错误发生的时刻。这有意义吗?
发布于 2020-02-11 21:13:41
这完全有道理,但我担心这个“不完整的解析树”特性在我们的待办事项列表中。
注意,对于非确定性解析算法,它可能会返回一组当前的解析上下文,因此是一个“解析森林”,而不是一个堆栈跟踪。不过,我认为这将是一个非常有用的调试功能。
现在我能做的唯一的建议是“增量调试”,所以删除一半的输入并检查解析错误是否仍然存在,然后另一半,清洗/洗涤/重复。
https://stackoverflow.com/questions/60166685
复制相似问题