📜  自动机上下文无关语法| CFG

📅  最后修改于: 2020-12-17 07:44:26             🧑  作者: Mango

上下文无关语法(CFG)

CFG表示无上下文语法。它是一种形式语法,用于以给定形式语言生成所有可能的字符串模式。上下文无关的语法G可以由四个元组定义为:

G = (V, T, P, S)

哪里,

G是语法,由一组生产规则组成。它用于生成语言的字符串。

T是终端符号的最终集合。用小写字母表示。

V是非终结符的最终集合。用大写字母表示。

P是一组生产规则,用于将字符串的非终结符(位于生产左侧)替换为其他终结符或非终结符(位于生产右侧)。

S是用于导出字符串的起始符号。我们可以通过在生产的右侧重复替换一个非终结符来导出字符串,直到所有非终结符都被终结符替换为止。

范例1:

为集合∑ = {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→ε。

范例2:

为正则表达式(0 + 1)*构造CFG

解:

CFG可以由下式给出:

Production rule (P):
S → 0S | 1S
S → ε

规则是0和1与开始符号的组合。由于(0 + 1)*表示{ε,0,1,01,10,00,11,….}。在这个集合中,ε是一个字符串,因此在规则中,我们可以设置规则S→ε。

范例3:

为语言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

因此,可以从给定的生产规则派生任何此类字符串。

范例4:

为语言L = a n b 2n构造一个CFG,其中n> = 1。

解:

可以为给定语言生成的字符串是{abb,aabbbb,aaabbbbbb ….}。

语法可能是:

S → aSbb | abb

现在,如果要派生字符串“ aabbbb”,我们可以从开始符号开始。

S → aSbb
S → aabbbb