首页 > 解决方案 > 如何使此 CFG 无冲突?

问题描述

所以我有以下语法,符号(a,b,c,d,!):

S → N!
N → aNd | aMd | aNdN | aMdN
M → bM | cM | b | c

本质上,“a”和“d”是括号,中间必须包含一个或多个“b”和/或“c”。可以有多个括号,只要它们仍然包含一个或多个“b”和/或“c”。必须以!结尾。

所以这个语法有效,但我正在努力让它没有冲突。冲突与非终结符 N 和 M 发生冲突,您可以在其中移动和减少相同的字符。我试图通过引入 epsilons 和新的非终端来解决问题,但总是有一些阻碍。

可以在非终端 N 中减少 'd' 和移位 'd',也可以在非终端 M 中移位/减少 'b' 和 'c'。

从语法派生的字符串示例:

abccdaaccdd!
aaabddd!
aabddaccd!
aabbbddabccbcd!
aacbcdacbdd!
acbbccd!

我认为我的语法是明确的,因为我看不出它有什么问题?

我怎样才能消除这种冲突?

谢谢!

标签: grammarcontext-free-grammarautomata

解决方案


您是否尝试将规则中的 bM 交换为 Mb?


推荐阅读