首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >上下文无关文法.计算理论

上下文无关文法.计算理论
EN

Stack Overflow用户
提问于 2010-12-12 06:04:31
回答 3查看 1.4K关注 0票数 2

我正在为期末考试做准备&我正在阅读维基百科上的上下文无关语法文章,偶然发现了下面的例子。

代码语言:javascript
复制
S → SS- (1st production rule)

S → (S) - (2nd production rule)

S → () - (3rd production rule)

我很清楚左侧和右侧的派生。当我试图解决这个问题时,我从开始符号开始

代码语言:javascript
复制
S-> SS -> (S)S-> ()S-> ()(S) -> ()() 

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

代码语言:javascript
复制
S → SS → SSS → (S)SS → ((S))SS → ((SS))S(S)
→ ((()S))S(S) → ((()()))S(S) → ((()()))()(S)
→ ((()()))()(())

我不确定我的答案出了什么问题?是否有必要使用第一个产生式规则两次?有没有人能帮我。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-12-12 06:24:32

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

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

S-> SS -> (S)S-> ()S-> ()(S) -> ()()

这是一个非常有效的推导。

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

这不是答案(没有问题)。这只是一个例子。

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

你的推导没有任何问题。()()((()()))()(())都是该语言中的有效单词。

第一产生式规则是否有必要使用两次?

您可以随心所欲地应用产生式规则(当然,假设您想要替换的非终端出现在术语中),并且可以按照您想要的顺序应用。这完全取决于你想要派生出哪个单词。

票数 1
EN

Stack Overflow用户

发布于 2010-12-12 06:25:57

你的方法没有什么“错误”--你只是给维基百科的文章派生了一个不同的符号序列。

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

票数 2
EN

Stack Overflow用户

发布于 2010-12-12 06:26:56

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

编辑:精打细算:P

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4419216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档