定义4.6 文法G所产生的语言定义为集合{x|S x,其中S为文法识别符号,且x∈VT*}。可用L(G)表示该集合。 从定义4.6看出两点:第一,符号串x可从识别符号推出,也即x是句型。第二,x仅由终结符号组成,即x是文法G的句子。也就是说,文法描述的语言是该文法一切句子的集合。 考虑例4.1的文法G,有两条产生式(规则):(1)S→0S1和(2)S→01,通过对第一个产生式使用n-1次,然后使用第2个产生式一次,得到: S0S100S11…0n-1S 1n-10n1n 是不是L(G)中的元素仅是这样的串(0n1n)?是的,这可以由下面的讨论证明。在使用了第二个产生式后,发现句型中S的个数减少了一个。每次使用第一个产生式之后,S的左端多一个0,右端多一个1,S的个数不变。因此,使用了 S→01之后,就再也没有S留在结果串中了。由于两个产生式都是以S为左端,所以为生成句子,仅能按下列次序使用产生式:即使用第一个产生式若干次,然后使用第二个产生式。因此L(G)={0n1n | n≥1}。 例4.2的文法G的句子是字母字符打头的、字母字符和数字字符构成的串。这就是程序设计语言中用于表示名字的标识符。 定义4.7 若L(G1)=L(G2),则称文法G1和G2是等价的。 也就是说,如果两个文法定义的语言一样,则称这两个文法是等价的。 例如文法G[A]: A→0R A→01 R→A1 和例4.1的文法等价。