这种语言的开始是回文:
就是对称的。
如何表示这种语言?:
图穷匕见,开始派生了:
正式定义:
一些习惯的符号:
归约与派生:
概念很简单,符号记一下。
最左和最右派生:
现在只是有了产生的过程,我们要的语言就是产生的字符串:
点题了点题了。
语法分析树:
可以直接从树上看出来。
歧义性:
这个不要求掌握。
文法的化简与范式:
可达与产生:
注意注意:a,B是“终结符或变元组成的字符串”,X是“终结符或非终结符”。S可以到X,那X就是可达的(可以从S到达);X可以到w,就是产生的(可以产生w)。
简单的判断:
2:a都是产生的,那A可以先派生成a,在派生成w,那A也就是产生的了
4:A可达,然后再由A派生a,那a也就是可达的了。
总而言之,产生是倒着推的,可达是正着推的。
先看能不能产生w,再看能不能从S达到。
必须先消除非产生的,再消除非可达的:
消除无用符号已经完成了,现在来看消除空串产生式。
那一杠是减号。
这里解释一下,A->空不是说只能是空,是可以为空。所以A->X1X2……然后后面的全可空不代表只有空串一条路。现在不许直接变空串了,但是原来的X1->a这样的合法生意还得做呀,而且X1X2这些可空也就说明了A->X1这样的变法是存在的,这样有没有产生空串,也要保留,于是就有了这样的规律。
这样一看,只有空串受伤的世界完成了。
空串产生式已经解决了,接下来就是单元对。
这里举个例子:
为什么S只能代替左边的变元呢?因为是S->A而没有A->S,二者不是互换的地位。我们替换左边的实际上是S->A->0A|0简化成S->0A|0,不能推出S-0S|0吧?
最后我们习得了三种消除的方法,那么要以怎样的顺序使用这些方法呢?:
文法的规范表示形式:
先来学乔姆斯基:
如何把普通的CFG变成乔姆斯基CFG?
这里详细解释一下:A->X1X2...的形式,当然中间有可能会有终结符,这里Ca的作用就是把他变回变元。变成B1B2...之后(因为之前至少有一个是变成了终结符的,所以M>=3),D的作用就是递推,一步一步地展现A变成B1B2...的过程。
例子:
格雷巴赫范式:
没错,就这么简单,只要用已有的表达式改一下就可以了。