用 TOC 中的例子解释语言的正式定义?
可以从起始符号导出的所有字符串(通过终结符号)的集合是由语法G生成的语言。
示例1
令文法G由终结符集T={a,b}、唯一的非终结符起始符号S和产生式规则集定义。因此,语法G将如下-
S→∧,S→aSb
或者简而言之,如下所述-
S→∧|锑
L(G)={∧,ab,aabb,aaabbb,...}
定义
如果G被称为具有起始符号S和终结符集T的文法,则G生成的语言是以下集合-
S→∧|锑
L(G)={s|s∈T*和S⇒+s}。
也就是说,它是仅包含终结符的所有字符串的集合,这些终结符可以使用一个或多个步骤从起始符号导出。
示例2
设∑={a,b,c}是终结符的集合,{A,S}是具有起始符号S的非终结符的集合。∑上的语言L由以下产生式定义-
S→b|aA,A→c|BS
属于语言L的字符串示例如下-
显然,我们可以生成b。所有较长的字符串都以a开头。所有字符串都将以b或ac结尾。
我们可以制作字符串-b,ac,abb,abac,abbabb,ababac,abababb,...
以下描述是否正确?
'来自L的任何字符串都包含a、b(以任何顺序)并以b或ac结尾'
...不!,
例如ba,abaabac∈/L
示例3
设∑={a,b,c}是终结符的集合,S是唯一的非终结符。以下四个产生式描述了哪种语言?
S→∧
S→aS
S→bS
S→cS
或者简写为−S→∧|||乙|CS。
尝试意识到∑*中的所有字符串都可以通过这些规则生成,并针对字符串aacb进行验证。
S⇒aS⇒aaS⇒aacS⇒aacbS⇒aacb∧=aacb
因此,S⇒*aacb。