【发布时间】: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
这是语法:
S' -> S
S-> aBc|bCc|aCd|bBd
B ->e
C ->e
我在 CLR 中进行了解析,然后出现了 reduce/reduce 冲突。接下来做什么?我在下面附上了我解决的问题。
【问题讨论】:
标签: parsing lalr parse-tree compiler-construction
请告诉我下一步该怎么做
Err...修复冲突?
即使从最后两个产生式也很清楚,当解析器在 e 之后遇到 c 或 d 时:
B -> e . {c, d}
C -> e . {c, d}
单次前瞻不足以确定上述条件是否应降低到 B 或 C。
解析器生成器通常有一个解决方案,即采用语法中第一个出现的那个,但这并不总是一个好的情况。在上述语法中,如果采用这种方案,由于e总是归约为B,解析器将无法解析bec和aed。
我建议更改语法,以免发生冲突。你知道整个语法只能产生 aec、bec、aed 和 bed。看看序列中有什么更好的地方,可以单独制作,可以单独减少。
【讨论】: