【问题标题】:Conflict in CLR parsingCLR 解析中的冲突
【发布时间】:2016-02-20 10:32:06
【问题描述】:

这是语法:

S' -> S
S-> aBc|bCc|aCd|bBd
B ->e
C ->e

我在 CLR 中进行了解析,然后出现了 reduce/reduce 冲突。接下来做什么?我在下面附上了我解决的问题。

【问题讨论】:

    标签: parsing lalr parse-tree compiler-construction


    【解决方案1】:

    请告诉我下一步该怎么做

    Err...修复冲突?

    即使从最后两个产生式也很清楚,当解析器在 e 之后遇到 c 或 d 时:

    B -> e . {c, d}
    C -> e . {c, d}
    

    单次前瞻不足以确定上述条件是否应降低到 B 或 C。

    解析器生成器通常有一个解决方案,即采用语法中第一个出现的那个,但这并不总是一个好的情况。在上述语法中,如果采用这种方案,由于e总是归约为B,解析器将无法解析bec和aed。

    我建议更改语法,以免发生冲突。你知道整个语法只能产生 aec、bec、aed 和 bed。看看序列中有什么更好的地方,可以单独制作,可以单独减少。

    【讨论】:

    • 它有减少/减少冲突。所以我们没有解决方案吗?而不是改变语法。
    • 嗯...一些解析器生成器允许您指定某些标记的优先级,但是由于您正在学习语言理论和自动机,我认为您不允许采用特定于实现的概念进入任务。这是相关野牛案例文章的链接:gnu.org/software/bison/manual/html_node/Reduce_002fReduce.html
    猜你喜欢
    • 2011-12-10
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    • 2020-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    相关资源
    最近更新 更多