一个文法记作 G[S] = (VN, VT, P, S)[1],四样东西:
E、T,代表"还能往下展开的语法成分")i、+、(,是最终出现在句子里的)。VN 与 VT 不相交。α→β,读作"α 可以是 β")推导(⇒):用某产生式的右部,替换符号串里的一个非终结符。例:有 E→E+E,则 E ⇒ E+E。
L(G) = 所有句子的集合。语法树(推导树):根是 S,每用一条产生式 A→XYZ 就让 A 长出子结点 X、Y、Z;所有叶子从左到右连起来就是一个句型。
二义性(高频考点):如果文法里存在某一个句子,能画出两棵不同的语法树(等价说法:有两个不同的最左推导,或两个不同的最右推导),这个文法就是二义的[2]。
| 型别 | 名称 | 产生式限制 | 识别工具/用途 |
|---|---|---|---|
| 0 型 | 短语文法 | α→β,α 含至少一个非终结符 | 图灵机 |
| 1 型 | 上下文有关 CSG | |α| ≤ |β|(右部不短于左部) | 线性界限自动机 |
| 2 型 | 上下文无关 CFG | 左部是单个非终结符 A→β | 下推自动机/描述语法 |
| 3 型 | 正规文法 | 右线性 A→aB 或 A→a | 有限自动机/描述单词 |
包含关系:3 型 ⊂ 2 型 ⊂ 1 型 ⊂ 0 型(限制越多、级别数越大、能力越弱)。编译里:2 型描述语法、3 型描述单词。
判第几型:看左部——左部是单个非终结符才可能是 2/3 型;再看右部是不是 A→aB/A→a 这种"一个终结符带头"的形态 → 是则 3 型,否则 2 型。
证二义:挑一个句子,给它构造两棵不同的语法树(或两个不同最左推导)。能造出来 = 二义。
i+i*i。
最左推导①(先用 E→E+E): E ⇒ E+E ⇒ i+E ⇒ i+E*E ⇒ i+i*E ⇒ i+i*i (结合方式: i+(i*i) ) 最左推导②(先用 E→E*E): E ⇒ E*E ⇒ E+E*E ⇒ i+E*E ⇒ i+i*E ⇒ i+i*i (结合方式: (i+i)*i )两个推导都是最左推导、都得到同一个句子
i+i*i,但过程不同,对应两棵不同的语法树:
树① 根为 + 树② 根为 *
E E
/ | \ / | \
E + E E * E
| /|\ /|\ |
i E * E E + E i
| | | |
i i i i
= i+(i*i) = (i+i)*i
一个句子有两棵不同的语法树,故 G 二义。 ∎
点选项立即判分。错了会标出正确答案并解释。