📅  最后修改于: 2020-12-17 07:44:26             🧑  作者: Mango
CFG表示无上下文语法。它是一种形式语法,用于以给定形式语言生成所有可能的字符串模式。上下文无关的语法G可以由四个元组定义为:
G = (V, T, P, S)
哪里,
G是语法,由一组生产规则组成。它用于生成语言的字符串。
T是终端符号的最终集合。用小写字母表示。
V是非终结符的最终集合。用大写字母表示。
P是一组生产规则,用于将字符串的非终结符(位于生产左侧)替换为其他终结符或非终结符(位于生产右侧)。
S是用于导出字符串的起始符号。我们可以通过在生产的右侧重复替换一个非终结符来导出字符串,直到所有非终结符都被终结符替换为止。
为集合∑ = {a}上具有任意多个a的语言构造CFG。
解:
我们知道上述语言的正则表达式是
r.e. = a*
正则表达式的生产规则如下:
S → aS rule 1
S → ε rule 2
现在,如果要派生字符串“ aaaaaa”,我们可以从开始符号开始。
S
aS
aaS rule 1
aaaS rule 1
aaaaS rule 1
aaaaaS rule 1
aaaaaaS rule 1
aaaaaaε rule 2
aaaaaa
re = a *可以生成一组字符串{ε,a,aa,aaa,…..}。我们可以有一个空字符串,因为S是开始符号,规则2给出S→ε。
为正则表达式(0 + 1)*构造CFG
解:
CFG可以由下式给出:
Production rule (P):
S → 0S | 1S
S → ε
规则是0和1与开始符号的组合。由于(0 + 1)*表示{ε,0,1,01,10,00,11,….}。在这个集合中,ε是一个字符串,因此在规则中,我们可以设置规则S→ε。
为语言L = {wcwR |其中w€(a,b)*}。
解:
可以为给定语言生成的字符串是{aacaa,bcb,abcba,bacab,abbcbba,….}
语法可能是:
S → aSa rule 1
S → bSb rule 2
S → c rule 3
现在,如果要派生字符串“ abbcbba”,我们可以从开始符号开始。
S → aSa
S → abSba from rule 2
S → abbSbba from rule 2
S → abbcbba from rule 3
因此,可以从给定的生产规则派生任何此类字符串。
为语言L = a n b 2n构造一个CFG,其中n> = 1。
解:
可以为给定语言生成的字符串是{abb,aabbbb,aaabbbbbb ….}。
语法可能是:
S → aSbb | abb
现在,如果要派生字符串“ aabbbb”,我们可以从开始符号开始。
S → aSbb
S → aabbbb