字母表是一个非空有穷集合,由字符组成。(是一个集合)
字母表的乘积是笛卡尔积,幂次由乘积定义。
正闭包vs克林闭包:后者包括空串。
句子的乘积:联结。句子的0次是空串。
子串的定义需注意:串不能隔着抽取字符。
一个语言:
即是子集。
很好理解,V对应的元素是不确定的,T对应的是确定的元素(terminal)
注意α和β的所属集合。
注意上图中LA使用的是至少一步推导,因为非终结符不会0步推导为终结符。
而开始符号代表文法所定义的语言, ?:0步推导指的是S就是w?
文法分类:
文法定义的要求:在产生式中任取α定义为β,α中至少包含一个非终结符。
越推越多。为啥叫上下文有关呢,因为阿尔法也是好些东西的组合【(V∪T)+】产生式往往是一坨东西推出一坨东西^^
而CFG中α属于V,说明产生式左部就是一个语法成分。产生式是一个推一坨,这一个东西不看上下文就能推。
左右线性是指可以往左/右边增长串。
注意A和B就是一个语法成分,α是终结符串。而终结符集是语言的句子中出现的字符,空串不包含在终结符集里。
据上图,可见要求是依次严格的。
CFG语法树:
为什么E不是短语捏?仔细看看短语的定义会发现:短语是要被推导出来的,而最右部的E,他的父亲推导出来的并不是他,而是id*E。
最左直接短语叫做句柄。
CFG的二义性:
动手算算之后发现这个时候如果第一步推乘法,后面就不可能推得出原式的样子了,会变成(E+E)*E。二义性消除。