【问题标题】:Rascal: Grammar Stack Trace流氓:语法堆栈跟踪
【发布时间】:2020-02-11 10:23:03
【问题描述】:

当使用特定语法解析文件并且解析失败时,我会收到一条相应的错误消息,其中包含源文件中违反语法的位置。

在这些情况下,我想查看的是目前处于活动状态的语法规则列表,例如语法规则“堆栈跟踪”,或者到目前为止匹配的规则。 这在 Rascal 中可能吗?

因此,举一个非常简单的例子,在文档中的 EXP 语言中,如果我尝试解析“2 + foo”,我可能会得到类似

Exp
=> left Exp "+" Exp
=> left IntegerLiteral "+" Exp
=> left IntegerLiteral "+" <?>
No derivation of "foo" from rule 'Exp'

另一种说法是查看不完整的解析树,因为它是发生解析错误的那一刻。这有意义吗?

【问题讨论】:

    标签: debugging grammar rascal


    【解决方案1】:

    这完全有道理,但恐怕这个“不完整的解析树”功能在我们的 TODO 列表中。

    请注意,使用非确定性解析算法,它可能会返回一组当前解析上下文,因此是“解析森林”而不是单个堆栈跟踪。我仍然认为这将是一个非常有用的调试功能。

    我现在唯一能做的建议是“delta-debugging”,所以删除一半输入并检查解析错误是否仍然存在,然后另一半,冲洗/起泡/重复。

    【讨论】:

    • 检查! - 顺便说一句,我的解析错误似乎是由于 repl 与所有导入的语法混淆了。我将把它作为我下一个问题的主题?。
    • 太棒了!这实际上是一个已知问题; repl 中模块的状态
    猜你喜欢
    • 1970-01-01
    • 2011-05-25
    • 2011-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多