常用表达

时间:2011-02-14 18:23:10

标签: context-free-grammar bnf regular-language formal-languages

首先,我不知道这是否是我要求的正确翻译。

在我的一门课程中,我们只是盯着学习正则表达式,正式语言等等。

Alphabet {1,0,S,R}
Terminals {1,0}
Rules:

S ::= 0
S ::= 1
S ::= 1R
R ::= 1R
R ::= 0R
R ::= 1
R ::= 0

在这种情况下,假设我从1R开始,然后我可以继续使用1R或0R。

如果我从1R开始,那么只需1 ....那么句子(在这种情况下是二进制数字)是完整的吗?因为事后我不能“追加”一些东西,比如1R然后我选择1然后再选择1R?

提前致谢,如果不正确,请重新发帖/移动。


增加:

0  at rule S ::= 0  
1  with S ::= 1  
10 with S ::= 1R, so R ::= 0

如何生成1100110?

这不是功课,它是powerpoint的一个例子/问题。我不明白这是怎么做的。

3 个答案:

答案 0 :(得分:3)

你所拥有的是一种常规语言,使用无上下文语法定义。定义相同语言的正则表达式为(0)U(1{0,1}*)。简单来说,常规语言包含以1开头的所有字符串0和1,以及字符串0。

无上下文语法以一些初始非终端符号开头,在这种情况下它似乎是S.然后,您可以根据列出的生产规则用符号串替换任何非终端符号。当字符串不包含非终端符号时,它就“完成”。

在您的示例中,如果要替换的字符串中当前有S或R,则只能“选择1R”。正如这个语法一样,第一次将R替换为1时,您不再需要替换任何非终端,并且完成了字符串的生成。

编辑:这是1100110的制作痕迹。

S  
1R         via S ::= 1R
11R        via R ::= 1R
110R       via R ::= 0R
1100R      via R ::= 0R
11001R     via R ::= 1R
110011R    via R ::= 1R
1100110    via R ::= 0

答案 1 :(得分:2)

你是对的。不允许附加,只能替换。但是使用这种语言,您可以通过选择“R :: = 1R”或“R :: = 0R”,然后再次替换R来继续使字符串更长。

答案 2 :(得分:1)

  

如果我从1R开始,那么只需1 ....那么句子(在这种情况下是二进制数字)是完整的吗?

是的,这是正确的。句子11匹配S = 1R = 11。

然而,使用此语法,您总是可以使用R = 1R或R = 0R为您的句子添加越来越多的数字。

修改:回答问题编辑:

  

如何生成1100110?

1100110 = S = 1R = 11R = 110R = 1100R = 11001R = 110011R = 1100110

希望这有助于您理解。

祝你好运!