编译原理06-parser-cfg
六、上下文无关文法-CFG
Definition-(Context-Free Grammar(CFG), 上下文无关文法)
上下文无关文法$G$是一个四元组$G = (T,N,S,P)$
$T$是终结符号(Terminal)集合,对应于词法分析器产生的词法单元
$N$是非终止符号(Non-terminal)集合
$S$是开始(start)符号$(S \in N)$且唯一
$P$是产生式(Production)集合
头部/左部(Head)A:单个非终结符
体部/右部(Body)$\alpha$:终结符与非终结符构成的串,也可以是空串$\epsilon$
[Entended] Backus-Naur form ([E]BNF)
CFG
语义
语义:上下文无关文法$G$定义了一个语言$L(G)$
语言是串的集合
推导
推导即是将某个产生式的左边替换成它的右边
每一步推导需要选择替换哪个非终结符号,以及使用哪个产生式
定义
Definition(Sentential Form-句型)
Definition(Sentence-句子)
Definition(文法$G$生成的语言$L( G)$)
文法$G$生成的语言$L( G)$是它能够推导出的所有句子的构成的集合
文法G的两个基本问题
Membership问题:给定字符串$x \in T^*,x \in L(G)$?
即检查$x$是否符合文法$G$
这就是语法分析器的任务:
为输入的词法单元流寻找推导,构建语法分析树,或者报错
$L(G)$究竟是什么
这是程序设计语言设计者需要考虑的问题
Example
为什么不使用优雅,强大的正则表达式描述程序设计语言的语法
每个正则表达式$r$对应的语言$L(r)$都可以使用上下文无关文法来描述
此外,若$\delta(A_i,\epsilon)=A_j$,则添加$A_i \to A_j$
Theorem
$L = \lbrace a^n,b^n \mid n \geqslant 0\rbrace$该语言无法使用正则表达式来描述
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Rain's Blog!
评论