前后文无关文法和语言

95 阅读3分钟

前后文无关文法和语言

A+B={wwA 或 wB}A+B = \{w | w\in A\ 或\ w\in B\} (相当于取交集)

AB={xyxA 或 yB}AB = \{xy| x\in A\ 或\ y\in B\}(乘法)

A0={ε}A^0 = \{\varepsilon\} (是一个集合,集合中有一个元素,元素是空串)

A+=i=1TAi=A1+A2+...+ATA^+ = \sum\limits_{i = 1}^TA^i = A^1 + A^2 + ... + A^T

A=i=0TAi=A0+A+={ε}+A+A^* = \sum\limits_{i = 0}^{T}A^i = A^0 + A^+ = \{\varepsilon\} + A^+

文法G[S]

  • 文法是一个四元式
    • (VN,VT,P,S)(V_N, V_T, P, S)
    • VNV_N:非终结符号集
    • VTV_T:终结符号集
    • PP:产生式集
    • SS:开始符号

[!TIP]

一个文法均有产生式,如:

SaSbS \rightarrow aSb

首先,产生式左部一定有非终结符

产生式的右部一般有终结符(至少有一个产生式右部有终结符,否则文法无意义)

另外,文法一定有开始符号,用于标识文法推导应该从哪个非终结符开始。

对于一个句子,开始符式就是:句子 这个 非终结符(类记号)

分析文法

自顶向下

  • 最左推导:被替换的非终结符总是当前字符串的最左非终结符
  • 最右推导:被替换的非终结符总是当年潜伏好的最右非终结符 最右推导,也称为规范推导   (规范推导)右句型规范句型(规范推导)\mathop{\longrightarrow}\limits^{右句型}规范句型

自底向上

  • 最右归约:被规约的总式当前符号串最右
  • 最左归约(规范规约)

[!TIP]

最左推导的逆过程就是最右规约

最右推导的逆过程就是最左规约

Δ\Delta 语法树

  • 子树:任一节点 及其 全部后继
  • 直接子树(树高为1):子树根只有直接后继?

[!tip]

直接后继:在树中,一个节点的直接后继式其直接的孩子节点。

        *
       / \
      +   5
     / \
    3   4

+为根的子树

  +
 / \
3   4

3344就是++的直接后继

  • 一棵语法树 \longleftrightarrow 多种推导序列

  • 一棵语法树 \longleftrightarrow 唯一最左推导和最右推导 二义性判断会用到

  • Δ\Delta 二义性文法L(G)L(G) 的某个句子对应不止一个 最左/最右 推导 即,L(G)中某个句子,对应不止一个语法树

  • Δ\Delta 无二义性文法:该文法所产生的每个句子都仅右一棵语法树

[!tip] L(G) 是文法 G 能生成的所有合法句子的集合。

[!tip]

对于文法 G:{ SS+S  SS  a }G:\{\ S \rightarrow S +S \ |\ S*S\ |\ a\ \}

句子 a+aaa + a * a 的二义性:

  1. 最左推导1(先展开第一个 SSS+SS+S):

    语法树

        S
       /|\
      S + S
     a   /|\
        S * S
        a   a
    

    (等价于 (a)+(aa)(a) + (a * a)

  2. 最左推导2(先展开第二个 SSSSS*S):

    语法树

        S
       /|\
      S * S
     /|\   a
    S + S
    a   a
    

    (等价于 (a+a)a(a + a) * a

这两个推导对应 不同的语法树,导致运算优先级不同(乘法优先 vs. 加法优先),因此 GG 是二义性文法。

  • Δ\Delta短语:每颗子树的叶子
  • 直接短语:每棵直接子树的叶子
  • 句柄:某句型的最左直接短语(即规范分析中最先被规约的子串)
  • 素短语:至少包含一个终结符 且不包含更小素短语的短语

[!tip]

对于,语法树:

       S
      /|\
    S * S
  /|\   a
S + S
a   a

其叶子,即

a + a * a

[!warning]

最右推导,找最左直接短语

因为替换是反向操作,最左直接短语是最后被替换为终结符的

就应该最先被替换为非终结符

Δ\Delta化简文法

  1. SS开始一步步看,将含有永远消不掉的符号的产生式消去 所有的(无用符号,无用产生式)

    因为,产生式是用来产生仅由终结符组成的句子的,无法终结,即产生式无法产生句子,故无用

  2. ε\varepsilon-产生式 AεA \rightarrow \varepsilon

  3. 删 形如 ABA\rightarrow B 的 单产生式