编译原理


 上下文无关文法:它定义的语法范畴(或语法单位)是完全独立于这种范畴可能出现的环境。例如,在程序设计语言中,当碰到一个算术表达式时,我们完全可以“就事论事”处理,而不必考虑它所处的上下文。然而,在自然语言中,随便一个词,甚至一个字的意思在不同的上下文中都有可能有不同的意思。幸运的是,当今的程序设计语言都是上下文无关的。

编译原理

  "→"表示箭头左边的由箭头右边的定义

  把He gave me a book与上述规则进行对照,看其中的语法范畴是否处于适当的位置,如果你了解英语的话,你应该可以确认这是一个正确的句子。做科学研究都有一个过程从现象得出一般结论,再用实验验证这个一般性结论。有了这个语法规则我们可以造出很多这种英文句子(简单假设,英文语法远比这复杂)。如果我们要造一个句子表达我们自己的意思,利用这个规则,很容易。

编译原理

    

  根据上述规则,句子无需考虑上下文,就可以判断正确性(符合<主语><谓语><间接宾语><直接宾语>的规则)。

  其中,He,me等为终结符号,<主语>、<谓语>、<间接宾语>等为非终结符号。

  这个文法最终要定义<句子>语法结构,所以<句子>在这里称为开始符号;<谓语>→<动词>这种书写形式称之为产生式。

  归纳一下:上下文无关语法G包括四个部分:一组终结符号,一组非终结符号,一个开始符号,以及一组产生式。

  说明一下:终结符号是组成语言不可再分的基本符号,在程序语言中就是保留字、标识符、常数等;非终结符号是一个给定的语法概念,是一个类(或集合)记号,而是不是某个个体记号;开始符号是一个特殊的非终结符号,是语言中我们最终想得到的字符串(在程序语言中,我们最终感兴趣的是“程序”这个语法范畴,其他的语法都是构造“程序”的基石);产生式(也称产生规则或者简称规则)是语法范畴的一种书写规则。

1型文法:又称为上下文有关文法

(1):式子左边可以有多个字符,但必须有一个终结符

(2):式子右边可以有多个字符,可以是终结符,也可以是非终结符,但必须是有限个字符

2型文法:又称为上下文无关文法

(1):式子左边只能有一个字符,而且必须是非终结符

(2):式子右边可以有多个字符,可以是终结符,也可以是非终结符,但必须是有限个字符

3型文法:又称为正规文法(正规文法又包括左线性文法和右线性文法)

(1):式子左边只能有一个字符,而且必须是非终结符
(2):式子右边最多有二个字符,而且如果有二个字符必须是一个终结符和一个非终结符
如果只有一个字符,那么必须是终结符
(3):式子右边的格式一定要一致,也就是说如果有一个是(终结符+非终结符)那么所有的式子都必须是(终结符+非终结符)

  如果有一个是(非终结符+终结符),那么所有的式子都必须是(非终结符+终结符)

正规文法——左线性文法:

(1):必须是三型文法

(2):式子右边的产生是(非终结符+终结符)的格式