跳转至

1 上下文无关文法的定义

手工实现的语法分析器通常使用 LL 文法

处理较大的 LR 文法类的语法分析器通常是使用自动化工具构造得到的

文法,可以理解成某一类东西的产生规则。

定义

一个上下文无关文法 G 是一个四元组,其包含:

(Ⅰ)一个非空有限集合 V_T,称之为终结符(记号名)的集合。

(Ⅱ)一个非空有限集合 V_N,称之为非终结符的集合。

可以理解成,非终结符是可以再分的。可以 N→ABN→aBN→ab

(Ⅲ)一个非终结符 S,称之为开始符号。开始符号 定义的 终结符串集 就是文法定义的语言。

(Ⅳ)一个非空有限集合 P,其中每个元素是一个产生式。

一个产生式的形式是 A→\alpha,其中 A\in V_N,即非终结符;\alpha\in (V_T\cup V_N)^*

示例

看一个 G 的例子:(\{\textbf{id},+,*,-,(,)\},\{expr,op\},expr,P)P 由如下产生式组成:

  • expr→expr\quad op\quad expr
  • expr→(expr)
  • expr→-expr
  • expr→\textbf{id}
  • op→+
  • op→*

上面这些产生式可以用 “|” 符号来合并:

  • expr→expr\quad or\quad expr|(expr)|-expr|\textbf{id}
  • op→+|*

注意:

  • 文法是比正则表达式表达能力更强的表示方法,可以用正则表达式描述的构造都可以用文法来描述,但是反之不成立。每个正则语言都是一个上下文无关语言,但是反之不成立。

  • 有穷自动机不能计数(类似 $a^nb^n $ 这样的语言);一个文法可以对两个个体进行计数,但是无法对三个个体计数。

推导

推导的意思是一个非终结符可以根据某个产生式(看成重写规则)来替代,如 $$ expr\Rightarrow expr\quad op\quad expr\Rightarrow expr+expr\Rightarrow\textbf{id}+expr\Rightarrow\textbf{id}+\textbf{id} $$ 也可以看成逐渐替换成实例

其他定义

TERM EXPLANATION
\Rightarrow^* 零步或多步推导
\Rightarrow^+ 一步或多步推导
上下文无关语言 上下文无关文法产生的语言
句型 S\Rightarrow^* \alpha,则称 \alphaG 的句型
句子 若上面的 \alpha 不含非终结符,则称之为句子
\Rightarrow_{lm} 最左推导,即每次都代换句型最左边的非终结符的推导(上面推到的示例就不是最左推导)
本文阅读量