Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Computer science 上下文无关语法——计算理论_Computer Science_Context Free Grammar - Fatal编程技术网

Computer science 上下文无关语法——计算理论

Computer science 上下文无关语法——计算理论,computer-science,context-free-grammar,Computer Science,Context Free Grammar,我正在准备期末考试&我正在读维基百科上的上下文无关语法文章,遇到了下面的例子 S → SS- (1st production rule) S → (S) - (2nd production rule) S → () - (3rd production rule) 我很清楚左右派生。当我试图解决这个问题时,我从开始符号开始 S-> SS -> (S)S-> ()S-> ()(S) -> ()() 但当我看到答案时,是这样的 S → SS → SSS → (S

我正在准备期末考试&我正在读维基百科上的上下文无关语法文章,遇到了下面的例子

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)
→ ((()()))()(())
我不确定我的答案出了什么问题?是否需要两次使用第一个产生式规则?谁能帮我一下吗

当我试图解决这个问题时,我从开始符号开始

什么问题?维基百科的文章没有带来任何问题。它只是展示了一个语法,描述了匹配良好的括号中的语言,并给出了该语言中一个单词的示例以及如何派生它

这是一个完全正确的推导

但当我看到答案时,是这样的

S → SS → SSS → (S)SS → ((S))SS → ((SS))S(S)
→ ((()S))S(S) → ((()()))S(S) → ((()()))()(S)
→ ((()()))()(())
这不是答案(毫无疑问)。这只是一个例子

我不确定我的答案出了什么问题


你的推导没有错。
()
(()())(())(())
都是该语言中的有效单词

是否需要两次使用第一个产生式规则

您可以根据需要频繁地应用产生式规则(当然,假设术语中存在您要替换的非终端),并且可以按照您想要的任何顺序应用产生式规则。这一切都取决于你想派生哪个词。

你的方法没有“错”——你只是在维基百科的文章中派生了不同的符号序列


关键的一点是,可以使用语法派生任何匹配的嵌套括号序列,但不能派生像
(()
)()(

这篇文章只是给出了一个可能的字符串,可以用该语法表示……您给出了另一个可能的字符串。您可以使用派生来证明这些字符串根据该语法是有效的(即反向)


EDIT:beattothepunch:p

在上面的问题中,S是非终结符,(,)是终结符。我知道我们在使用递归,但它是如何工作的?所以我们可以根据需要多次应用规则,以在结尾实现终结符?@cool:是的,但通常(在考试中,或编写解析器时)你正在走另一条路-使用规则来显示特定序列(例如,
(())
)是有效的。和@Simon-好的,这是有意义的。谢谢。