我正在为我的决赛和学习而学习我正在阅读来自维基百科的无上下文语法文章,并且遇到了以下示例。
S → SS- (1st production rule)
S → (S) - (2nd production rule)
S → () - (3rd production rule)
我很清楚左右推导。当我试图解决这个问题时,我先从开始符号
开始S-> SS -> (S)S-> ()S-> ()(S) -> ()()
但是当我看到答案时,就像这样
S → SS → SSS → (S)SS → ((S))SS → ((SS))S(S)
→ ((()S))S(S) → ((()()))S(S) → ((()()))()(S)
→ ((()()))()(())
我不确定我的答案出了什么问题?是否有必要使用第一次生产规则两次?任何人都可以帮我解决这个问题。
答案 0 :(得分:2)
你的方法没有“错误” - 你刚刚为维基百科文章衍生出不同的符号序列。
关键是,可以使用语法派生匹配,嵌套括号的任何序列,但不能导出(()
或)()(
等序列。
答案 1 :(得分:1)
当我尝试解决此问题时,我从开始符号
开始
有什么问题?维基百科文章没有任何问题。它只显示了一个语法,描述了匹配良好的括号语言,并给出了该语言中一个单词的例子,以及如何推导出它。
S-> SS -> (S)S-> ()S-> ()(S) -> ()()
这是一个非常有效的推导。
但是当我看到答案时,就像这样
那不是 的答案(毫无疑问)。这只是一个例子。
我不确定我的答案出了什么问题?
你的推导没有错。 ()()
和((()()))()(())
都是该语言中的有效字词。
是否有必要两次使用第一个生产规则?
您可以根据需要随时应用生产规则(假设您要替换的非终端当然存在于该术语中)以您想要的任何顺序。这一切只取决于你想要得出的词。
答案 2 :(得分:1)
这篇文章简单地给出了一个可以使用该语法表示的可能字符串......你正在给另一个可能的字符串。您可以使用派生来证明这些字符串根据语法有效(即反向)。
编辑:击败拳头:P