1.基本概念
1.文法
是描述语言的语法结构的形式规则(文法规则)
2.上下文无关文法
这种问法所定义的语法2范畴(语法单位)是完全独立于这种范畴可能出现的环境
(1)不适合描述任何的自然语言
(2)对程序语言是足够描述的
例:
<句子>=><主语><谓语><间接宾语><直接宾语>
He gives me a book
生成的语法树如下
归纳:一个上下文无关文法的组成部分如下
(1).终结符:是语言的基本符号
1.在程序语言里,单词符号,基本字,标识符,常数,算符和界符等。
2.从语法分析的角度,终结符号是一个语言的不可再分的基本符号。
(2).非终结符:又称为语法变量,用来代表语法范畴
1.一个非终结符代表一个一定的语法概念
2.一个非终结符是一个类(或集合)的记号
3.一个非终结符表示一定符号串的集合,由终结符号和非终结符号组成的符号串
(3).开始符号:是一个特殊的非终结符号,它代表所定义的语言中我们最感兴趣的语法范畴这个语法范畴通常称为“句子”。
(4).文法规则(产生式):A→α
左部符号A:是一个非终结符号
右部符号α:是由终结符号或与非终结符号组成的一个符号串。
2.形式化描述上下文无关文法
上下文无关的文法是一个四元式:(VT,VN,S,P)
其中:(1)VT 是一个非空有限集合,其中的每个元素称为终结符号。
(2)VN 是一个非空有限集合,其中的每个元素为非终结符号。
(3)S是一个非终结符号,称为开始符号。
(4)P是一个产生式的有限集合
P∈VN,α∈(VN∪VN),开始符号S必须在某个产生式的左边出现一次。
3.用上下文无关文法定义定义语言
基本思想:从文法的开始符号触发,反复连续使用产生式,对非终结符号进行替换和展开
文法G: E→E+E | E * E | (E) | i
1.E→E+E
2.E→E*E
3.E→(E)
4.E→i
根据规则
E=>(E)
=>(E+E)
=>(i+E)
=>(i+i)
称这样一串替换序列是从E推出(i+i)的一个推导。
若G是一个文法,则α是它的一个句型,仅含有终结符号的句型是一个句子。
文法*生句子的全体是一个语言,将它记为L(G):
L(G)={α|S=> * α&α∈VT * }
来一个例子吧:
已知有文法G[S]:S→bA; A→aA|a 确定文法所定义的语言
从符号S可以推出
S=>bA=>ba;
S=>bA=>baA=>baa;
S=>bA=>baaA=>baaa;
…
S=>bA=>baaA=>…=>ba…a
归纳出从S可以推导出所有以b开头的后面跟一个或任意多个a的字符串,即
L(G)={ban|n>=1}